有没有办法限制任务在某些节点上运行,但不限制于此?

有没有办法限制任务在某些节点上运行,但不限制于此?

我使用跨多个数据中心的 Docker Swarm。Swarm 在“虚拟私有云”中运行。

参与设置的其中一个数据中心的链接速度比其他数据中心慢一些。我想避免在该数据中心安排对延迟特别敏感的服务。

  • 我可以使用放置约束,但这会影响可用性。如果出于某种原因,“慢速”数据中心是唯一运行的数据中心,约束将确保受限服务永远不会在该数据中心进行调度。影响可用性。
  • 我可以使用放置偏好,但这只是偏好。如果我将标签添加lowlatency到除“慢速”数据中心之外的所有节点,服务仍可能被安排在那里。毕竟这只是偏好。

有没有办法以某种方式将服务限制在某些节点上,但如果首选节点不可用,则允许 Docker 在其他节点上安排该服务?

答案1

不,这不是 Swarm Mode 的内置功能。

目前唯一可用的放置偏好是将工作负载分散到标签的值中。这用于避免将所有副本安排在单个可用区域中,例如,所有工作负载都安排在同一个机架、数据中心等中。没有像软约束一样的放置偏好。

群集调度中的另一个可用选项是约束,这是一个硬性限制。工作负载将不会被调度到与约束不匹配的节点上,即使这意味着它们无法在任何地方调度并且服务仍然处于停机状态。

最接近您期望目标的方法是运行一个额外的进程来检测所有其他数据中心的中断并调整服务上的约束,但是我怀疑这将有两个相应的问题。首先,随着其他数据中心的关闭,您可能已经失去了与管理器的法定人数,不会发生任何调度活动,并且由于失去领导者,对任何正在运行的管理器的命令都将失败。其次,如果您确实有法定人数,剩余数据中心中的节点可能会因重新安排的其他工作负载而过度配置。这就是所谓的惊群问题,它需要在容器上设置 CPU 和内存要求。这些要求将阻止在节点上安排新作业以避免进一步中断,并阻止您更改的服务找到具有容量的节点。

相关内容