最近在做单体系统的微服务化拆分,划分好微服务边界就是编码,这部分工作和开发一样,但是微服务的部署环境可是比较麻烦,各种组件需要配置,捣鼓了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文件,写入如下内容
[root@registry ~]# 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
[root@registry ~]# yum update
[root@registry ~]# yum install docker-engine
4.3、关闭防火墙和selinux
[root@registry ~]# systemctl stop firewalld.service
[root@registry ~]# systemctl disable firewalld.service
[root@registry ~]# vi /etc/selinux/config
修改 /etc/selinux/config 文件中的 SELINUX="" 为 disabled ,然后重启
4.4、增加tcp监听端口
修改docker配置文件
[root@registry ~]# 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
[root@registry ~]# systemctl start docker
可通过Docker info验证docker安装成功。
三、创建swarm集群
5、创建swarm管理节点(28)
[root@master ~]# 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