Docker swarm模式:缩小节点并删除服务

时间:2017-05-12 11:40:33

标签: docker autoscaling docker-swarm docker-swarm-mode

我在节点t1, t2, ..., tk之间为给定服务N1, N2, ...Nw设置了一组任务。

由于使用率较低,我不需要k这么多的任务。 我只需要l个任务(l < k)。

事实上,我不需要w个节点,因此我想开始删除机器并减少支出。一次卸下一台机器就可以了。

每项服务都有自己的状态。 服务以replicated mode开始。

1)如何删除单个节点并强制docker swarm不为该服务重新创建相同数量的任务?

注意:

  • 我可以确保不会将任何工作重新路由到特定节点上运行的任务,因此删除特定节点是安全的。
  • 这是最简单的解决方案,我将使用w - 1个节点和l服务,假设在已删除的节点上提供了k - l个服务。

2)如何从docker swarm 中删除特定的容器(任务),并将服务的副本数量减少删除任务的数量?

注意:

  • 我假设我已经删除了一个节点。节点中的服务被重新部署到其他节点。
  • 我自己监控没有交通的容器(任务) - &gt;没有需要维持的状态

3)任何其他解决方案?

2 个答案:

答案 0 :(得分:0)

回答你的问题

Q1-&GT;您可以简单地耗尽集群中的节点,以验证服务上的服务是否在其他节点上启动。完成后,您可以安全地从群集群中删除该节点。 docker node update --availability drain&lt;&gt;

Q2-&GT;启动服务时必须具有指定的副本计数,您只需将其缩放到较低的计数。

docker service scale&lt;&gt; =&lt;&gt;

答案 1 :(得分:0)

举一个具体的例子,假设您有3个节点和9个任务。现在,您要转到2个节点和6个任务,而无需进行任何不必要的重新计划(例如2个模式和9个任务,或3个模式和6个任务)。

要缩小服务规模并同时“耗尽”节点,您可以执行以下操作:

docker service update --replicas 6 --constraint-add "node.hostname != node_to_be_removed_hostname" service_name

如果您现有的设置是平衡的,那么这只会导致主机上正在运行的任务被删除。

在此之后,您可以继续(docker节点更新)排空该节点,将其从群集中删除,然后删除刚刚添加的约束。