Docker swarm

释放双眼,带上耳机,听听看~!

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

Docker swarm

 

4)创建service(服务)



1
2
1[root@node1 ~]# docker service create --replicas 1 --network docker --name web1 -p 80:80 nginx
2

Docker swarm

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的回滚操作,默认只能回滚到上一次的操作状态,并不能连续回滚操作

给TA打赏
共{{data.count}}人
人已打赏
安全运维

基于spring boot和mongodb打造一套完整的权限架构(二)【MAVEN依赖以及相应配置】

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索