コンテナの移動
ke2-docker を用いた構成した Docker swarm クラスタ構成では、明示的にコンテナを移動する操作を行なう必要はありません。 まず、ほとんどのコンテナは全てのノードでレプリカされて、全てがアクティブとして動作するため、コンテナを移動する意味はありません。
KE2.0 の時点では唯一、redis コンテナについては 単一のノードでのみ動作するように構成されています。 そのため redis コンテナについてはどのノードで動作しているのか、動作するノードが移動するケースについて、また、強制的に動作ノードを移動させたい場合の手法について説明します。
redis コンテナを実行しているノードの確認
現在どのノードで redis コンテナが動作しているかについては、docker service ps コマンドを用いて確認することができます。
$ docker service ps ke2_redis
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS
j002f9kno7ma ke2_redis.1 registry.hub.docker.com/library/redis:7.2-alpine ke2-server1 Running Running 25 hours ago
g7lg28hnfupv \_ ke2_redis.1 registry.hub.docker.com/library/redis:7.2-alpine ke2-server1 Shutdown Failed 25 hours ago "No such container: ke2_redis.…"
ngwsnwc20fqk \_ ke2_redis.1 registry.hub.docker.com/library/redis:7.2-alpine ke2-server1 Shutdown Failed 25 hours ago "No such container: ke2_redis.…"
コマンドを実行して表示される結果の DESIRED STATE が "Running" となっている行の NODE で、現在 redis コンテナを実行しているノードが確認できます。 以下のようにいくつかオプションを付けて実行すると、当該するノードの情報だけ表示することができます。
$ docker service ps -f desired-state=running --format "{{.Node}}" ke2_redis
ke2-server1
redis コンテナが移動するタイミング
クラスタが開始したとき(2台目のノードが開始したとき)いずれかのノードで redis コンテナが起動します。 基本的に redis コンテナはそのノードから移動せずに動作しつづけますが、以下のようなときには別のノードに移動して動作を再開する場合があります。
- redis コンテナがダウンしたとき(移動せず同じノードで再起動となる場合もあります)
- redis コンテナが動作しているノードがダウンしたとき
- 強制的に redis コンテナを移動させたとき
redis コンテナの移動方法【非推奨】
Docker swarm クラスタにおいて、あるコンテナを指定したノードに移動させる決まった手順はありません。 以下のように docker service update コマンドを用いることで、redis コンテナの状態更新が行なわれて、その結果として別のノードに移動する場合があります(同じノードでの再起動となる場合もあります)。
$ docker service update --force ke2_redis
ただし、redis コンテナが移動(もしくは再起動)すると動作中のジョブフローが異常終了するなどの影響が起きる場合がありますので、特別な理由がない限り redis コンテナの移動は控えることを推奨します。