Docker swarm
docker swarm集群:三剑客之一
docker01 | 192.168.1.70 | node1 |
docker02 | 192.168.1.50 | node2 |
docker03 | 192.168.1.40 | node3 |
1 | 1 |
关闭防火墙、禁用linux、3台dockerhost区别主机名,时间同步
1
2
3
4
5 1[root@localhost ~]# setenforce 0
2[root@localhost ~]# systemctl stop firewalld
3[root@localhost ~]# hostnamectl set-hostname node1
4[root@localhost ~]# su -
5
docker版本必须是:v1.12版本开始
Swarm:
作用docker engin(引擎)的多个主机组成的集群
node:
每一个docker engin都是一个node(节点),分为manager和worker
manager node:
负责执行编排和集群管理的工作,保持并维护swarm处于期望的状态,swarm可以有多个manager node,他们会自动协调并选举出一个Leader执行编排任务,但相反不能没有manager node
worker node:
接受并执行由manager node派发的任务,并且默认manager node也是一个worker node,不过可以将它设置为manager-noly node,让他只负责编排和管理工作
service:
用来定义worker上执行的命令
1)初始化集群
1
2
3
4
5
6
7
8
9 1[root@node1 ~]# docker swarm init --advertise-addr 192.168.1.70
2Swarm initialized: current node (g26pbaqiozkn99qw9ngtgncke) is now a manager.
3
4To add a worker to this swarm, run the following command:
5
6 docker swarm join --token SWMTKN-1-3fp7qnihbzzy8u0esfjmmdfncdud4yh628e7bey5tu8fo3cl5p-4x021jwoh1bryxpwqd4bsj8xd 192.168.1.70:2377
7
8To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
9
–advertise-addr:指定与其他Node通信的地址
上边返回的结果告诉我们:初始化成功,并且,如果想要添加work节点运行下面的命令:
1
2 1docker swarm join --token SWMTKN-1-3fp7qnihbzzy8u0esfjmmdfncdud4yh628e7bey5tu8fo3cl5p-4x021jwoh1bryxpwqd4bsj8xd 192.168.1.70:2377
2
PS:这里注意,token只有24小时的有效期
如果想要添加manager节点:运行下边的命令:
1
2 1docker swarm join-token manager
2
当两个节点加入成功之后,我们可以执行docker node ls查看节点详情
1
2
3
4
5
6 1[root@node1 ~]# docker node ls
2ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
3g26pbaqiozkn99qw9ngtgncke * node1 Ready Active Leader 18.09.0
4w11nz7pzgmhq6wn5b51g6b8ao node2 Ready Active 18.09.0
5zqi7od9q0v7zo2tkabnseuqdf node3 Ready Active 18.09.0
6
基本操作命令:
docker swarm leave:申请离开一个集群,之后查看节点状态会变成down然后通过manager node将其删除
docker node rm xxx:删除某个节点
docker swarm join-token {manager|worker}:生成令牌,可以是manager身份或worker身份
docker node demote(降级):将swarm节点的manager降级为work
docker node promote(升级):将swarm节点的work升级为manager
2)部署docker swarm集群网络
overlay:覆盖型网络
1
2 1[root@node1 ~]# docker network create -d overlay --attachable docker
2
attacheable:这个参数必须要加,否则不能用于容器
在创建网络的时候,我们并没有部署一个存储 服务,比如consul,那是因为docker swarm自带存储
3)部署一个图形化webUI界面
1
2
3 1[root@node1 ~]# docker run -d -p 8080:8080 -e HOST=192.168.1.70 -e PORT=8080 \
2> -v /var/run/docker.sock:/var/run/docker.sock --name viswalizer dockersamples/visualizer
3
然后通过浏览器验证:192.168.1.70:8080
如果访问网页访问不到,需要开启路由转发:
1
2
3 1[root@node1 ~]# echo net.ipv4.ip_forward = 1 >> /etc/sysctl.conf
2[root@node1 ~]# sysctl -p
3
4)创建service(服务)
1
2 1[root@node1 ~]# docker service create --replicas 1 --network docker --name web1 -p 80:80 nginx
2
PS:
如果node2或node3宕机,这些服务会自动转到节点中没有宕机的host上,并继续运行
–replicas:副本数量
大概可以理解为以个副本等于一个容器
查看service:
docker service ls
查看service信息:
docker service ps xxx
删除server:
docker service rm xxx
设置manager node不参加工作
1
2 1[root@node1 ~]# docker node update node1 --availability drain
2
5)搭建私有仓库
过程:略,详情请查看看 https://www.daimajiaoliu.com/series/docker/479c0f5079003fe
6)自定义镜像
要求:基于httpd镜像,更改访问界面内容。镜像tag版本为v1,对应主机页面内容为111,2222,3333
v1,v2,v3目录下的操作一样
1
2
3
4
5
6
7
8
9
10
11 1[root@node01 ~]# mkdir {v1,v2,v3}
2[root@node01 ~]# cd v1
3[root@node01 v1]# vim index.html
4[root@node01 v1]# cat index.html
5111111111111111111111111111
6.................
7[root@node01 v1]# vim Dockerfile
8[root@node01 v1]# cat Dockerfile
9FROM httpd
10ADD index.html /usr/local/apache2/htdocs/index.html
11
7)发布一个服务,基于上述镜像
要求:副本数量为3个,服务的名称为:bdqn
1
2 1[root@node01 ~]# docker service create --replicas 3 --name bdqn -p 80:80 192.168.1.70:5000/httpd:v1
2
默认的ingress网络,包括创建的自定义overlay网络,为后端真正为用户提供服务的container,提供了一个统一的入口
随机映射的端口范围:30000-32767
8)服务的扩容与缩容
1
2 1[root@node01 ~]# docker service scale bdqn=6
2
扩容与缩容可以直接通过scale进行设置副本数量
9)服务的升级与回滚
1
2 1[root@node01 ~]# docker service update --image 192.168.1.70:5000/httpd:v2 bdqn
2
//平滑的更新
1
2 1[root@node01 ~]# docker service update --image 192.168.1.70:5000/httpd:v3 --update-parallelism 2 --update-delay 1m bdqn
2
PS:
默认情况下,swarm一次只更新一个副本,并且两个副本之间没有等待时间,我们可以通过
–update-parallelisnm:设置并更新的副本数量
–update-delay:指定滚动更新时间间隔
//回滚操作
1
2 1[root@node01 ~]# docker service rollback bdqn
2
PS:
docker swarm的回滚操作,默认只能回滚到上一次的操作状态,并不能连续回滚操作