查看集群信息
查看集群的所有节点信息的命令为docker node ls,这个命令只能在管理节点上执行,是不是Leader管理节点都可以。
[root@docker-mgr2 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
j5w3ramf37t1xxwnhellr9rtf docker-mgr1 Ready Active Leader 27.2.0
ignivgt0cvwftziij0qdswikm * docker-mgr2 Ready Active Reachable 27.2.0
wbf2i1imojh30rxlcx4445z06 docker-worker1 Ready Active 27.2.0
be8d8iilz790l958ohu93dagv docker-worker2 Ready Active 27.2.0
主要的输出列需要关注AVAILABILITY和MANAGER STATUS 。
AVAILABILITY 的三种状态
- Active:调度器能够安排任务到该节点
- Pause:调度器不能够安排任务到该节点,但是已经存在的任务会继续运行
- Drain:调度器不能够安排任务到该节点,而且会停止已存在的任务,并将这些任务分配到其他 Active 状态的节点
MANAGER STATUS 的三种状态
- Leader:为群体做出所有群管理和编排决策的主要管理者节点
- Reachable:如果 Leader 节点变为不可用,该节点有资格被选举为新的 Leader
- Unavailable:该节点不能和其他 Manager 节点产生任何联系,这种情况下,应该添加一个新的 Manager 节点到集群,或者将一个 Worker 节点提升为 Manager 节点
查看集群的指定节点信息
docker node inspect <node_name>
例如:查看worker2的节点信息,执行结果如下:
[root@docker-mgr1 ~]# docker node inspect docker-worker2
[
{
"ID": "be8d8iilz790l958ohu93dagv",
"Version": {
"Index": 32
},
"CreatedAt": "2024-08-31T04:11:54.11289511Z",
"UpdatedAt": "2024-08-31T04:11:54.152370739Z",
"Spec": {
"Labels": {},
"Role": "worker",
"Availability": "active"
},
"Description": {
"Hostname": "docker-worker2",
"Platform": {
"Architecture": "x86_64",
"OS": "linux"
},
"Resources": {
"NanoCPUs": 2000000000,
"MemoryBytes": 1828118528
},
"Engine": {
"EngineVersion": "27.2.0",
"Plugins": [
{
"Type": "Log",
"Name": "awslogs"
},
{
"Type": "Log",
"Name": "fluentd"
},
{
"Type": "Log",
"Name": "gcplogs"
},
{
"Type": "Log",
"Name": "gelf"
},
{
"Type": "Log",
"Name": "journald"
},
{
"Type": "Log",
"Name": "json-file"
},
{
"Type": "Log",
"Name": "local"
},
{
"Type": "Log",
"Name": "splunk"
},
{
"Type": "Log",
"Name": "syslog"
},
{
"Type": "Network",
"Name": "bridge"
},
{
"Type": "Network",
"Name": "host"
},
{
"Type": "Network",
"Name": "ipvlan"
},
{
"Type": "Network",
"Name": "macvlan"
},
{
"Type": "Network",
"Name": "null"
},
{
"Type": "Network",
"Name": "overlay"
},
{
"Type": "Volume",
"Name": "local"
}
]
},
"TLSInfo": {
"TrustRoot": "-----BEGIN CERTIFICATE-----\nMIIBazCCARCgAwIBAgIUV6M1Nwz+JmSaSqvPvlmgKnnL0IgwCgYIKoZIzj0EAwIw\nEzERMA8GA1UEAxMIc3dhcm0tY2EwHhcNMjQwODMxMDM1MTAwWhcNNDQwODI2MDM1\nMTAwWjATMREwDwYDVQQDEwhzd2FybS1jYTBZMBMGByqGSM49AgEGCCqGSM49AwEH\nA0IABNvpa1ohaGvr2VVSfSbElot4ESWMh26IEJIrC3xg41vN4UDtbG6nueVeVyHR\naAvrWuoVTNvDIQ6X8vkUUHgwoFajQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMB\nAf8EBTADAQH/MB0GA1UdDgQWBBRqp2KX5aX94q2ZAiw3Vj8nQl/hsjAKBggqhkjO\nPQQDAgNJADBGAiEAuuQwziPDuM6YCu1S7QqxGngOp/wAy+BoOz/or0Eit4UCIQCJ\nXESn3iTlG/Cryb0gBjj2oL8okb3MXST2qWkpppeptA==\n-----END CERTIFICATE-----\n",
"CertIssuerSubject": "MBMxETAPBgNVBAMTCHN3YXJtLWNh",
"CertIssuerPublicKey": "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2+lrWiFoa+vZVVJ9JsSWi3gRJYyHbogQkisLfGDjW83hQO1sbqe55V5XIdFoC+ta6hVM28MhDpfy+RRQeDCgVg=="
}
},
"Status": {
"State": "ready",
"Addr": "192.168.42.72"
}
}
]
没有组节点之前的docker info命令也可以查看本节点在集群中的信息,只需要在节点上直接输入命令即可。
[root@docker-mgr2 ~]# docker info
Client: Docker Engine - Community
Version: 27.2.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.16.2
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.29.2
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.2.0
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: active
NodeID: ignivgt0cvwftziij0qdswikm
Is Manager: true
ClusterID: y1kyrhvlof9x8xf2n1lov0l1r
Managers: 2
Nodes: 4
Data Path Port: 4789
Orchestration:
Task History Retention Limit: 5
Raft:
Snapshot Interval: 10000
Number of Old Snapshots to Retain: 0
Heartbeat Tick: 1
Election Tick: 10
Dispatcher:
Heartbeat Period: 5 seconds
CA Configuration:
Expiry Duration: 3 months
Force Rotate: 0
Autolock Managers: false
Root Rotation In Progress: false
Node Address: 192.168.42.62
Manager Addresses:
192.168.42.61:2377
192.168.42.62:2377
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 472731909fa34bd7bc9c087e4c27943f9835f111
runc version: v1.1.13-0-g58aa920
init version: de40ad0
Security Options:
seccomp
Profile: builtin
cgroupns
Kernel Version: 5.14.0-427.13.1.el9_4.x86_64
Operating System: AlmaLinux 9.4 (Seafoam Ocelot)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.703GiB
Name: docker-mgr2
ID: e6b80280-4695-42f2-9480-e47846505ad0
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://docker.m.daocloud.io/
Live Restore Enabled: false
WARNING: Running Swarm in a two-manager configuration. This configuration provides
no fault tolerance, and poses a high risk to lose control over the cluster.
Refer to https://docs.docker.com/engine/swarm/admin_guide/ to configure the
Swarm for fault-tolerance.
节点可用状态控制
使node不可调度
docker node update --availability drain <node_name>
停止node
docker node update --availability pause <node_name>
使node可调度
docker node update --availability active <node_name>
使当前node离开集群
在想要脱离集群的节点上执行以下的命令,可以使得该节点脱离集群,如果是管理节点需要脱离集群,需要在命令后面加上--force参数强制脱离,如果所有的管理节点都脱离集群,则整个swarm不复存在。
docker swarm leave [--force]
删除node
要使节点脱离出集群,除了操作离开集群还不够,还需要另外一步就是删除节点
docker node rm <node-id>
添加/移除标签元数据示例:
docker node update --label-add foo --label-add bar=baz WorkerA
类型一:--label-add 类型二:--label-add =
节点权限提升与减低级别
节点可以从工作节点提升到管理节点,也可以从管理节点降级为工作节点。
docker node promote <node_name> # 将工作节点升级为管理节点
docker node demote <node_name> # 将管理节点降级为工作节点
将docker-worker1从工作节点升级为管理节点:
[root@docker-mgr1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
j5w3ramf37t1xxwnhellr9rtf * docker-mgr1 Ready Active Leader 27.2.0
ignivgt0cvwftziij0qdswikm docker-mgr2 Ready Active Reachable 27.2.0
wbf2i1imojh30rxlcx4445z06 docker-worker1 Ready Active 27.2.0
be8d8iilz790l958ohu93dagv docker-worker2 Ready Active 27.2.0
[root@docker-mgr1 ~]# docker node promote docker-worker1
Node docker-worker1 promoted to a manager in the swarm.
[root@docker-mgr1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
j5w3ramf37t1xxwnhellr9rtf * docker-mgr1 Ready Active Leader 27.2.0
ignivgt0cvwftziij0qdswikm docker-mgr2 Ready Active Reachable 27.2.0
wbf2i1imojh30rxlcx4445z06 docker-worker1 Ready Active Reachable 27.2.0
be8d8iilz790l958ohu93dagv docker-worker2 Ready Active 27.2.0
从上面的过程中,可以看到,docker-worker1已经被提升为管理节点了,MANAGER STATUS的状态为Reachable。
好了,现在我们再将docker-worker1从管理节点降级会到工作节点:
[root@docker-mgr1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
j5w3ramf37t1xxwnhellr9rtf * docker-mgr1 Ready Active Leader 27.2.0
ignivgt0cvwftziij0qdswikm docker-mgr2 Ready Active Reachable 27.2.0
wbf2i1imojh30rxlcx4445z06 docker-worker1 Ready Active Reachable 27.2.0
be8d8iilz790l958ohu93dagv docker-worker2 Ready Active 27.2.0
[root@docker-mgr1 ~]# docker node demote docker-worker1
Manager docker-worker1 demoted in the swarm.
[root@docker-mgr1 ~]# docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
j5w3ramf37t1xxwnhellr9rtf * docker-mgr1 Ready Active Leader 27.2.0
ignivgt0cvwftziij0qdswikm docker-mgr2 Ready Active Reachable 27.2.0
wbf2i1imojh30rxlcx4445z06 docker-worker1 Ready Active 27.2.0
be8d8iilz790l958ohu93dagv docker-worker2 Ready Active 27.2.0