3つのノードdocker swarmクラスタがあり、コンテナが3つのノードすべてに展開されています。
質問が2つあります
1]node1
は管理者ですが、それでもコンテナを処理するので、これ以上やりたくありません。ノード 2 とノード 3 は作業ノードであり、Centos 7 にデプロイされます。 Dockerのバージョンは17です...
2]node3
再起動すると、すべてのコンテナが自動的にノード1とノード2に移動しますが、ノード3がクラスタに参加すると、コンテナは自動的にノード3に移動されず、ロードはノード1とノード2で処理されます。これをどのように避けることができますか?
答え1
特定のノードでコンテナーを実行したくない場合は、次のようにします。流れるそれ
docker node update swarm-01.local --availability drain
これにより、クラスター(クラスター)モードで実行されているすべてのコンテナーが使用可能な別のノードに移動されます。 Swarm認識(開始)docker run
コマンドをサポートしていないコンテナは、引き続きそこで実行されます。
2番目の質問で説明されている動作は、コンテナを不必要に移動(停止/開始)してエンドユーザーがサービスを中断するのを防ぐためです。注:https://docs.docker.com/engine/swarm/admin_guide/#force-the-swarm-to-rebalance
Swarm に新しいノードを追加したり、一定期間ノードを使用できなかったりしてノードを Swarm に再接続した場合、Swarm はワークロードをアイドルノードに自動的にデプロイしません。これはデザイン決定です。クラスタがバランスをとるためにジョブを定期的に別のノードに移動すると、そのジョブを使用するクライアントがハングします。目標は、クラスタ間のバランスをとるために実行中のサービスを中断しないことです。新しいジョブが開始された場合、またはジョブが実行されているノードが使用できなくなると、使用量が少ないノードにジョブが割り当てられます。目標は、エンドユーザーへの影響を最小限に抑えながら究極のバランスをとることです。