最近在做單體系統的微服務化拆分,劃分好微服務邊界就是編碼,這部分工作和開發一樣,但是微服務的部署環境可是比較麻煩,各種元件需要配置,搗鼓了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