Migration

Docker Swarm 是否會將資源匱乏的容器遷移到其他節點?

  • December 12, 2017

讓我們假設一個 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 來監控和啟動擴展服務的警報,因此這些警報也可以啟動移動容器是可行的。

引用自:https://serverfault.com/questions/887489