Docker Swarm 是否会将资源匮乏的容器迁移到其他节点?

Docker Swarm 是否会将资源匮乏的容器迁移到其他节点?

假设有一个 3 节点 Docker 集群。其中一个节点的资源非常紧张。几个对 CPU 或 RAM 要求很高的服务恰好在同一台主机上启动。

Docker 是否会在任何时候检查其他节点是否有较少的工作要做,并将一个或多个服务从压力较大的节点迁移到压力较小的节点之一?

Docker 中是否有任何内置功能可以处理这个问题,或者迁移最终是否会导致 OOM 杀手取出容器?

答案1

Swarm 不会移动任务(容器)。它的目标是“不造成任何损害”,通过移动您未明确指示它移动的容器。如果您这样做,service update它将重新创建容器,可能在其他节点上,基于以下条件:1. 确保该服务中的任务分散在各个节点上;2. 每个节点的容器密度。

但据我所知,该评估并非基于逐时资源利用率。

在命令中使用--limit-cpu/memory--reserve-cpu/memory选项service create/update会有所帮助。reserve将导致 Swarm 跟踪该预留,如果您为多个服务设置预留,它将确保它们被安排在具有这些可用资源的节点上,但同样,它只是使用预留表,而不是实时利用率来确定这一点(AFAIK)。

我见过人们使用 Prometheus 来监控和启动扩展服务的警报,因此这些警报也可以启动容器的移动。

相关内容