【问题标题】:Docker swarm mode: scale down a node and remove servicesDocker swarm 模式:缩小节点并移除服务
【发布时间】:2017-10-11 17:27:23
【问题描述】:

我为给定服务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) 还有其他解决方案吗?

【问题讨论】:

  • 我假设你实现了 Docker Swarm。我目前正在使用 Kubernetes,如果节点上没有运行活动进程,似乎需要 10 分钟才能缩减。这对我不起作用,我正在寻找可以立即缩小的东西。 Docker swarm 是否有类似的约束,或者缩减是否有效?

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


【解决方案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 中移除,并移除刚刚添加的约束。

【讨论】:

    【解决方案2】:

    回答你的问题

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

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

    码头服务规模=

    【讨论】:

    • 我忘了提到服务是永无止境的服务。他们不会被重新安排。
    猜你喜欢
    • 2020-02-23
    • 2017-08-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多