【问题标题】:Docker swarm strategyDocker 集群策略
【发布时间】:2019-11-28 09:45:45
【问题描述】:

任何人都可以分享他们更改 docker swarm 调度策略的经验,因为共有三种(spread、binpack 和 random)。 spread 是 docker swarm 使用的默认策略,我希望它更改为 binpack。

【问题讨论】:

  • 哪个群?较新的 swarm 模式还是作为单独容器运行的经典 swarm?
  • BMitch 在最新的 docker 版本中更新 swarm 模式

标签: docker scheduling swarm


【解决方案1】:

您列出的 Swarm 调度策略适用于 Classic Swarm,它作为独立容器实现,充当各种 docker 引擎的反向代理。大多数人都在使用更新的 Swarm 模式而不是这个,而 Classic Swarm 的开发工作很少。

较新的 Swarm 模式包含一个可调整的调度程序选项。该单一选项是 HA 传播算法。当您拥有单个服务的多个副本时,它将首先寻求将这些副本分布在满足所需条件的多个节点上。并且在副本数最少的节点中,它会优先选择其他调度容器最少的节点。

此算法的调整包括约束和放置偏好。约束允许您要求服务在具有特定标签或平台的节点上运行。放置首选项允许您将工作负载分散到给定标签的不同值上,这对于确保所有副本不在同一个 AZ 中运行很有用。

Swarm 模式中的这些配置均不包含 binpacking 选项。如果您希望减少 swarm 集群中的节点数量,则可以更新节点状态以从节点中排出工作负载。这将优雅地停止该节点上的所有 swarm 托管容器并将它们迁移到其他节点。或者您可以简单地暂停在节点上调度新工作负载,这将随着服务在其他节点上更新和调度而逐渐删除副本,但不会抢先停止在该节点上运行副本。这两个选项由docker node update --availability控制:

$ docker node update --help

Usage:  docker node update [OPTIONS] NODE

Update a node

Options:
      --availability string   Availability of the node ("active"|"pause"|"drain")
      --label-add list        Add or update a node label (key=value)
      --label-rm list         Remove a node label if exists
      --role string           Role of the node ("worker"|"manager")

有关约束和放置偏好的更多详细信息,请参阅:https://docs.docker.com/engine/reference/commandline/service_create/#specify-service-constraints---constraint

【讨论】:

  • 我正在尝试这个 'docker service create --replicas 1 --name bitbucket --placement-pref 'spread=node.labels.mainmashine' bitbucket:1` ,但放置首选项不起作用我的情况。它随机调度到一个工作节点。我有两个工作节点,一个带有标签`“mainmachine”:“true”`,一个带有标签`“secondmachine”:“true”`@BMitch
  • @NiazHussain 只有一个副本,这是意料之中的。所有节点都是有效目标,并且没有其他副本在一个标签上运行以强制调度优先选择另一个标签。
  • 哦,知道了。实际上,我一直在寻找 --placement-pref 来为 worker-1 填充任务/服务,直到它有资源,然后在 worker-2 上。
  • @NiazHussain 放置首选项不执行任何类型的装箱,它明确设计用于为 HA 传播容器。
猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 2019-12-01
  • 2020-06-16
  • 2018-07-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-03
  • 2015-12-17
相关资源
最近更新 更多