叙述
docker node
- 管理Swarm集群管理节点命令,必须在 swarm manager 节点上执行
- 此命令适用于 Swarm 编排器
- API1.24+ 客户端和守护程序 API 必须至少为 1.24 才能使用此命令
- 官方命令: 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 列显示调度程序是否可以将任务分配给节点:
- Active: 调度程序可以将任务分配给节点
- Pause: 调度程序不会将新任务分配给节点,但现有任务仍在运行。
- Drain: 调度程序不会将新任务分配给节点。调度程序关闭任何现有任务, 并将它们调度到可用节点上, manager节点使用该状态
MANAGER STATUS 列显示了节点参与 Raft 共识:
- 无值: 工作节点不参与 Swarm 管理。
- Leader: 该节点是主管理器节点,为 swarm 做出所有 swarm 管理和编排决策。
- Reachable: 该节点是参与 Raft 共识仲裁的管理节点。如果领导节点不可用,则该节点有资格被选举为新的领导者。
- Unavailable: 该节点是无法与其他管理器通信的管理器。如果管理器节点不可用,您应该将新的管理器节点加入集群或将工作节点提升为管理器
过滤
- 过滤标志格式为 key=value
- 可同时多个过滤器 --filter "foo=bar" --filter "bif=baz"
- 当前支持的过滤器有以下
# 按 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
简介
- 从 swarm 中移除一个或多个节点
- 删除指定的节点,但前提是节点处于关闭状态
- 管理节点降级为工作节点,然后才能将其从 swarm 中移除
- 命令详情: 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(列出节点运行的服务)
简介
- 列出一个或多个节点上运行的任务,默认为当前节点
- 命令详情: 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(节点降级)
简介
- 从 swarm 中的 manager 中降级一个或多个节点
- 管理器节点不可用或管理器脱机进行维护时,将管理节点降级为工作者角色,无论出于何种原因升级或降级节点,必须始终保持集群中管理节点的法定人数
- docs.docker.com/engine/refe… 语法
docker node demote NODE [NODE...]
示例: 降级一个节点或一组节点
docker node demote node-3 node-2
promote(节点升级)
简介
- 从 swarm 中的 manager 中升级一个或多个节点
- 当管理器节点不可用或管理器脱机进行维护时,将工作节点提升为经理角色,无论出于何种原因升级或降级节点,必须始终保持集群中管理节点的法定人数
- docs.docker.com/engine/refe… 语法
docker node promote NODE [NODE...]
示例: 提升一个节点或一组节点
docker node promote node-3 node-2
inspect(节点检查)
简介
- 显示一个或多个节点的详细信息
- 返回有关节点的信息。默认情况下,此命令将所有结果呈现在 JSON 数组中。您可以指定替代格式来为每个结果执行给定的模板。Go 的 text/template包描述了该格式的所有细节
- 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
简介
- 更新有关节点的元数据,例如其可用性、标签或角色
- docker node update 为节点设置的标签仅适用于 swarm 中的节点实体。不要与 dockerd 的 docker守护进程标签混淆 docs.docker.com/config/labe…
- docs.docker.com/engine/refe… 语法
docker node update [OPTIONS] NODE
参数详解
--availability
- 节点的可用性("active"|"pause"|"drain")
- 更改节点可用性的场景:
- Drain 管理器节点,以便只执行集群管理任务并且不能用于任务分配。
- Drain node节点,以便您可以将其关闭以进行维护。
- pause node节点,使其无法接收新任务。
- 恢复 不可用(unavailable )或暂停(paused)的节点可用状态。 --label-add
- 添加或更新节点标签(key=value)
- 标签的作用:
- 1个节点可添加多个标签,多个标签的key不能相同
- 可以用于服务约束,如服务运行于指定标签节点
- 当很多node节点时,为了方便维护一般会按机器配置、角色等来决定运行哪些程序。
- 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