清空 swarm 上的节点


在本教程的早期步骤中,所有节点都已使用Active可用性。Swarm Manager 可以将任务分配给任何Active节点,因此最多 现在,所有节点都可用于接收任务。

有时,例如计划内维护时间,您需要将节点设置为Drain可用性。Drain可用性 阻止节点接收新任务 从 Swarm Manager 中。这也意味着 Manager 会停止在 node 并在具有Active可用性。

重要

将节点设置为Drain不会从该节点中删除独立容器, 例如使用docker run,docker compose up或 Docker 引擎 应用程序接口。节点的状态,包括Drain,则只影响节点的调度能力 Swarm 服务工作负载。

  1. 如果尚未打开,请打开一个终端并通过 ssh 连接到您 运行您的 Manager 节点。例如,本教程使用名为manager1.

  2. 验证您的所有节点是否都处于活动状态。

    $ docker node ls
    
    ID                           HOSTNAME  STATUS  AVAILABILITY  MANAGER STATUS
    1bcef6utixb0l0ca7gxuivsj0    worker2   Ready   Active
    38ciaotwjuritcdtn9npbnkuz    worker1   Ready   Active
    e216jshn25ckzbvmwlnh5jr3g *  manager1  Ready   Active        Leader
    
  3. 如果您尚未运行redisservice 中,现在就启动它:

    $ docker service create --replicas 3 --name redis --update-delay 10s redis:7.4.0
    
    c5uo6kdmzpon37mgj9mwglcfw
    
  4. docker service ps redis要查看 Swarm Manager 如何为 tasks 添加到不同的节点:

    $ docker service ps redis
    
    NAME                               IMAGE        NODE     DESIRED STATE  CURRENT STATE
    redis.1.7q92v0nr1hcgts2amcjyqg3pq  redis:7.4.0  manager1 Running        Running 26 seconds
    redis.2.7h2l8h3q3wqy5f66hlv9ddmi6  redis:7.4.0  worker1  Running        Running 26 seconds
    redis.3.9bg7cezvedmkgg6c8yzvbhwsd  redis:7.4.0  worker2  Running        Running 26 seconds
    

    在这种情况下,Swarm Manager 为每个节点分配了一个任务。您可以 查看在环境中的节点之间以不同方式分配的任务。

  5. docker node update --availability drain <NODE-ID>来清空一个节点 已分配任务:

    $ docker node update --availability drain worker1
    
    worker1
    
  6. 检查节点以检查其可用性:

    $ docker node inspect --pretty worker1
    
    ID:			38ciaotwjuritcdtn9npbnkuz
    Hostname:		worker1
    Status:
     State:			Ready
     Availability:		Drain
    ...snip...
    

    耗尽的节点显示DrainAvailability.

  7. docker service ps redis要查看 Swarm Manager 如何更新 任务分配redis服务:

    $ docker service ps redis
    
    NAME                                    IMAGE        NODE      DESIRED STATE  CURRENT STATE           ERROR
    redis.1.7q92v0nr1hcgts2amcjyqg3pq       redis:7.4.0  manager1  Running        Running 4 minutes
    redis.2.b4hovzed7id8irg1to42egue8       redis:7.4.0  worker2   Running        Running About a minute
     \_ redis.2.7h2l8h3q3wqy5f66hlv9ddmi6   redis:7.4.0  worker1   Shutdown       Shutdown 2 minutes ago
    redis.3.9bg7cezvedmkgg6c8yzvbhwsd       redis:7.4.0  worker2   Running        Running 4 minutes
    

    Swarm Manager 通过结束节点上的任务来保持所需状态 跟Drain可用性,并在节点上创建一个新任务Active可用性。

  8. docker node update --availability active <NODE-ID>要返回 drained 节点设置为 active 状态:

    $ docker node update --availability active worker1
    
    worker1
    
  9. 检查节点以查看更新的状态:

    $ docker node inspect --pretty worker1
    
    ID:			38ciaotwjuritcdtn9npbnkuz
    Hostname:		worker1
    Status:
     State:			Ready
     Availability:		Active
    ...snip...
    

    当您将节点设置回Activeavailability 中,它可以接收新任务:

    • 在服务更新期间进行扩展
    • 在滚动更新期间
    • 当您将另一个节点设置为Drain可用性
    • 当任务在另一个活动节点上失败时

后续步骤

接下来,您将学习如何使用 Swarm 模式路由网格