1

我为t1, t2, ..., tk跨节点的给定服务设置了一组任务N1, N2, ...Nw

由于使用率较低,我不需要像k. 我只需要l任务 ( l < k)。

事实上,我不需要w节点,所以我想开始移除机器并支付更少的费用。一次卸下一台机器就可以了。

每个服务都有自己的状态。服务以复制模式启动。

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

笔记:

  • 我可以确保没有工作被重新路由到特定节点上运行的任务,因此删除特定节点是安全的。
  • 这是最简单的解决方案,假设在删除的节点上提供服务,我将最终得到w - 1节点和服务。lk - l

或者

2)如何从 docker swarm 中删除特定的容器(任务),并通过删除任务的数量来降低服务的副本数量?

笔记:

  • 我假设我已经删除了一个节点。该节点的服务被重新部署到其他节点。
  • 我监控自己不提供流量的容器(任务)-> 不需要维护状态

或者

3)任何其他解决方案?

4

2 回答 2

1

举一个具体的例子,假设你有 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 node update)排空节点,将其从 swarm 中移除,并移除刚刚添加的约束。

于 2018-10-09T18:20:38.027 回答
0

回答您的问题

Q1-> 可以简单地排空集群中的节点来验证服务上的服务是否在其他节点上启动。一旦他们这样做了,您就可以安全地从 swarm 集群中删除该节点。docker节点更新--可用性消耗<>

Q2->您必须在启动服务时指定副本数,您可以简单地将其缩放到较低的副本数。

码头工人服务规模<>=<>

于 2017-05-12T14:13:50.540 回答