swarm之node操作

399 阅读7分钟

叙述

docker node

  1. 管理Swarm集群管理节点命令,必须在 swarm manager 节点上执行
  2. 此命令适用于 Swarm 编排器
  3. API1.24+ 客户端和守护程序 API 必须至少为 1.24 才能使用此命令
  4. 官方命令: docs.docker.com/engine/refe…

节点加入swarm集群

# 已工作节点角色加入集群
docker swarm join-token worker
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.99.100:2377

# 已管理节点角色加入集群
docker swarm join-token manager
docker swarm join --token SWMTKN-1-61ztec5kyafptydic6jfc1i33t37flcl4nuipzcusor96k7kby-5vy9t8u35tuqm7vh67lrz9xp6 192.168.99.100:2377

命令概览

docker node [command]描述
demote将swarm中的一个或多个 manager节点 降级为node节点
inspect显示一个或多个节点的详细信息
ls列出 swarm 集群中的所有节点
promote将一个或多个节点提升为 swarm 中的管理器
ps列出一个或多个节点上运行的任务,默认为当前节点
rm删除节点
update更新节点状态

ls(列出节点)

简介
列出 swarm 中的节点
命令详情: docs.docker.com/engine/refe…

用法

docker node ls [OPTIONS]
--filter,-f: 按条件过滤
--format: 使用 Go 模板的漂亮打印节点
--quiet,-q: 仅显示 ID

示例

[root@manager174 ~]# docker node ls
ID                            HOSTNAME     STATUS   AVAILABILITY   MANAGER STATUS   ENGINE VERSION
k40yohgg4424fqklskofy9mdc     manager174   Ready     Active         Leader          20.10.12
gy9xdhvll84q23mk7xd5pniim     worker175    Ready    Active          Reachable       20.10.12
gy9xdhvll84q23mk123ssmddd     worker176    Ready    Active                          20.10.12

AVAILABILITY 列显示调度程序是否可以将任务分配给节点:

  1. Active: 调度程序可以将任务分配给节点
  2. Pause: 调度程序不会将新任务分配给节点,但现有任务仍在运行。
  3. Drain: 调度程序不会将新任务分配给节点。调度程序关闭任何现有任务, 并将它们调度到可用节点上, manager节点使用该状态

MANAGER STATUS 列显示了节点参与 Raft 共识:

  1. 无值: 工作节点不参与 Swarm 管理。
  2. Leader: 该节点是主管理器节点,为 swarm 做出所有 swarm 管理和编排决策。
  3. Reachable: 该节点是参与 Raft 共识仲裁的管理节点。如果领导节点不可用,则该节点有资格被选举为新的领导者。
  4. Unavailable: 该节点是无法与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入集群或将工作节点提升为管理器

过滤

  1. 过滤标志格式为 key=value
  2. 可同时多个过滤器 --filter "foo=bar" --filter "bif=baz"
  3. 当前支持的过滤器有以下
# 按 ID 过滤
docker node ls -f id=1

# 按 label(标签) 过滤
docker node ls -f "label=foo"

# 按 node.label(节点标签) 过滤
docker node ls --filter node.label=region

# 按 membership(会员资格) 过滤
docker node ls -f "membership=accepted"

# 按 name 过滤
docker node ls -f name=swarm-manager1

# 按 角色 过滤
docker node ls -f "role=manager"

rm

简介

  1. 从 swarm 中移除一个或多个节点
  2. 删除指定的节点,但前提是节点处于关闭状态
  3. 管理节点降级为工作节点,然后才能将其从 swarm 中移除
  4. 命令详情: docs.docker.com/engine/refe… 用法
docker node rm [OPTIONS] NODE [NODE...]
--force,-f: 强制从 swarm 中移除一个节点,也可以强制移除一个不可访问的节点

示例

docker swarm leave     # 先在node节点执行 离开
docker node rm node-2  # 再在manager节点 删除node

ps(列出节点运行的服务)

简介

  1. 列出一个或多个节点上运行的任务,默认为当前节点
  2. 命令详情: docs.docker.com/engine/refe… 语法
docker node ps [OPTIONS] [NODE...]
--filter,-f		根据提供的条件过滤输出
--format		使用 Go 模板的漂亮打印任务
--no-resolve		不要将 ID 映射到名称
--no-trunc		不要截断输出
--quiet,-q		仅显示任务 ID

示例

[root@manager174 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
k40yohgg4424fqklskofy9mdc *   manager174   Ready     Active         Leader           20.10.12
gy9xdhvll84q23mk7xd5pniim     worker175    Down      Active                          20.10.12
6damwerh2ii3w7fbg55jfreim     worker176    Ready     Active                          20.10.12
[root@manager174 ~]# docker node ps 6damwerh2ii3w7fbg55jfreim
ID             NAME                                                  IMAGE                    NODE        DESIRED STATE   CURRENT STATE          ERROR                         PORTS
dc04du252clq   portainer-agent_agent.6damwerh2ii3w7fbg55jfreim       portainer/agent:2.11.1   worker176   Running         Running 4 hours ago                                  *:9001->9001/tcp,*:9001->9001/tcp

demote(节点降级)

简介

  1. 从 swarm 中的 manager 中降级一个或多个节点
  2. 管理器节点不可用或管理器脱机进行维护时,将管理节点降级为工作者角色,无论出于何种原因升级或降级节点,必须始终保持集群中管理节点的法定人数
  3. docs.docker.com/engine/refe… 语法
docker node demote NODE [NODE...]

示例: 降级一个节点或一组节点

docker node demote node-3 node-2

promote(节点升级)

简介

  1. 从 swarm 中的 manager 中升级一个或多个节点
  2. 当管理器节点不可用或管理器脱机进行维护时,将工作节点提升为经理角色,无论出于何种原因升级或降级节点,必须始终保持集群中管理节点的法定人数
  3. docs.docker.com/engine/refe… 语法
docker node promote NODE [NODE...]

示例: 提升一个节点或一组节点

docker node promote node-3 node-2

inspect(节点检查)

简介

  1. 显示一个或多个节点的详细信息
  2. 返回有关节点的信息。默认情况下,此命令将所有结果呈现在 JSON 数组中。您可以指定替代格式来为每个结果执行给定的模板。Go 的 text/template包描述了该格式的所有细节
  3. docs.docker.com/engine/refe…

语法

docker node inspect [OPTIONS] [self(自己, 即管理节点)|NODE(可以是指定节点的id 或hostname)]  # 可以同时指定多个节点
--format,-f:	使用给定的 Go 模板格式化输出
--pretty:		以人性化的格式打印信息, 默认返回json格式

示例1

[root@manager174 ~]# docker node inspect --format '{{ .ManagerStatus.Leader }}' self
true

示例2

[root@manager174 ~]# docker node ls
ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
k40yohgg4424fqklskofy9mdc *   manager174   Ready     Active         Leader           20.10.12
gy9xdhvll84q23mk7xd5pniim     worker175    Ready     Active                          20.10.12
6damwerh2ii3w7fbg55jfreim     worker176    Ready     Active                          20.10.12

[root@manager174 ~]# docker node inspect --format=pretty self worker175
ID:			        gy9xdhvll84q23mk7xd5pniim
Hostname:              	worker175
......
ID:			k40yohgg4424fqklskofy9mdc
Hostname:              	manager174
......

update

简介

  1. 更新有关节点的元数据,例如其可用性、标签或角色
  2. docker node update 为节点设置的标签仅适用于 swarm 中的节点实体。不要与 dockerd 的 docker守护进程标签混淆 docs.docker.com/config/labe…
  3. docs.docker.com/engine/refe… 语法
docker node update [OPTIONS] NODE

参数详解
--availability

  1. 节点的可用性("active"|"pause"|"drain")
  2. 更改节点可用性的场景:
  3. Drain 管理器节点,以便只执行集群管理任务并且不能用于任务分配。
  4. Drain node节点,以便您可以将其关闭以进行维护。
  5. pause node节点,使其无法接收新任务。
  6. 恢复 不可用(unavailable )或暂停(paused)的节点可用状态。 --label-add
  7. 添加或更新节点标签(key=value)
  8. 标签的作用:
  9. 1个节点可添加多个标签,多个标签的key不能相同
  10. 可以用于服务约束,如服务运行于指定标签节点
  11. 当很多node节点时,为了方便维护一般会按机器配置、角色等来决定运行哪些程序。
  12. node常用标签: 环境标签: env=prod 归属项目标签: obj=dutall 应用标签: app=java|db|ops 配置标签: cg=4c8g --label-rm 如果存在,则删除节点标签
    --role 节点角色(“worker”|“manager”)
    示例
# 节点状态更新
docker node update --availability [active|pause|drain] $NODE

# 添加标签示例
docker node update --label-add env=test --label-add project=dutall --label-add object=javam1 $NODE   # 添加多个标签 env=prod, 可自定义的 key名与value值
docker node inspect $NODE | grep 'Labels' # 查看指定节点标签

# 删除标签示例
docker node update --label-rm $role $NODE