Docker三剑客之Swarm

一、概述

Swarm是Docker公司推出的用来管理docker集群的平台,几乎全部用GO语言来完成的开发的,代码开源在https://github.com/docker/swarm;Docker Swarm 和 Docker Compose 一样,都是 Docker 官方容器编排项目,但不同的是Docker Compose 是一个在单个服务器或主机上创建多个容器的工具,而 Docker Swarm 则可以在多个服务器或主机上创建容器集群服务,对于微服务的部署,显然 Docker Swarm 会更加适合。

Swarm 是什么?

Docker Swarm 是Docker官方的跨节点的容器编排工具。用户只需要在单一的管理节点上操作,即可管理集群下的所有节点和容器。

从 Docker 1.12.0 版本开始,Docker Swarm 已经包含在 Docker 引擎中(docker swarm),并且已经内置了服务发现工具,我们就不需要像之前一样,再配置 Etcd 或者 Consul 来进行服务发现配置了。

Docker Swarm 基本结构图
在这里插入图片描述
上图可以看出,Swarm是典型的master-slave结构,通过发现服务来选举manager。manager是中心管理节点,各个node上运行agent接受manager的统一管理,集群会自动通过Raft协议分布式选举出manager节点,无需额外的发现服务支持,避免了单点的瓶颈问题,同时也内置了DNS的负载均衡和对外部负载均衡机制的集成支持。

二、Docker Swarm 工作原理

1)Docker Engine client

  • docker service create:我们通过docker service create这个命令去创建一个服务。

2)swarm manager

  • API:这个请求直接由Swarm manager的API进行接收,接收命令并创建服务对象。
  • orchestrator:为服务创建一个任务。
  • allocater:为这个任务分配IP地址。
  • dispatcher:将任务分配到指定的节点。
  • scheduler:再该节点中下发指定命令。

3)worker node:接收manager任务后去运行这个任务

  • container:创建相应的容器。
  • worker:连接到调度程序以检查分配的任务
  • executor:执行分配给工作节点的任务
Service:为一个副本,可以理解为是一个任务,一个任务是一个容器。
swarm manager:它将这个副本下发到三个可用的work节点。
container:实际的docker容器去运行应用。
task:work任务的名称为service名称后面跟.1根据个数以此类推。

在这里插入图片描述

三、Swarm的几个关键概念

  • Swarm

集群的管理和编排是使用嵌入docker引擎的SwarmKit,可以在docker初始化时启动swarm模式或者加入已存在的swarm

  • Node

每一个docker engin都是一个node(节点),分为 manager 和worker。Manager节点还执行维护所需群集状态所需的编排和集群管理功能。Work节点接收并执行从管理器节点分派的任务。

  • Service

一个服务是任务的定义,管理机或工作节点上执行。它是群体系统的中心结构,是用户与群体交互的主要根源。创建服务时,你需要指定要使用的容器镜像。

  • Task

任务是在docekr容器中执行的命令,Manager节点根据指定数量的任务副本分配任务给worker节点。一个任务包含了一个容器及其运行的命令。task是service的执行实体,task启动docker容器并在容器中执行任务。


Swarm命令行说明

1)docker swarm:集群管理

集群管理,子命令有init, join, leave, update。(docker swarm --help查看帮助);

作用

执行集群的管理功能,维护集群的状态,选举一个leader节点去执行调度任务。

init          #初始化集群
join          #将节点加入集群
join-token    #管理加入令牌
leave         #从集群中删除某个节点,强制删除加参数--force 
update        #更新集群
unlock        #解锁集群

2)docker node:节点管理

节点管理,子命令有accept, promote, demote, inspect, update, tasks, ls, rm。(docker node --help查看帮助)

作用

接收和执行任务。参与容器集群负载调度,仅用于承载task。

demote      #将集群中一个或多个节点降级
inspect     #显示一个或多个节点的详细信息
ls          #列出集群中的节点
promote     #将一个或多个节点提升为管理节点
rm          #从集群中删除停止的节点,--force强制删除参数
ps          #列出一个或多个节点上运行的任务
update      #更新节点

3)docker service:服务管理

服务创建,子命令有create, inspect, update, remove, tasks。(docker service–help查看帮助)

作用

一个服务是work节点上执行任务的定义。创建一个服务,指定了容器所使用的镜像和容器运行的命令。

create      #创建一个新的服务
inspect     #列出一个或多个服务的详细信息
ps          #列出一个或多个服务中的任务信息
ls          #列出服务
rm          #删除一个或多个服务
scale       #扩展一个或多个服务
update      #更新服务

四、Swarm的调度策略

Swarm在调度(scheduler)节点(leader节点)运行容器的时候,会根据指定的策略来计算最适合运行容器的节点,目前支持的策略有:spread, binpack, random.

  • Random

顾名思义,就是随机选择一个Node来运行容器,一般用作调试用,spread和binpack策略会根据各个节点的可用的CPU, RAM以及正在运
行的容器的数量来计算应该运行容器的节点。

  • Spread

在同等条件下,Spread策略会选择运行容器最少的那台节点来运行新的容器,binpack策略会选择运行容器最集中的那台机器来运行新的节点。
使用Spread策略会使得容器会均衡的分布在集群中的各个节点上运行,一旦一个节点挂掉了只会损失少部分的容器。

  • Binpack

Binpack策略最大化的避免容器碎片化,就是说binpack策略尽可能的把还未使用的节点留给需要更大空间的容器运行,尽可能的把容器运行在
一个节点上面。

五、Swarm Cluster模式特性

  • 批量创建服务

建立容器之前先创建一个overlay的网络,用来保证在不同主机上的容器网络互通的网络模式

  • 强大的集群的容错性

Swarm Cluster不光只是提供了优秀的高可用性,同时也提供了节点弹性扩展或缩减的功能。当容器组想动态扩展时,只需通过scale参数即可复制出新的副本出来。

如果有需求想在每台节点上都run一个相同的副本,方法其实很简单,只需要在命令中将"–replicas n"更换成"–mode=global"即可!

  • 复制服务(–replicas n)

将一系列复制任务分发至各节点当中,具体取决于您所需要的设置状态,例如“–replicas 3”。

  • 全局服务(–mode=global)

适用于集群内全部可用节点上的服务任务,例如“–mode global”。如果大家在 Swarm 集群中设有 7 台 Docker 节点,则全部节点之上都将存在对应容器。

  • 调度机制

所谓的调度其主要功能是cluster的server端去选择在哪个服务器节点上创建并启动一个容器实例的动作。它是由一个装箱算法和过滤器组合而成。每次通过过滤器(constraint)启动容器的时候,swarm cluster 都会调用调度机制筛选出匹配约束条件的服务器,并在这上面运行容器。

六、Dcoker Swarm 集群部署

5.1、环境准备(三台linux机器,centos8系统)

IP:192.168.0.110 主机名:manager110 担任角色:swarm manager

IP:192.168.0.111 主机名:node111 担任角色:swarm node

IP:192.168.0.112 主机名:node112 担任角色:swarm node

5.2、开始创建Swarm cluster

1、准备工作

1)修改主机名

# 192.168.0.110执行
$ hostnamectl set-hostname manager110
# 192.168.0.111执行
$ hostnamectl set-hostname node111
# 192.168.0.112执行
$ hostnamectl set-hostname node112

2)在所有节点上配置/etc/hosts文件(可配置可不配置)

$ echo '192.168.0.110 manager110' >> /etc/hosts
$ echo '192.168.0.111 node111' >> /etc/hosts
$ echo '192.168.0.112 node112' >> /etc/hosts

在这里插入图片描述
3)设置防火墙
关闭三台机器上的防火墙,不建议直接关闭防火墙,一般生成环境上不允许直接关闭防火墙。如果开启防火墙,则需要在所有节点的防火墙上依次放行2377/tcp(管理端口)7946/tcp/udp(节点间通信端口)4789/udp(overlay 网络端口)端口
如果对防火墙不清楚的,可以看这里

# 放开2377/tcp,7946/udp,4789/udp端口
$ firewall-cmd --zone=public --add-port=2377/tcp --permanent
$ firewall-cmd --zone=public --add-port=7946/tcp --permanent
$ firewall-cmd --zone=public --add-port=7946/udp --permanent
$ firewall-cmd --zone=public --add-port=4789/udp --permanent
# 重新加载生效
$ firewall-cmd --reload
# 查看
$ firewall-cmd --list-ports

在这里插入图片描述
4)所有节点安装docker并配置加速器
安装

$ yum -y install docker-ce

【配置加速】修改文件 /etc/docker/daemon.json,没有这个文件就创建
添加以下内容后,重启docker服务:

{
   "registry-mirrors": ["http://hub-mirror.c.163.com"]
}
2、创建Swarm并添加节点

1)创建Swarm集群(manager110)

$ docker swarm init --advertise-addr 192.168.0.110

在这里插入图片描述

上面命令执行后,该机器自动加入到swarm集群。这个会创建一个集群token,获取全球唯一的token,作为集群唯一标识。记住这个token值,后续将其他节点加入集群都会用到这个token值。

其中,–advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系。命令的输出包含了其它节点如何加入集群的命令。

再次执行会报如下错误
在这里插入图片描述
解决方法

# 这里的leave就是在集群中删除节点,-f参数强制删除,执行完在重新执行OK
$ docker swarm leave -f
$ docker swarm init --advertise-addr 192.168.0.110

2)查看集群的相关信息

$ docker info

在这里插入图片描述
发现swarm状态active,且是manager节点

$ docker node ls

在这里插入图片描述
3) 添加node节点主机到Swarm集群

上面我们在创建Swarm集群的时候就已经给出了添加节点的方法。如果忘记了,可以通过以下命令查看token和添加方法

$ docker swarm join-token worker

在这里插入图片描述
#node111 主机上执行

$ docker swarm join --token SWMTKN-1-2fhcxi16zhm0wfeijbgw426il1oo8nbt1qkswfyprk4cooq94y-cp543kam4fgna3s7wg5h9q2aa 192.168.0.110:2377

【问题】可能会出现如下问题
在这里插入图片描述
这是因为时间不同步的问题,安装chrony时间同步服务即可
【解决】

$ yum install chrony -y

编辑配置文件/etc/chrony.conf,换成阿里的时间同步服务器:

[root@RedHat8-2 ~]# cat /etc/chrony.conf 
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#pool ntp1.aliyun.com iburst  --注释这行,外网时间服务器的网址,阿里的时间同步服务器
server 172.20.10.6 iburst         --添加这行,表示与本机同步时间(视情况自行更改)
 
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift
 
# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3
 
# Enable kernel synchronization of the real-time clock (RTC).
rtcsync
 
# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *
 
# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2
 
# Allow NTP client access from local network.
allow 172.20.10.0/28              -->>允许哪些服务器或客户端到这台时间服务器来同步时间。必须配置
# Serve time even if not synchronized to a time source.
local stratum 10                  -->>该行注释取消掉不然NTP synchronized: 为no 取消掉后变为 NTP synchronized:yes
# Specify file containing keys for NTP authentication.
keyfile /etc/chrony.keys
 
# Get TAI-UTC offset and leap seconds from the system tz database.
leapsectz right/UTC
 
# Specify directory for log files.
logdir /var/log/chrony
 
# Select which information is logged.
#log measurements statistics tracking

重启chrondy服务

$ systemctl restart chronyd
# 查看同步源
$ chronyc sources -v
# 查看同步状态
$ timedatectl

在这里插入图片描述
在manager110节点上重新执行

$ docker swarm leave -f
$ docker swarm init --advertise-addr 192.168.0.110

在这里插入图片描述

在node111和node112和节点重新执行以下命令,添加到集群中

# 先查加入集群的命令(在manager110节点上执行)
$ docker swarm join-token worker

$ docker swarm join --token SWMTKN-1-2fhcxi16zhm0wfeijbgw426il1oo8nbt1qkswfyprk4cooq94y-cp543kam4fgna3s7wg5h9q2aa 192.168.0.110:2377

在这里插入图片描述
在manager110节点上查看node信息

$ docker node ls

在这里插入图片描述
AVAILABILITY 的三种状态:

  • Active:调度器能够安排任务到该节点
  • Pause:调度器不能够安排任务到该节点,但是已经存在的任务会继续运行
  • Drain:调度器不能够安排任务到该节点,而且会停止已存在的任务,并将这些任务分配到其他 Active 状态的节点

改变节点的可用性(availability),如下操作:

$ docker node update --availability drain node111
$ docker node ls

在这里插入图片描述

如上,当node1的状态改为drain后,那么该节点就不会接受task任务分发,就算之前已经接受的任务也会转移到别的节点上。

再次修改为active状态(及将下线的节点再次上线)

$ docker node update --availability active node111
$ docker node ls

在这里插入图片描述
MANAGER STATUS 的三种状态:

  • Leader:为群体做出所有群管理和编排决策的主要管理者节点
  • Reachable:如果 Leader 节点变为不可用,该节点有资格被选举为新的 Leader
  • Unavailable:该节点不能和其他 Manager 节点产生任何联系,这种情况下,应该添加一个新的 Manager 节点到集群,或者将一个 Worker 节点提升为 Manager 节点

升级/降级节点,示例:

# 升级
$ docker node promote node111
或者
$ docker node update --role manager node111
# 降级
$ docker node demote node111
或者
$ docker node update --role worker node111
3、在Swarm中部署服务(nginx为例)

Docker 1.12版本提供服务的Scaling、health check、滚动升级等功能,并提供了内置的dns、vip机制,实现service的服务发现和负载均衡能力。

1)创建网络(overlay)

$ docker node ls
$ docker network ls | grep nginx_net

在这里插入图片描述
2)部署服务

# 就创建了一个具有一个副本(--replicas 1 )的nginx服务,使用镜像nginx
$ docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx
# 查看
$ docker service ls

在这里插入图片描述
3)查询Swarm中服务的信息
-pretty 使命令输出格式化为可读的格式,不加 --pretty 可以输出更详细的信息:

$ docker service inspect --pretty my_nginx

在这里插入图片描述
查询到哪个节点正在运行该服务

$ docker service ps my_nginx

如下该容器被调度到manager-node节点上启动了,然后访问http://192.168.0.110即可访问这个容器应用(如果调度到其他节点,访问也是如此)
在这里插入图片描述
登陆该节点,可以查看到nginx容器在运行中

$ docker ps

在这里插入图片描述
4)在Swarm中动态扩展服务(scale)

当然,如果只是通过service启动容器,swarm也算不上什么新鲜东西了。Service还提供了复制(类似kubernetes里的副本)功能。可以通过docker service scale 命令来设置服务中容器的副本数比如将上面的my_nginx容器动态扩展到4个。

$ docker service scale my_nginx=4

在这里插入图片描述
和创建服务一样,增加scale数之后,将会创建新的容器,这些新启动的容器也会经历从准备到运行的过程,过一分钟左右,服务应该就会启动完成,这时候可以再来看一下 nginx 服务中的容器

$ docker service ps my_nginx

在这里插入图片描述
可以看到,之前my_nginx容器只在manager-node节点上有一个实例,而现在又增加了3个实例。

5)模拟宕机node节点

如果一个节点宕机了(即该节点就会从swarm集群中被踢出),则Docker应该会将在该节点运行的容器,调度到其他节点,以满足指定数量的副本保持运行状态。

将node111宕机后或将node111的docker服务关闭,那么它上面的task实例就会转移到别的节点上。当node111节点恢复后,它转移出去的task实例不会主动转移回来,只能等别的节点出现故障后转移task实例到它的上面。使用命令"docker node ls",发现node111节点已不在swarm集群中了(状态为:Down)。

然后过一会查询服务的状态列表

$ docker node ls

在这里插入图片描述
6)Swarm 动态缩容服务(scale)
同理,swarm还可以缩容,同样是使用scale命令。
将my_nginx容器变为1个

$ docker service scale my_nginx=1

过段时间查看

$ docker service ps my_nginx

在这里插入图片描述
7)除了上面使用scale进行容器的扩容或缩容之外,还可以使用docker service update 命令。 可对 服务的启动 参数 进行 更新/修改。

$ docker service update --replicas 3 my_nginx
$ docker service ps my_nginx

在这里插入图片描述
8)为了下面的直观显示,我这里把my_nginx服务直接删除了

$ docker service rm my_nginx
4、Swarm中使用Volume(挂在目录,mount命令)

前面有一篇专门说Volume的,不清楚可以看这里
1)查看volume的帮助信息

$ docker volume --help

2)创建一个volume

$ docker volume create --name testvolume
$ docker volume ls
$ docker volume inspect testvolume

在这里插入图片描述
2)创建新的服务并挂载testvolume(nginx为例)

$ docker service create --replicas 3 --mount type=volume,src=testvolume,dst=/usr/share/nginx/html --name test_nginx nginx

温馨提示:
参数src写成source也可以;dst表示容器内的路径,也可以写成target

查看

$ docker service ls
$ docker service ps test_nginx

在这里插入图片描述

5、多服务Swarm集群部署

这里部署的服务有三个(nginx服务,visualizer服务,portainer服务) 除了nginx服务作为示例之外,visualizer(官方地址)和portainer(官方地址)都是集群 GUI 管理服务。

docker service部署的是单个服务,我们可以使用docker stack进行多服务编排部署

1)编写docker-compose.yml文件

$ mkdir swarmGUI
$ cd swarmGUI
$ cat docker-compose.yml

version: "3"
services:
  nginx:
    image: nginx
    ports:
      - 8888:80
    deploy:
      mode: replicated
      replicas: 3

  visualizer:
    image: dockersamples/visualizer
    ports:
      - "8080:8080"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

  portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
    deploy:
      replicas: 1
      placement:
        constraints: [node.role == manager]

在这里插入图片描述
2)通过这个yml文件部署服务

$ docker stack deploy -c docker-compose.yml deploy_deamon

在这里插入图片描述
查看创建服务

$ docker service ls

在这里插入图片描述
3)测试验证
第一个服务:deploy_deamon_nginx,先查看调度到哪个节点上

$ docker service ps deploy_deamon_nginx

在这里插入图片描述
从上图看调度到manager110和node112节点上
访问:
http://192.168.0.110:8888
http://192.168.0.112:8888
在这里插入图片描述

第二个服务:deploy_deamon_portainer

$ docker service ps deploy_deamon_portainer

在这里插入图片描述
访问:
http://192.168.0.110:9000

在这里插入图片描述
登录后台
1)第一次登陆,会让我们设置密码。
在这里插入图片描述
2)选择local模式
在这里插入图片描述

由于portainer支持local、remote、agent等形式来管理docker容器。我们这里是为了管理本地的docker容器,所以选择第一个local。

3)查看我们管理下的endpoint
在这里插入图片描述
4)查看endpoint中所有的信息
在这里插入图片描述
可以看到该页面包含该endpoint几乎所有的信息,其中有镜像信息、容器信息、容器网络、volume等,并且提供操作。(有时候可能操作会报错,这时再去CMD中操作就可以了)

第三个服务:deploy_deamon_visualizer

$ docker service ps deploy_deamon_visualizer

在这里插入图片描述
访问:
http://192.168.0.110:8080
在这里插入图片描述

七、Docker Swarm 网络管理

7.1、Swarm 集群产生两种不同类型的流量

  • 控制和管理层面:包括 Swarm 消息管理等,例如请求加入或离开Swarm,这种类型的流量总是被加密的。(涉及到集群内部的hostname、ip-address、subnet、gateway等)
  • 应用数据层面:包括容器与客户端的通信等。(涉及到防火墙、端口映射、网口映射、VIP等)

7.2、在 Swarm Service 中有三个重要的网络概念

  • Overlay networks :覆盖物网络,顾名思义是附着在主机底层网络之上的网络, 这个网络保证了不同主机之间容器通信,手动创建
  • ingress network:进入网络,顾名思义是外部客户端访问服务时,服务节点间负载均衡(节点在开放端口上收到请求,上交给IPVS,选择容器),是一种特殊的overlay网络创建集群的时候自动创建
    初始化或加入 Swarm 集群时会自动创建 ingress 网络,大多数情况下,用户不需要自定义配置,但是 docker 17.05 和更高版本可以自定义网络
  • docker_gwbridge是一种桥接网络,将 overlay 网络(包括 ingress 网络)连接到一个单独的 Docker 守护进程的物理网络。默认情况下,服务正在运行的每个容器都连接到本地 Docker 守护进程主机的 docker_gwbridge 网络。
    docker_gwbridge 网络在初始化或加入 Swarm 时自动创建。大多数情况下,用户不需要自定义配置,但是 Docker 允许自定义。

在初始化或刚加入Swarm集群时,会创建一个Ingress和 docker-gwbridge网络

在这里插入图片描述

上面nginx_net是自定义的overlay网络,ingress 和 docker_gwbridge是自动创建的。

八、docker-machine、docker swarm、docker node、docker service 和 docker stack 常用命令

1)docker-machine 常用命令

命令说明
docker-machine create创建一个 Docker 主机(常用-d virtualbox)
docker-machine ls查看所有的 Docker 主机
docker-machine sshSSH 到主机上执行命令
docker-machine env显示连接到某个主机需要的环境变量
docker-machine inspect输出主机更多信息
docker-machine kill停止某个主机
docker-machine restart重启某台主机
docker-machine rm删除某台主机
docker-machine scp在主机之间复制文件
docker-machine start启动一个主机
docker-machine status查看主机状态
docker-machine stop停止一个主机

2)docker swarm 常用命令

命令说明
docker swarm init初始化集群
docker swarm join-token worker查看工作节点的 token
docker swarm join-token manager查看管理节点的 token
docker swarm join节点加入集群中
docker swarm leave节点离开集群
docker swarm update更新集群
docker swarm init 初始化集群
docker swarm init
docker swarm init --advertise-addr 192.168.8.110

命令格式:docker swarm init [options]

[root@centos ~]# docker swarm init --help

Usage:	docker swarm init [OPTIONS]

Initialize a swarm

Options:
      --advertise-addr string                  Advertised address (format: <ip|interface>[:port])
      --autolock                               Enable manager autolocking (requiring an unlock key to start a stopped manager)
      --availability string                    Availability of the node ("active"|"pause"|"drain") (default "active")
      --cert-expiry duration                   Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
      --data-path-addr string                  Address or interface to use for data path traffic (format: <ip|interface>)
      --data-path-port uint32                  Port number to use for data path traffic (1024 - 49151). If no value is set or is set to 0, the
                                               default port (4789) is used.
      --default-addr-pool ipNetSlice           default address pool in CIDR format (default [])
      --default-addr-pool-mask-length uint32   default address pool subnet mask length (default 24)
      --dispatcher-heartbeat duration          Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
      --external-ca external-ca                Specifications of one or more certificate signing endpoints
      --force-new-cluster                      Force create a new cluster from current state
      --listen-addr node-addr                  Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --max-snapshots uint                     Number of additional Raft snapshots to retain
      --snapshot-interval uint                 Number of log entries between Raft snapshots (default 10000)
      --task-history-limit int                 Task history retention limit (default 5)

–advertise-addr:当前主机暴露的ip地址

–availability:当前节点状态(active、pause、drain),默认为active(可正常使用)

–listen-addr:监听地址,默认为0.0.0.0:2377

docker swarm join 节点加入集群
docker swarm join-token worker  | 查看工作节点的 token 执行后node为worker
# docker swarm join --token SWMTKN-1-5kon47jifi9p4zn10sjl3lf9sr4f1gt1vwzyjrnmlpvv6gikpk-akm7chnvzgcfe6g80juankrab 192.168.8.110:2377

docker swarm join-token manager | 查看管理节点的 token 执行后node为manager
# docker swarm join --token SWMTKN-1-5kon47jifi9p4zn10sjl3lf9sr4f1gt1vwzyjrnmlpvv6gikpk-36b1pkwkpml6rqm69smn02gab 192.168.8.110:2377
命令格式:docker swarm join [options]

[root@centos ~]# docker swarm join --help

Usage:	docker swarm join [OPTIONS] HOST:PORT

Join a swarm as a node and/or manager

Options:
      --advertise-addr string   Advertised address (format: <ip|interface>[:port])
      --availability string     Availability of the node ("active"|"pause"|"drain") (default "active")
      --data-path-addr string   Address or interface to use for data path traffic (format: <ip|interface>)
      --listen-addr node-addr   Listen address (format: <ip|interface>[:port]) (default 0.0.0.0:2377)
      --token string            Token for entry into the swarm

–token:要加入集群的token

docker swarm leave 节点离开集群
docker swarm leave		STATUS 》由Ready变成Down后进行退出
docker swarm leave -f

# 离开节点需对节点进行降级,STATUS由Ready变成Down后执行退出
# 退出当前的swarm节点
docker node rm cdh3 
docker node rm --force cdh3
docker node rm --force 2pfwllgxpajx5aitlvcih9vsq

#swarm管理机退出swarm
docker node ls
docker swarm leave --force # swarm管理机退出swarm,需要 --force 参数
docker node ls
命令格式:docker swarm leave [options]

[root@centos ~]# docker swarm leave --help

Usage:	docker swarm leave [OPTIONS]

Leave the swarm

Options:
  -f, --force   Force this node to leave the swarm, ignoring warnings

-f:强制离开集群

docker swarm update 更新集群
# 升级	MANAGER STATUS 》Reachable
docker node promote cdh3
或者
docker node update --role manager cdh3
# 降级	MANAGER STATUS 》空
docker node demote cdh3 
或者
docker node update --role worker cdh3

# 在leader节点执行一下两行命令,更新CA证书有效期为99年
docker swarm update --cert-expiry 867240h0m0s
docker swarm ca --rotate | openssl x509 -text -noout
命令格式:docker swarm update [options]

[root@centos ~]# docker swarm update --help

Usage:	docker swarm update [OPTIONS]

Update the swarm

Options:
      --autolock                        Change manager autolocking setting (true|false)
      --cert-expiry duration            Validity period for node certificates (ns|us|ms|s|m|h) (default 2160h0m0s)
      --dispatcher-heartbeat duration   Dispatcher heartbeat period (ns|us|ms|s|m|h) (default 5s)
      --external-ca external-ca         Specifications of one or more certificate signing endpoints
      --max-snapshots uint              Number of additional Raft snapshots to retain
      --snapshot-interval uint          Number of log entries between Raft snapshots (default 10000)
      --task-history-limit int          Task history retention limit (default 5)
--autolock:集群自动锁定设置
--cert-expiry:设置证书的有效期
--external-ca:设置自定义证书
--max-snapshots:最大保存的raft快照
--task-history-limit:历史任务保存数量,默认为5
--snapshot-interval:快照间隔周期
--dispatcher-heartbeat-duration:心跳检测周期,默认5s

3)docker node 常用命令

命令说明
docker node ls查看所有集群节点
docker node rm删除某个节点(-f强制删除)
docker node inspect查看节点详情
docker node demote节点降级,由管理节点降级为工作节点
docker node promote节点升级,由工作节点升级为管理节点
docker node update更新节点
docker node ps查看节点中的 Task 任务

4)docker service 常用命令

命令说明
docker service create部署服务
docker service inspect查看服务详情
docker service logs产看某个服务日志
docker service ls查看所有服务详情
docker service rm删除某个服务(-f强制删除)
docker service scale设置某个服务个数
docker service update更新某个服务

5)docker stack 常用命令

命令说明
docker stack deploy部署新的堆栈或更新现有堆栈
docker stack ls列出现有堆栈
docker stack ps列出堆栈中的任务
docker stack rm删除堆栈
docker stack services列出堆栈中的服务
docker stack down移除某个堆栈(不会删除数据)

九、docker三剑客区别

组件作用&区别
docker-composedcoker-compose主要是解决本地docker容器编排问题。
docker-machinedocker-machine是解决docker运行环境问题。
docker-swarmdocker-swarm是解决多主机多个容器调度部署问题。
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值