天天看點

微服務環境搭建(Kong+Consul+Swarm+Shipyard)

最近在做單體系統的微服務化拆分,劃分好微服務邊界就是編碼,這部分工作和開發一樣,但是微服務的部署環境可是比較麻煩,各種元件需要配置,搗鼓了3-5天終于搗鼓出來了。前端API Gateway選用Kong,服務注冊用Consul,部署用Docker,容器的編排管理用Swarm,運維監測用Shipyard,一下為具體配置教程。

系統:Centos7

Docker:1.12

虛機節點三個:133.133.10.28

    133.133.10.30

    133.133.10.31

一、系統配置

1、安裝系統-Centos7

2、配置靜态網絡

     vi /etc/sysconfig/network-scripts/ifcfg-ens3

     修改:BOOTPROTO=static

               ONBOOT=yes

     添加:IPADDR=172.8.1.211

               PREFIX=24

               GATEWAY=172.8.1.1

               DNS1=172.8.1.1

     重新開機:reboot

3、安裝vim和網絡工具

     yum install vim

     yum install net-tools

二、安裝Docker

4、安裝docker

4.1、編輯docker.repo檔案,寫入如下内容

    [[email protected] ~]# vim /etc/yum.repos.d/docker-main.repo

    docker-main-repo]

    name=Docker main Repository

    baseurl=https://yum.dockerproject.org/repo/main/centos/7

    enabled=1

    gpgcheck=1

    gpgkey=https://yum.dockerproject.org/gpg

4.2、安裝docker

    [[email protected] ~]# yum update

    [[email protected] ~]# yum install docker-engine

4.3、關閉防火牆和selinux

    [[email protected] ~]# systemctl stop firewalld.service

    [[email protected] ~]# systemctl disable firewalld.service

    [[email protected] ~]# vi /etc/selinux/config

    修改 /etc/selinux/config 檔案中的 SELINUX="" 為 disabled ,然後重新開機

4.4、增加tcp監聽端口

    修改docker配置檔案

    [[email protected] ~]# vi /lib/systemd/system/docker.service

    ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock -D -H tcp://0.0.0.0:2375

    儲存退出

4.5、啟動docker

    [[email protected] ~]# systemctl start docker

可通過Docker info驗證docker安裝成功。

三、建立swarm叢集

5、建立swarm管理節點(28)

[[email protected] ~]# docker swarm init --listen-addr 0.0.0.0:2377 --advertise-addr 192.168.20.113

輸出(切記住token!!!):

Swarm initialized: current node (79l4eevt1sx63cw8ewb7xf1fh) is now a manager.

To add a worker to this swarm, run the following command:

docker swarm join --token SWMTKN-1-53zfa8v239nibt9eum4buemmq3wkfjsrqjxbte9ay93i3xzlsn-8cch0txhv5bl9bmlt7jh9gw68  192.168.20.113:2377

6、添加節點到swarm叢集(在要添加的節點上操作-30、31)

docker swarm join --token SWMTKN-1-53zfa8v239nibt9eum4buemmq3wkfjsrqjxbte9ay93i3xzlsn-8cch0txhv5bl9bmlt7jh9gw68 192.168.20.113:2377

可以在manager節點檢視叢集節點情況:docker node ls

四、配置consul

7、配置consul server(28)

docker run -d -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -p 8600:53 -p 8600:53/udp -h dev28 --restart=always --name=consul progrium/consul -server -bootstrap -ui-dir=/ui -advertise 133.133.10.28 -client 0.0.0.0

8、将其他節點(30、31)加入到consul叢集中(28)

docker run -d --restart=always -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -h dev30 --name=consul progrium/consul -join 133.133.10.28 -advertise 133.133.10.30 -client 0.0.0.0

9、在所有節點上配置consul的服務發現(28、30、31)

docker run -d --restart=always --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip 133.133.10.28 consul://localhost:8500

可在http://133.133.10.28:8500檢視Consul節點和服務情況

五、shipyard+swarm

10、啟動swarm-manager(28)

docker run -tid -p 3375:3375 --restart=always --name shipyard-swarm-manager swarm:latest manage --host tcp://0.0.0.0:3375 consul://133.133.10.28:8500

11、安裝swarm agent(28、30、31)

docker run -tid --restart=always --name shipyard-swarm-agent swarm:latest join --addr 133.133.10.28:2375 consul://133.133.10.28:8500

12、部署shipyard(28)

docker run -tid --restart=always --name shipyard-rethinkdb -p 28015:28015 -p 29015:29015 -v /data/rethinkdb:/data index.tenxcloud.com/docker_library/rethinkdb

docker run -tid --restart=always --name shipyard-controller --link shipyard-rethinkdb:rethinkdb --link shipyard-swarm-manager:swarm -p 80:8080 shipyard/shipyard:latest server -d tcp://swarm:3375

可通過http://133.133.10.28:80檢視Shipyard維護的docker叢集情況

六、Kong/Kong UI

1、Start your database:

docker run -d --name kong-database \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ postgres:9.4

2、Start Kong:

docker run -d --name kong \ --link kong-database:kong-database \ -e "KONG_DATABASE= postgres" \ -e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \ -e "KONG_PG_HOST=kong-database" \ -p 8000:8000 \ -p 8443:8443 \ -p 8001:8001 \ -p 7946:7946 \ -p 7947:7947/udp \ kong

3、Start Kong-DashBoard:

docker run -d -p [port]:8080 pgbi/kong-dashboard

可通過http://133.133.10.28:8002檢視Kong UI上的API注冊情況

備注:

向叢集中添加節點(都在該節點上操作):

1. 配置好Docker環境

2. 添加該節點到swarm叢集(節點29)

docker swarm join --token SWMTKN-1-61bwj3bq9c4fgc52k8gv8u2v0gu1hczme6ig04yf074n25ucd2-b7fub6rf5h4v08j1ustgo3n1f 133.133.10.28:2377

3. 向consul叢集中添加服務節點

docker run -d --restart=always -p 8300:8300 -p 8301:8301 -p 8301:8301/udp -p 8302:8302 -p 8302:8302/udp -p 8400:8400 -p 8500:8500 -h name --name=consul progrium/consul -join 133.133.10.28 -advertise ip -client 0.0.0.0

4. 啟動自動發現服務容器

docker run -d --restart=always --name=registrator --net=host -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator -ip ip consul://localhost:8500

5. 啟動swarm agent

docker run -tid --restart=always --name shipyard-swarm-agent swarm:latest join --addr ip:2375 consul://133.133.10.28:8500

參考資料:

https://dick.gitbooks.io/docker/content/chapter1.html

http://www.cnblogs.com/csharpsharper/p/5308815.html

https://dick.gitbooks.io/docker/content/docker_guizhi_shipyard.html