Migration
Docker Swarm 是否會將資源匱乏的容器遷移到其他節點?
讓我們假設一個 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 來監控和啟動擴展服務的警報,因此這些警報也可以啟動移動容器是可行的。