排干群上的节点

预计阅读时间:3分钟

在本教程的较早步骤中,所有节点均已在ACTIVE 可用性下运行。群管理器可以将任务分配给任何ACTIVE节点,因此到目前为止,所有节点都可用于接收任务。

有时,例如计划的维护时间,您需要将节点设置为DRAIN 可用性。DRAIN可用性阻止节点从群集管理器接收新任务。这也意味着管理器停止在节点上运行的任务,并在具有ACTIVE可用性的节点上启动副本任务。

重要提示:一个节点设置为DRAIN不删除从该节点独立的容器,如那些具有创建docker rundocker-compose up或泊坞窗引擎API。节点的状态(包括DRAIN)仅影响节点调度群集服务工作负载的能力。

  1. 如果还没有,请打开一个终端并SSH到运行管理器节点的计算机中。例如,本教程使用名为的计算机 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:3.0.6
    
    c5uo6kdmzpon37mgj9mwglcfw
    
  4. 运行docker service ps redis以查看群管理器如何将任务分配给不同的节点:

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

    在这种情况下,群管理器将一个任务分配给每个节点。您可能会看到任务在环境中的节点之间的分布不同。

  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以查看群管理器如何更新服务的任务分配redis

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

    群集管理器通过在具有Drain可用性的节点上结束任务并在具有可用性的节点上创建新任务来维护所需状态Active

  8. 运行 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可用时,它可以接收新任务:

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

下一步是什么?

了解如何使用群体模式路由网格

教程集群管理服务