サービスにローリング・アップデートを適用

チュートリアルの前のステップでは、サービスのインスタンス数を スケール しました。次のチュートリアルは Redis 3.0.6 コンテナ・イメージをベースとしたサービスをデプロイします。そして、ローリング・アップデートで Redis 3.0.7 コンテナ・イメージを使うサービスに更新します。

  1. 準備がまだであれば、ターミナルを開き、マネージャ・ノードを実行しているマシンに SSH で入ります。たとえば、このチュートリアルでは manager1 という名前のマシンを使います。
  1. Redis 3.0.6 を swarm の全てのノードにデプロイします。そして、各ノードの更新を10秒ごとに行うよう swarm に設定します。
$ docker service create --replicas 3 --name redis --update-delay 10s --update-parallelism 1 redis:3.0.6

0u6a4s31ybk7yw2wyvtikmu50

これはサービスのデプロイ時のローリング・アップデート・ポリシーを設定しました。

--update-parallelism フラグは、同時に実行するサービス・タスク数を指定します。

--update-delay フラグは、サービス・タスクやタスク・セットを更新する遅延時間を指定します。時間 T を、秒数 Ts 、分 Tm 、時 Th の組み合わせで記述できます。たとえば 10m30s は 10 分 30 秒の遅延です。

  1. redis サービスを調べます。
$ docker service inspect redis --pretty

ID:     0u6a4s31ybk7yw2wyvtikmu50
Name:       redis
Mode:       REPLICATED
 Replicas:      3
Placement:
 Strategy:  SPREAD
UpdateConfig:
 Parallelism:   1
 Delay:     10s
ContainerSpec:
 Image:     redis:3.0.6
  1. redis 用のコンテナ・イメージを更新します。 swarm マネージャ は UpdateConfig ポリシーに基づいてノード更新を適用します。
$ docker service update --image redis:3.0.7 redis
redis
  1. docker service inspect --pretty redis を実行し、新しいイメージの期待状態を確認します。
docker service inspect --pretty redis

ID:     0u6a4s31ybk7yw2wyvtikmu50
Name:       redis
Mode:       REPLICATED
 Replicas:      3
Placement:
 Strategy:  SPREAD
UpdateConfig:
 Parallelism:   1
 Delay:     10s
ContainerSpec:
 Image:     redis:3.0.7
  1. docker service tasks <タスクID> を実行し、ローリング・アップデートを監視します。
$ docker service tasks redis

ID                         NAME     SERVICE  IMAGE        LAST STATE              DESIRED STATE  NODE
dos1zffgeofhagnve8w864fco  redis.1  redis    redis:3.0.7  Running 37 seconds      Running        worker1
9l3i4j85517skba5o7tn5m8g0  redis.2  redis    redis:3.0.7  Running About a minute  Running        worker2
egiuiqpzrdbxks3wxgn8qib1g  redis.3  redis    redis:3.0.7  Running 48 seconds      Running        worker1

Swarm が全てのタスクを更新するまで、 redis:3.0.6 として実行中のイメージが redis:3.0.7 に切り替わるのが見えるでしょう。先ほどの出力はローリング・アップデートが完了した状態です。各インスタンスが RUNNING (実行中)の状態になるのに、それぞれ約 10 秒ずつ増えているのが分かります。

次は Swarm から ノードを解放 する方法を学びます。