はじめに
この実験では、docker node rm コマンドを使用して Docker Swarm 内のノードを管理する方法を学びます。まず、Swarm 内の既存のノードを一覧表示して識別します。次に、実行中のノードを削除して、コマンドのデフォルトの動作と制限を理解します。
その後、Swarm から停止したノードを正常に削除する方法を調べます。最後に、アクセスできないノードを強制的に削除する方法を学びます。これは、ノードがもはや到達不能になったシナリオを処理するために重要です。この実践的な経験は、Docker Swarm クラスターを維持するための実用的な知識を提供します。
Swarm 内の既存ノードを一覧表示する
このステップでは、現在 Docker Swarm の一部となっているノードを一覧表示する方法を学びます。ノードを一覧表示する前に、Docker Swarm を初期化する必要があります。
まず、現在のマシン上で新しい Swarm を初期化します。このマシンはマネージャーノードになります。
docker swarm init
Swarm が初期化され、他のノードをワーカーとして参加させるためのコマンドが表示される出力が表示されるはずです。
Swarm が初期化されたので、docker node ls コマンドを使用して Swarm 内のノードを一覧表示できます。
docker node ls
このコマンドは、Swarm 内のノードを示す表を表示します。最初は、たった今初期化したマネージャーノードのみが表示されます。出力には、ノード ID、ホスト名、ステータス、可用性、マネージャーステータス、エンジンバージョンなどの情報が含まれます。
たとえば、出力は次のようになる場合があります。
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
<node_id> * <hostname> Ready Active Leader 20.10.21
ID の横の * は、現在いるノードを示します。MANAGER STATUS 列は、ノードが Swarm 内で果たす役割(例:Leader、Reachable、Unavailable)を示します。
Swarm から実行中のノードを削除してみる
このステップでは、現在実行中で Swarm の一部であるノードを削除しようとします。これにより、実行中のノードをサービスから外さずに単純に削除することはできないことがわかります。
まず、再度ノードを一覧表示して、実行中のノードのノード ID を確認しましょう。
docker node ls
削除しようとするノードの ID を特定します。この場合、一覧に表示される唯一のノード、つまりマネージャーノードになります。
次に、docker node rm コマンドの後にノード ID を指定して、ノードを削除してみましょう。<node_id> を前のステップで見つけた実際の ID に置き換えてください。
docker node rm <node_id>
おそらく、ノードがマネージャーであり、この方法では削除できない、またはノードがまだアクティブであることを示すエラーメッセージが表示されます。これは予想される動作です。Docker Swarm は、サービスの中断を避けるために、実行中のノードを直接削除することを防いでいます。
エラーメッセージは次のようになる場合があります。
Error response from daemon: node <node_id> is a swarm manager and cannot be removed without --force
これにより、--force フラグを使用せずに実行中のマネージャーノードを削除することはできないことが確認されます。このフラグについては、後のステップで説明します。ワーカーノードの場合は、通常、削除する前にノードをドレイン(drain)します。
Swarm から停止したノードを削除する
このステップでは、もはや実行中でない、またはアクセスできないノードを Swarm から削除する方法を学びます。現在の Swarm には 1 つのノード(マネージャー)しかないため、まず現在のノードで Swarm から脱退することで、ノードが停止したシナリオをシミュレートします。
まず、現在のノードで Swarm から脱退します。これにより、Docker デーモンが Swarm への参加を停止します。
docker swarm leave
Swarm から脱退することを確認するプロンプトが表示されます。y と入力して Enter キーを押します。
Node left the swarm.
ここで、同じ Swarm 内の別のマネージャーノードにいた場合、たった今脱退したノードを削除することができます。今回は唯一のノードにいるため、別のマネージャーにいる状況をシミュレートするために Swarm を再初期化します。
docker swarm init
Swarm が再び初期化されたことを示す出力が表示されます。
次に、Swarm 内のノードを一覧表示しましょう。一覧には現在のノードのみが表示されます。
docker node ls
停止したノードを削除する方法を実演するために、Swarm から脱退した別のノードがある状況をシミュレートする必要があります。この環境では別のノードを追加することができないため、次のステップに進みます。次のステップでは、アクセスできないノードを強制的に削除する方法を説明します。これは、Swarm に参加しなくなったノードを削除する際により一般的なシナリオです。
Swarm からアクセスできないノードを強制的に削除する
このステップでは、アクセスできないまたは応答しないノードを Swarm から強制的に削除する方法を学びます。ノードが故障し、正常に削除できない場合にこの操作が必要になります。
まず、ノード ID を取得するために、再度 Swarm 内のノードを一覧表示しましょう。
docker node ls
強制的に削除したいノードの ID を特定します。現在の設定では、これは唯一のノード、つまりマネージャーノードです。
ノードを強制的に削除するには、--force フラグを付けた docker node rm コマンドの後にノード ID を指定します。<node_id> を実際の ID に置き換えてください。
docker node rm --force <node_id>
ノードが削除されたことを示す出力が表示されるはずです。
Node <node_id> removed from swarm
次に、再度 Swarm 内のノードを一覧表示して、ノードが削除されたことを確認しましょう。
docker node ls
Swarm から唯一のノード(マネージャー)を削除したため、現在の Docker デーモンはもはや Swarm の一部ではなくなり、エラーメッセージが表示されます。
Error: This node is not a swarm manager. Use "docker swarm init" or "docker swarm join" to connect this node to a swarm.
これにより、マネージャーノードであっても、ノードが Swarm から正常に削除されたことが確認されます。マネージャーノードを強制的に削除する場合は、他にマネージャーが存在しない場合に Swarm の可用性に影響を与える可能性があるため、注意して行う必要があります。
まとめ
この実験では、docker node rm コマンドを使用して Docker Swarm 内のノードを管理する方法を学びました。まず、Swarm を初期化し、docker node ls を使用して既存のノードを一覧表示し、それらの ID と状態を特定しました。
その後、実行中のノードを削除しようと試み、ノードを削除する前にサービスから外す必要があることを示しました。次に、停止したノードを正常に削除し、Swarm からアクセスできないノードを強制的に削除する方法を学び、ノード削除のさまざまなシナリオをカバーしました。



