查看集群信息

查看集群的所有节点信息的命令为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