我在节点t1, t2, ..., tk
之间为给定服务N1, N2, ...Nw
设置了一组任务。
由于使用率较低,我不需要k
这么多的任务。
我只需要l
个任务(l < k
)。
事实上,我不需要w
个节点,因此我想开始删除机器并减少支出。一次卸下一台机器就可以了。
每项服务都有自己的状态。 服务以replicated mode开始。
1)如何删除单个节点并强制docker swarm不为该服务重新创建相同数量的任务?
注意:
w - 1
个节点和l
服务,假设在已删除的节点上提供了k - l
个服务。或
2)如何从docker swarm 中删除特定的容器(任务),并将服务的副本数量减少删除任务的数量?
注意:
或
3)任何其他解决方案?
答案 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节点更新)排空该节点,将其从群集中删除,然后删除刚刚添加的约束。