让我们假设一个 3 节点的 Docker 集群。这些节点之一,资源紧张。一些在 CPU 或 RAM 方面可能非常贪婪的服务碰巧在同一主机上启动。
Docker 是否会随时检查其他节点是否有更少的工作要做,并将一项或多项服务从压力节点迁移到压力较小的节点之一?
Docker 中是否有任何内置功能来处理这个问题,或者迁移最终是否会是例如 OOM 杀手取出容器的结果?
让我们假设一个 3 节点的 Docker 集群。这些节点之一,资源紧张。一些在 CPU 或 RAM 方面可能非常贪婪的服务碰巧在同一主机上启动。
Docker 是否会随时检查其他节点是否有更少的工作要做,并将一项或多项服务从压力节点迁移到压力较小的节点之一?
Docker 中是否有任何内置功能来处理这个问题,或者迁移最终是否会是例如 OOM 杀手取出容器的结果?
Swarm 不会移动任务(容器)。它的目标是通过移动您没有明确告诉它这样做的容器来“不造成伤害”。如果您这样做
service update
,它将重新创建容器,可能在其他节点上基于 1. 确保该服务中的任务分布在节点和 2. 每个节点的容器密度。但是 AFAIK 的评估并不是基于时刻的资源利用率。
您可以在命令上使用
--limit-cpu/memory
和--reserve-cpu/memory
选项,service create/update
这将有所帮助。reserve
将导致 Swarm 跟踪该预留,如果您为多个服务设置预留,它将确保它们被安排在具有这些可用资源的节点上,但同样,它只是使用预留表,而不是实时利用率来确定(AFAIK )。我见过人们使用 Prometheus 来监控和启动扩展服务的警报,因此这些警报也可以启动移动容器是可行的。