清空 swarm 上的节点


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

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

重要

将节点设置为 不会从该节点中删除独立容器, 例如使用 、 或 Docker 引擎创建的 应用程序接口。节点的状态(包括 )仅影响节点的调度能力 Swarm 服务工作负载。Draindocker rundocker compose upDrain

  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. 如果您尚未运行滚动更新教程中的服务,请立即启动它:redis

    $ docker service create --replicas 3 --name redis --update-delay 10s redis:7.4.0
    
    c5uo6kdmzpon37mgj9mwglcfw
    
  4. 运行以查看 swarm 管理器如何分配 tasks 添加到不同的节点:docker service ps redis

    $ 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. run 以耗尽一个节点 已分配任务: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. 运行以查看 swarm 管理器如何更新 服务的任务分配:docker service ps redisredis

    $ 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 通过结束节点上的任务来保持所需状态 具有可用性,并在具有可用性的节点上创建新任务。DrainActive

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

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

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

    当您将节点设置回可用性时,它可以接收新任务:Active

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

后续步骤

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