はじめに
Docker Swarm は、大規模な Docker コンテナのオーケストレーションと管理のための強力なツールです。このチュートリアルでは、既存の Docker Swarm クラスタに新しいノードを追加する方法を学び、インフラストラクチャを拡張し、アプリケーションの可用性と回復性を向上させる方法を説明します。
Docker Swarm の基礎理解
Docker Swarm とは?
Docker Swarm は、Docker コンテナのためのネイティブなクラスタリングおよびスケジューリングソリューションです。Swarm と呼ばれる Docker エンジン群を、単一の仮想 Docker エンジンとして管理できます。これにより、複数のホストにアプリケーションをデプロイし、高い可用性とスケーラビリティを確保できます。
Docker Swarm の主要な概念
- ノード (Node): ノードは、Swarm に参加している Docker エンジンのインスタンスです。ノードはマネージャーまたはワーカーのいずれかです。
- マネージャーノード (Manager Node): マネージャーノードは、タスクのスケジューリング、クラスタ状態の維持、フェールオーバーの処理など、Swarm の管理を担当します。
- ワーカーノード (Worker Node): ワーカーノードは、マネージャーノードから割り当てられたタスクを受け取り、実行します。
- サービス (Service): サービスは、Swarm 内のタスク (コンテナ) セットの希望する状態を定義します。サービスは、Swarm でアプリケーションをデプロイするための構成要素です。
- タスク (Task): タスクは、サービスの一部であり、ノード上で実行される単一のコンテナです。
Docker Swarm の利点
- シンプルさ: Docker Swarm は Docker エンジンに組み込まれているため、設定と管理が容易です。
- 高い可用性: Swarm は自動ロードバランシングとフェールオーバーを提供し、アプリケーションの高可用性を確保します。
- スケーラビリティ: Swarm にノードを追加または削除することで、アプリケーションを簡単にスケールできます。
- セキュリティ: Docker Swarm は、暗号化された通信やロールベースのアクセス制御などの組み込みのセキュリティ機能を使用します。
Docker Swarm の開始
Docker Swarm を開始するには、Swarm クラスタを設定する必要があります。これには、マネージャーノードの初期化と、ワーカーノードを Swarm に追加することから始まります。Ubuntu 22.04 を使用した例を次に示します。
## マネージャーノード上で Swarm を初期化
## ワーカーノードを Swarm に参加させる
Swarm が設定されると、アプリケーションをサービスとしてデプロイできます。
Docker Swarm クラスタへのノード追加
ワーカーノードを Swarm に参加させる
Docker Swarm クラスタにワーカーノードを追加するには、docker swarm join コマンドを使用します。このコマンドは、マネージャーノードから取得できる参加トークンが必要です。
マネージャーノードで、参加トークンを取得するには以下のコマンドを実行します。
docker swarm join-token worker
これにより、ワーカーノードを Swarm に参加させるためのコマンドが出力されます。例えば:
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s7riia...
次に、ワーカーノードで、マネージャーノードから提供されたコマンドを実行して、Swarm に参加させます。
マネージャーノードを Swarm に参加させる
Docker Swarm クラスタにマネージャーノードを追加することもできます。これは、Swarm のフォールトトレランスと高可用性を向上させるために役立ちます。
新しいマネージャーノードを追加するには、新しいノードで以下のコマンドを実行します。
docker swarm join --token SWMTKN-1-61ztec9roubhglb7xbc...
マネージャーノードに参加するためのトークンは、既存のマネージャーノードから以下のコマンドを使用して取得できます。
docker swarm join-token manager
ノードステータスの確認
Swarm にノードを追加した後は、docker node ls コマンドを使用して、クラスタ内のすべてのノードの状態を確認できます。これにより、各ノードの役割 (マネージャーまたはワーカー) と現在の状態が表示されます。
docker node ls
これにより、Swarm 内の各ノードに関する情報を含む表が出力されます。
Swarm からノードを削除する
Swarm からノードを削除する必要がある場合は、docker node rm コマンドを使用できます。たとえば、ワーカーノードを削除するには:
docker node rm worker-node
マネージャーノードを削除するには、まずそれをワーカーノードに降格してから削除する必要があります。
docker node demote manager-node
docker node rm manager-node
ノードの削除は、Swarm の可用性と回復性に影響を与える可能性があるため、慎重に計画してください。
Swarm ノードの管理と監視
Swarm ノードの監視
Docker Swarm ノードの健康状態とステータスを監視するには、以下のコマンドを使用できます。
## Swarm 内のすべてのノードをリスト表示
docker node ls
## 特定のノードの詳細情報を表示
docker node inspect node-name
## ノードのメトリクスを表示
docker node ps node-name
docker node ls コマンドは、Swarm 内のすべてのノードの概要を表示します。役割 (マネージャーまたはワーカー)、ステータス、および可用性を含みます。
docker node inspect コマンドは、特定のノードの詳細情報を提供します。IP アドレス、リソース、ラベルなど。
docker node ps コマンドは、特定のノード上で実行中のタスクとコンテナを表示できます。
Swarm ノードの管理
監視に加えて、さまざまなコマンドを使用して Docker Swarm クラスタ内のノードを管理することもできます。
## ワーカーノードをマネージャーノードに昇格
docker node promote worker-node
## マネージャーノードをワーカーノードに降格
docker node demote manager-node
## ノードラベルの更新
docker node update --label-add label=value node-name
## ノードの停止 (新しいタスクのスケジュールを防止)
docker node update --availability drain node-name
## ノードを再びアクティブにする
docker node update --availability active node-name
docker node promote と docker node demote コマンドは、Swarm 内のノードの役割を変更できます。
docker node update コマンドを使用して、ノード上のラベルを追加、変更、または削除できます。ラベルは、タスクのスケジュール時に特定の制約や優先事項を適用するために使用できます。
docker node update --availability drain コマンドは、ノードを一時的にサービスから外すことができ、新しいタスクがそのノードにスケジュールされるのを防ぎます。これは、ノードのメンテナンスやアップグレードを行う際に役立ちます。
Swarm 状態のバックアップと復元
Docker Swarm クラスタの状態を定期的にバックアップすることは、問題や障害から回復できるようにするために重要です。バックアップデータを使用して新しい Swarm を初期化するには、docker swarm init --force-new-cluster コマンドを使用できます。
これらのベストプラクティスに従うことで、Docker Swarm ノードを管理および監視し、コンテナ化されたアプリケーションの信頼性と回復性を確保できます。
まとめ
このチュートリアルを終了すると、Docker Swarm クラスタにノードを追加する方法をしっかりと理解しているはずです。Docker インフラストラクチャをスケールアップし、アプリケーションが増加するワークロードを処理し、サービスの高可用性を確保できるようになります。この知識は、Docker ベースのソリューションを構築および管理し続ける上で非常に貴重なものです。



