
これまで何度も言ってきたし、これからも何度も言うつもりですが、Portainerは私にとって頼りになるコンテナ管理プラットフォームです。Portainerを使えば、コンテナのデプロイメントの管理と監視に必要なあらゆるタスクを実行できます。Portainerは、独立したDocker開発マシンでも、マルチノードのSwarm Clusterでも使用できます。
ちょっと待ってください。今、マルチノードの Swarm Cluster と言いましたか? 言いましたよ。
Dockerのデプロイメントが大規模であれば、Docker Swarmを扱っている可能性が高いでしょう。ご存知ない方のために説明すると、SwarmモードはDocker Engineに組み込まれており、Dockerノードのクラスターを管理することで、スケーラビリティの向上、分散デプロイメント、望ましい状態の調整、マルチホストネットワーク、負荷分散、ローリングアップデートなどを実現します。
つまり、コンテナのデプロイメントに高い要求を満たす必要がある場合は、おそらくDocker Swarmを使用しているでしょう。そして嬉しいことに、Portainerから直接Swarmを管理できます。
参照: 採用キット: バックエンド開発者 (TechRepublic Premium)
Portainerをまだデプロイしていない場合は、先に進む前に「永続ストレージを備えたPortainerコンテナ管理ツールのデプロイ方法」を確認してください。Portainerを制御ノードにデプロイし、新しいDocker環境を作成する際にエージェントオプションを使用するようにしてください(図A)。
図A

新しい環境を作成すると、それが環境リストに表示されます (図 B )。
図B

PortainerからDocker Swarmを管理する方法
Docker Swarm 環境が起動したら、それを選択すると、左側のサイドバーに Swarm エントリが表示されます (図 C )。
図C

そのエントリをクリックすると、「クラスター ステータス」と「ノード」の 2 つのセクションが表示されます (図 D )。
図D

dockercontrollerノードを見てみましょう。エントリをクリックすると詳細が表示されます(図E)。
図E

ご覧の通り、制御できる項目はそれほど多くありません。ノードの可用性(アクティブ、一時停止、ドレイン)の設定と、ノードを説明するメタデータであるラベルの追加が可能です。
可用性については、次のように説明します。
- アクティブ: ノードはアクティブであり、スケジューラがタスクを割り当てることができます。
- 一時停止: ノードは起動していますが、既存のタスクは実行されたままですが、スケジューラはこのノードに新しいタスクを割り当てることができません。
- ドレイン: ノードは起動していますが、スケジューラは新しいタスクを割り当てることができないため、既存のタスクをすべてシャットダウンして他のノードに割り当てます。
可用性オプションは、個々のノードを管理するのに非常に便利な方法です。ノードを交換する必要があるかもしれません。その場合は、単に停止するのではなく、ドレイン(排出)してすべてのタスクを再割り当てする必要があります。その後、新しいノードをデプロイし、アクティブとして設定します。
ラベルは、Swarmを整理する便利な方法として活用できます。例えば、ノード1がUbuntuサーバー、ノード2がAlmaLinuxサーバーだとします。最初のノード(この例ではUbuntu Serverでホストされています)に移動し、「+ラベル」をクリックします。表示されるウィンドウで、名前に「os」、値に「Ubuntu Server」と入力します(図F)。
図F

好きなだけラベルを追加できます。
わかりにくいエラーを解決する
Docker SwarmとPortainerを使い始めた当初、解決に時間がかかった分かりにくいエラーに遭遇しました。Swarmノードに変更を加えようとすると、次のようなエラーが表示されました。
rpc エラー: コード = 不明な説明
Swarm内のすべてのノードを再起動しても、同じエラーが発生しました。ふと思いついて各サーバーの時刻を確認したところ、node1とnode2が異なるタイムゾーンに設定されていたことがわかりました。そのため、Swarmノード間の通信に問題がありました。この問題を解決するために、各ノードにログインして次のコマンドを実行しました。
sudo timedatectl set-timezone ゾーン
ここで、ZONE は私の地域の正しいタイムゾーンで、次のコマンドで確認できます。
cat /etc/timezone
各ノードのタイムゾーンが正しいことを確認すると、そのエラーはなくなり、必要に応じてノードにラベルを付け、可用性を設定できるようになります。
もちろん、Portainer を使えば Swarm 内のデプロイメントをスケールすることも可能です。その方法については、私のチュートリアル「Portainer を使ってサービスデプロイメントをスケールする方法」をご覧ください。
Portainerを使ったDocker Swarmの管理はこれで完了です。このプラットフォームは、Dockerコンテナのデプロイメント管理をより簡単で効率的なものにしたいと考えている方にとって、まさに理想的なソリューションです。
Jack Wallen によるビジネス プロフェッショナル向けの最新のテクノロジー アドバイスをすべて知るには、YouTube で TechRepublic の How To Make Tech Work を購読してください。