Docker Swarm管理の問題

Docker Swarm管理の問題

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 はワークロードをアイドルノードに自動的にデプロイしません。これはデザイン決定です。クラスタがバランスをとるためにジョブを定期的に別のノードに移動すると、そのジョブを使用するクライアントがハングします。目標は、クラスタ間のバランスをとるために実行中のサービスを中断しないことです。新しいジョブが開始された場合、またはジョブが実行されているノードが使用できなくなると、使用量が少ないノードにジョブが割り当てられます。目標は、エンドユーザーへの影響を最小限に抑えながら究極のバランスをとることです。

関連情報