Docker swarm


Docker swarm


docker swarm集群:三剑客之一

docker01192.168.1.70node1
docker02192.168.1.50node2
docker03192.168.1.40node3

关闭防火墙、禁用linux、3台dockerhost区别主机名,时间同步

[root@localhost ~]# setenforce  0
[root@localhost ~]# systemctl  stop  firewalld
[root@localhost ~]# hostnamectl  set-hostname  node1
[root@localhost ~]# su -

点击并拖拽以移动

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)初始化集群


[root@node1 ~]# docker swarm init  --advertise-addr  192.168.1.70
Swarm initialized: current node (g26pbaqiozkn99qw9ngtgncke) is now a manager.

To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-3fp7qnihbzzy8u0esfjmmdfncdud4yh628e7bey5tu8fo3cl5p-4x021jwoh1bryxpwqd4bsj8xd 192.168.1.70:2377

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

点击并拖拽以移动

–advertise-addr:指定与其他Node通信的地址

上边返回的结果告诉我们:初始化成功,并且,如果想要添加work节点运行下面的命令:

docker swarm join --token SWMTKN-1-3fp7qnihbzzy8u0esfjmmdfncdud4yh628e7bey5tu8fo3cl5p-4x021jwoh1bryxpwqd4bsj8xd 192.168.1.70:2377

点击并拖拽以移动

PS:这里注意,token只有24小时的有效期

如果想要添加manager节点:运行下边的命令:

docker swarm join-token manager

点击并拖拽以移动

当两个节点加入成功之后,我们可以执行docker node ls查看节点详情

[root@node1 ~]# docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
g26pbaqiozkn99qw9ngtgncke *   node1               Ready               Active              Leader              18.09.0
w11nz7pzgmhq6wn5b51g6b8ao     node2               Ready               Active                                  18.09.0
zqi7od9q0v7zo2tkabnseuqdf     node3               Ready               Active                                  18.09.0

点击并拖拽以移动

基本操作命令:

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:覆盖型网络

[root@node1 ~]# docker network  create  -d  overlay  --attachable  docker

点击并拖拽以移动

attacheable:这个参数必须要加,否则不能用于容器

在创建网络的时候,我们并没有部署一个存储 服务,比如consul,那是因为docker swarm自带存储

3)部署一个图形化webUI界面


[root@node1 ~]# docker run  -d  -p  8080:8080  -e  HOST=192.168.1.70  -e  PORT=8080  \
>  -v /var/run/docker.sock:/var/run/docker.sock  --name viswalizer  dockersamples/visualizer

点击并拖拽以移动

然后通过浏览器验证:192.168.1.70:8080

如果访问网页访问不到,需要开启路由转发:

[root@node1 ~]# echo  net.ipv4.ip_forward = 1 >> /etc/sysctl.conf 
[root@node1 ~]# sysctl -p

点击并拖拽以移动

img点击并拖拽以移动

4)创建service(服务)


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

点击并拖拽以移动

img点击并拖拽以移动

PS:

如果node2或node3宕机,这些服务会自动转到节点中没有宕机的host上,并继续运行

–replicas:副本数量

大概可以理解为以个副本等于一个容器

查看service:

docker service ls

查看service信息:

docker service ps xxx

删除server:

docker service rm xxx

设置manager node不参加工作

[root@node1 ~]# docker node update node1 --availability  drain

点击并拖拽以移动

5)搭建私有仓库


过程:略,详情请查看看https://blog.csdn.net/weixin_45636702/article/details/104002017

6)自定义镜像


要求:基于httpd镜像,更改访问界面内容。镜像tag版本为v1,对应主机页面内容为111,2222,3333

v1,v2,v3目录下的操作一样

[root@node01 ~]# mkdir  {v1,v2,v3}
[root@node01 ~]# cd  v1
[root@node01 v1]# vim  index.html
[root@node01 v1]# cat  index.html
111111111111111111111111111
.................
[root@node01 v1]# vim  Dockerfile
[root@node01 v1]# cat  Dockerfile 
FROM  httpd
ADD index.html  /usr/local/apache2/htdocs/index.html

点击并拖拽以移动

7)发布一个服务,基于上述镜像


要求:副本数量为3个,服务的名称为:bdqn

[root@node01 ~]# docker service create --replicas 3  --name bdqn -p  80:80    192.168.1.70:5000/httpd:v1

点击并拖拽以移动

默认的ingress网络,包括创建的自定义overlay网络,为后端真正为用户提供服务的container,提供了一个统一的入口

随机映射的端口范围:30000-32767

8)服务的扩容与缩容


[root@node01 ~]# docker  service  scale  bdqn=6

点击并拖拽以移动

扩容与缩容可以直接通过scale进行设置副本数量

9)服务的升级与回滚


[root@node01 ~]# docker service  update --image  192.168.1.70:5000/httpd:v2  bdqn 

点击并拖拽以移动

//平滑的更新

[root@node01 ~]# docker service  update  --image 192.168.1.70:5000/httpd:v3  --update-parallelism 2  --update-delay 1m  bdqn

点击并拖拽以移动

PS:

默认情况下,swarm一次只更新一个副本,并且两个副本之间没有等待时间,我们可以通过

–update-parallelisnm:设置并更新的副本数量

–update-delay:指定滚动更新时间间隔

//回滚操作

[root@node01 ~]# docker service  rollback  bdqn

点击并拖拽以移动

PS:

docker swarm的回滚操作,默认只能回滚到上一次的操作状态,并不能连续回滚操作


文章作者:Echo
版权声明:本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Echo !
  目录