Swarm クラスタの準備
Docker CE のインストール
Docker の公式リポジトリを追加し、Docker CE を各ホストにインストールしてください。 各ホスト上で以下のコマンドを実行します。
[全ホスト]$ sudo dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
[全ホスト]$ sudo dnf install docker-ce
次に、Docker サービスの有効化と起動を行います。
[全ホスト]$ sudo systemctl enable --now docker
ユーザの docker グループへの追加
現在のユーザーが sudo せずに dockerコマンドを実行できるように、現在のユーザを docker グループに所属させます。(本手順は省略してもかまいません)
[全ホスト]$ sudo usermod -aG docker $USER
なお、上記の設定を反映させるには、一度ログアウトしてから、再度ログインし直す必要があります。
ファイアウォールの設定
本構成では以下のポートを用いた通信ができるようにする必要があります。
- TCP ポートの 2377: クラスター管理における通信のため
- TCP および UDP ポートの 7946: ノード間の通信のため
- UDP ポートの 4789: オーバーレイネットワークのトラフィックのため
各ホスト上で、以下のコマンドを実行してポートを開放してください(システムによってはデフォルトで開放されている場合もあります)。
[全ホスト]$ sudo firewall-cmd --permanent --add-port=2377/tcp
[全ホスト]$ sudo firewall-cmd --permanent --add-port=7946/tcp --add-port=7946/udp
[全ホスト]$ sudo firewall-cmd --permanent --add-port=4789/udp
[全ホスト]$ sudo firewall-cmd --reload
ただし、VMWare 環境で構築する場合は、注意事項があります。
Docker Swarm クラスタの初期化
最初のマネージャノード(ここでは ke2-server1 を想定します)となる Docker ホスト上で以下を実行してください。
[ke2-server1]$ docker swarm init
ただし、VMWare 環境で構築する場合や、サーバが複数ネットワークに属する場合には、以下の注意事項があります。
VMWare 環境での注意事項
VMWare の仮想サーバでネットワークインタフェースに vmxnet3 を利用している場合、 Swarm のオーバーレイネットワークが利用する 4789 番ポートと衝突し、Swarm ノード間の TCP 通信ができない問題が報告されています。 これを回避するためには、docker swarm init に --data-path-port オプションで 4789 以外のポート番号を指定する必要があります。 合わせて、ファイアウォールの設定も、ここで指定したポートでノード間の通信を許可するように追加します。
標準の 4789 ポートではなく例えば 14789 ポートを利用する場合は、docker swarm init 時に以下のように --data-path-port オプションで指定してください。
[ke2-server1]$ docker swarm init --data-path-port=14789
標準ではないポートを --data-path-port に指定した場合は、そのポートでノード間通信が出来るようにファイアウォールの設定も加えて実施してください。
[全ホスト]$ sudo firewall-cmd --permanent --add-port=14789/udp
[全ホスト]$ sudo firewall-cmd --reload
複数ネットワーク環境での注意事項
サーバが複数の IP アドレスを持つような環境では、docker swarm init コマンド実行時に --advertise-addr オプションの指定を求められる場合があります。 クラスタ構成を組む(すべてのノードが属している)ネットワークの IP アドレスを --advertise-addr オプションで指定するようにしてください。
[ke2-server1]$ docker swarm init --advertise-addr=10.20.0.1
※ VMWare 環境では --data-path-port オプションも合わせて指定するようにしてください。
マネージャノードの追加
続いて、以下のコマンドを実行して、マネージャノードを追加するコマンドを取得します。
[ke2-server1]$ docker swarm join-token manager
このコマンドを実行すると、次のような表示があるはずです。
To add a manager to this swarm, run the following command:
docker swarm join \
--token <トークン> \
<IPアドレス>:2377
ここに表示されているコマンドを次の手順で、他のホスト上で実行することになります。
マネージャノードの追加
先の手順を実行したときに表示された docker swarm join コマンドを、2つ目、3つ目の Docker ホスト上でそれぞれ実行してください。
[ke2-server{2,3}]$ docker swarm join --token <トークン> <IPアドレス>:2377
ノード一覧の確認
任意の Docker ホスト上で以下のコマンドを実行すると、Swarmクラスタに参加しているノード一覧を表示することができます。
[ke2-server1]$ docker node ls
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
ee5c0f5j5dt1m2x6vemrz7dxy * ke2-server1 Ready Active Reachable 25.0.4
ypqsarfbtuwrit9hekiqac03u ke2-server2 Ready Active Reachable 25.0.4
t8zhg0ez1xezj0942d7zb4u6h ke2-server3 Ready Active Leader 25.0.4
3台のノードの STATUS が Ready になっていること、いずれかのノードの MANAGER STATUS が Leader になっていることを確認してください。