はじめに
この実験では、Docker Swarm 内のノードの役割を管理する方法を探ります。具体的には、docker node demote コマンドを使用して、マネージャーノードの役割をワーカーに変更することに焦点を当てます。
この実験では、Docker Swarm の初期化、現在のマネージャーノードの特定、降格コマンドの実行、最後にノードの更新された役割を検証して降格の成功を確認するというプロセスを案内します。この実践的な経験を通じて、Docker Swarm のノード管理に関する実用的な知識を得ることができます。
Docker Swarm を初期化する
このステップでは、Docker Swarm を初期化します。Docker Swarm は、Docker を実行しているマシンのグループで、クラスタに参加しています。Swarm に参加した後も、普段使っている Docker コマンドを引き続き実行できますが、これらは現在、Swarm マネージャーによって実行されます。Swarm 内のマシンは、マネージャーまたはワーカーのいずれかになります。マネージャーはクラスタ管理タスクを処理し、ワーカーはサービスを実行します。
Swarm を初期化する前に、現在の Docker バージョンを確認しましょう。
docker version
LabEx VM にインストールされている Docker バージョンを示す、以下のような出力が表示されるはずです。
Client: Docker Engine - Community
Version: 20.10.21
API version: 1.41
Go version: go1.16.20
Git commit: baeda1f
Built: Tue Oct 25 18:01:18 2022
OS/Arch: linux/amd64
Context: default
Experimental: true
Server: Docker Engine - Community
Engine:
Version: 20.10.21
API version: 1.41 (minimum version 1.12)
Go version: go1.16.20
Git commit: 363bd3c
Built: Tue Oct 25 17:59:50 2022
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.10
GitCommit: b4bd5d2b3d85c5e9b15588d67616e19a2a3a495d
runc:
Version: 1.1.4
GitCommit: v1.1.4-0-g5fd4c4d
docker-init:
Version: 0.19.0
GitCommit: de40ad0
では、このマシンで Docker Swarm を初期化しましょう。これは Swarm 内の最初のノードであるため、自動的にマネージャーノードになります。docker swarm init コマンドを使用します。
docker swarm init
Swarm が初期化され、他のノードをワーカーとして参加させるためのコマンドが表示される出力が表示されるはずです。出力は以下のようになります。
Swarm initialized: current node (xxxxxxxxxxxx) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 172.17.0.2:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
この出力により、Swarm が初期化され、現在のノードがマネージャーであることが確認されます。xxxxxxxxxxxx は実際のノード ID に置き換えられます。
Swarm ノードを一覧表示してマネージャーを特定する
このステップでは、Docker Swarm 内のノードを一覧表示して、どのノードがマネージャーで、どのノードがワーカーであるかを特定します。単一のノードで Swarm を初期化したばかりなので、リストには 1 つのノードのみが表示され、その役割は「マネージャー」であることが期待されます。
Swarm 内のノードを一覧表示するには、docker node ls コマンドを使用します。
docker node ls
以下のような出力が表示されるはずです。
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx * labex-vm Ready Active Leader 20.10.21
出力を分解して説明しましょう。
ID: ノードの一意の ID。ID の横にあるアスタリスク (*) は、コマンドを実行している現在のノードを示します。HOSTNAME: ノードのホスト名。この場合はlabex-vmです。STATUS: ノードの状態。Readyは、ノードが健全でタスクを受け入れる準備ができていることを意味します。AVAILABILITY: ノードがタスクをスケジュールできるかどうかを示します。Activeは利用可能であることを意味します。MANAGER STATUS: ノードの Swarm 内での役割を示します。Leaderは、このノードが Swarm 内の主要なマネージャーであることを示します。他にマネージャーがある場合、Reachableと表示されます。ワーカーノードの場合は、このフィールドは空白になります。ENGINE VERSION: ノードで実行されている Docker Engine のバージョン。
予想通り、1 つのノードがリストされ、その MANAGER STATUS は Leader であり、これがマネージャーノードであることが確認されます。
マネージャーノードを降格する
このステップでは、現在のマネージャーノードをワーカーノードに降格します。マネージャーノードを降格するとは、その役割を Swarm の管理から、単にワーカーとしてタスクを実行するものに変更することを意味します。これは、マネージャーの数を減らす必要がある場合や、特定のノードの役割を変更する場合などに役立ちます。
マネージャーノードを降格するには、docker node demote コマンドの後にノード ID またはホスト名を指定します。前のステップで、ホスト名が labex-vm であることを知っています。
docker node demote labex-vm
降格が確認される出力が表示されるはずです。
Node labex-vm was demoted from a manager to a worker.
この出力は、ノード labex-vm が Swarm 内でマネージャーからワーカーの役割に正常に降格されたことを示しています。
降格後のノードの役割を確認する
この最後のステップでは、降格操作の後にノードの役割がマネージャーからワーカーに正常に変更されたことを確認します。再度 docker node ls コマンドを使用して、Swarm 内のノードを一覧表示し、対象のノードの MANAGER STATUS 列を確認します。
docker node ls
コマンドを実行した後、以下のような出力が表示されるはずです。
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
xxxxxxxxxxxx labex-vm Ready Active 20.10.21
labex-vm ノードの MANAGER STATUS 列が現在空白になっていることに注意してください。これは、このノードがもはやマネージャーではなく、Swarm 内でワーカーノードとして動作していることを示しています。アスタリスク (*) は依然として ID の横にありますが、これはコマンドを実行しているノードであるためであり、その役割は変更されています。
これにより、降格が成功したことが確認されます。
まとめ
この実験では、Swarm を初期化してマネージャーノードを特定することで、Docker Swarm ノードを管理する方法を学びました。次に、docker node demote コマンドを使用して、マネージャーノードの役割をワーカーに変更する練習を行いました。最後に、Swarm ノードを一覧表示して更新された役割を確認することで、降格が成功したことを検証しました。



