Docker Swarm: 複数ホストでDockerコンテナのオーケストレーション


前提


ドキュメント


Dockerのオーケストレーション

複数ホストでDockerエンジン(サーバ)を起動し、オーケストレーション(連携)させたものをSwarmクラスタという。

Swarmに含めないスタンドアロン・コンテナも、ノードで従来のように起動できる。


Swarmで稼働する流れ

  1. Swarm初期化: マネージャ稼働
  2. Swarm参加: ワーカー稼働
  3. サービス定義: マネージャで
  4. タスク起動: マネージャがワーカーに発動

その後もマネージャとワーカーは連携し、サービス定義の望ましい状態を保つ。


オーバーレイ・ネットワーク

通信の暗号化

ingress: デフォルトのオーバーレイ・ネットワーク

ユーザ定義(推奨): docker network create

# 付ける名前
name=myoverlay
docker network create --driver overlay $name

サービス作成のとき--networkで指定できる。


ファイアウォール: 各ノードでポート開放

firewalld

# サービス定義の確認
firewall-cmd --info-service docker-swarm
docker-swarm
  ports: 2377/tcp 7946/tcp 7946/udp 4789/udp
  protocols: esp

# publicゾーンに追加する場合
firewall-cmd --zone=public --add-service=docker-swarm
# 恒久化
firewall-cmd --runtime-to-permanent

ファイアウォール: KVMゲストのワーカーノードの場合、追加設定

ブリッジにより、ホストと同一ネットワークのゲストにした場合。

ホスト側ファイアウォール

# ブリッジ名
bridge_name=mybridge
# ブリッジもゾーンに加える
firewall-cmd --add-interface=$bridge_name

Swarm初期化: マネージャノードとするホスト

# マネージャIPアドレス: 他のノードからアクセスできるもの
docker swarm init --advertise-addr マネージャIPアドレス

すると、ワーカーをSwarmに参加させるときに使う「トークン付きコマンド」が出力される。

トークン再出力

docker swarm join-token worker

ingressができる

# Dockerネットワークのリスト
docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
2725f52897e5        docker_gwbridge     bridge              local
7qg7akbhcdrd        ingress             overlay             swarm

docker infoで確認

# 初期化前
Swarm: inactive

# Swarm有効
Swarm: active
 Is Manager: true

Swarm参加: ワーカーノードとする各ホスト

# swarm initで出力したトークン付きコマンド
docker swarm join --token トークン IPアドレス:ポート

docker infoで確認

Swarm: active
 Is Manager: false

Swarmから抜けるとき

docker swarm leave

docker nodeコマンド

マネージャで各ノードの状態を調べる。

# ノードリスト(アスタリスク付きがマネージャ)
docker node ls
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
rshcqnqaeznxavfhvuywc9afl     g1                  Ready               Active                                  18.09.4
bp3f23uufxh3g61arqiporoea *   host                Ready               Active              Leader              18.09.4

Swarmから抜ける

# ワーカーで
docker swarm leave

# マネジャーで
# STATUSがDownに
docker node ls
# 消す
docker node rm ノード