实验环境:
集群节点 | ip |
---|---|
server3 | 172.25.26.3 |
server4 | 172.25.26.4 |
server5 | 172.25.26.5 |
swarm集群的作用
通过把多个Docker Engine聚集在一起,形成一个大的docker-engine,对外提供容器的集群服务。同时这个集群对外提供Swarm API,用户可以像使用Docker Engine一样使用Docker集群。
swarm集群的创建
[root@server3 images]# docker swarm init
在server3初始化集群。
[root@server4 ~]# docker swarm join --token SWMTKN- 1-26txauvv56seca2skkqoe7gfkg4d5yjvicbpc0sqlljr0c0kd9-bn1wxwf3xb5vvqti119fnw7r7 172.25.26.3:2377
将server3初始化时出来的结果在server4和server5执行,将server4和server5加入集群,作为节点。
[root@server3 images]# docker node ls
查看集群节点,三个节点都起来了。
[root@server3 ~]# docker network create -d overlay webnet
创建一个私有网络。
[root@server3 ~]# docker service create --name web --network webnet --publish 80:80 --replicas 3 nginx
创建3个搭建nginx的容器,注意在所有节点上都要有nginx的镜像,l拉起的容器将平均分到3个节点上。
[root@server3 ~]# docker service ps web
可以看到,在每一个节点都打开了一个容器。
[root@server3 ~]# docker service scale web=9
拉伸,将容器数量拉到9个,这样,每个节点应该有开了3个容器。
也可以在节点进行查看
生成了3个新容器。
[root@server3 ~]# docker service scale web=3
同样,可以对拉起的容器进行缩减,这里缩减到3个,只需要修改一下数字就可以了。
这样在容器内搭建的nginx服务是可以实现负载均衡的,这个是搭建集群时自动就布置好的,不需要手动布置,现在就可以测试一下,只要在每个容器内准备测试页就可以了。
[root@server3 ~]# echo server3 > index.html
[root@server3 ~]# docker cp index.html web.3.7tnf23oi2iqzkha3sexg6pod5:/usr/share/nginx/html
[root@server4 ~]# echo server4 > index.html
[root@server4 ~]# docker cp index.html web.1.y9lc7045i7vbp7sypozp5zg52:/usr/share/nginx/html
[root@server5 ~]# echo server5 > index.html
[root@server5 ~]# docker cp index.html web.2.y52ogmk6t86ksepk02h4yewj7:/usr/share/nginx/html
设置测试页。
访问server3十次,可以发现访问是轮循的实现了负载均衡。
之后如果在拉进新的容器,也在这个负载均衡的集群内。
docker集群的监控
[root@server3 images]# docker load -i visualizer.tar
首先,在所有节点导入这个镜像。
[root@server3 images]# docker service create --name=viz \
--publish=8080:8080/tcp --constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock dockersamples/visualizer
打开监控
在浏览器输入ip:8080进行测试。
这里可以查看到所有容器的信息
[root@server3 images]# docker service update --image httpd --update-delay 5s --update-parallelism 5 web
当容器内的服务更新时,监控也会发生变化。