deployment は pod を管理します。deployment を使うと、新しいバージョンの pod をいつどのようにロールアウトするか、またいつどのように以前の状態にロールバックするかをきめ細かく制御できます。

sise-deploy という名前の deployment を作成しましょう。これは 2 つの pod の replica と 1 つの replica set を管理します。

$ kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/master/specs/deployments/d09.yaml

deployment、replica set、そして deployment が面倒を見ている pod を次のように確認できます。

$ kubectl get deploy
NAME          DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
sise-deploy   2         2         2            2           10s

$ kubectl get rs
NAME                     DESIRED   CURRENT   READY     AGE
sise-deploy-3513442901   2         2         2         19s

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sise-deploy-3513442901-cndsx   1/1       Running   0          25s
sise-deploy-3513442901-sn74v   1/1       Running   0          25s

なお、pod と replica set の命名は deployment の名前から生成されています。

この時点で、pod の中で実行されている sise コンテナはバージョン 0.9 を返すように設定されています。クラスタ内部から確認してみましょう。(pod の IP を取得するには kubectl describe を使います)

[cluster] $ curl 172.17.0.3:9876/info
{"host": "172.17.0.3:9876", "version": "0.9", "from": "172.17.0.1"}

では、バージョンを 1.0 に変えるとどうなるか確認しましょう。deployment を更新します。

$ kubectl apply -f https://raw.githubusercontent.com/openshift-evangelists/kbe/master/specs/deployments/d10.yaml
deployment "sise-deploy" configured

なお、手動で deployment を編集する代わりに kubectl edit deploy/sise-deploy を使えます。

これで確認できますが、バージョン 1.0 に更新された新しい pod が 2 つロールアウトされ、バージョン 0.9 の古い pod が 2 つ停止しました。

$ kubectl get pods
NAME                           READY     STATUS        RESTARTS   AGE
sise-deploy-2958877261-nfv28   1/1       Running       0          25s
sise-deploy-2958877261-w024b   1/1       Running       0          25s
sise-deploy-3513442901-cndsx   1/1       Terminating   0          16m
sise-deploy-3513442901-sn74v   1/1       Terminating   0          16m

また、新しい replica set が deployment により作成されました。

$ kubectl get rs
NAME                     DESIRED   CURRENT   READY     AGE
sise-deploy-2958877261   2         2         2         4s
sise-deploy-3513442901   0         0         0         24m

deployment の進行を確認するには kubectl rollout status deploy/sise-deploy が使えます。

新しい 1.0 バージョンが本当に利用可能かどうかを確認するために、クラスタ内部から以下を実行します。(再掲。pod の IP を取得するには kubectl describe を使います)

[cluster] $ curl 172.17.0.5:9876/info
{"host": "172.17.0.5:9876", "version": "1.0", "from": "172.17.0.1"}

すべての deployment の履歴は次のように取得できます。

$ kubectl rollout history deploy/sise-deploy
deployments "sise-deploy"
REVISION        CHANGE-CAUSE
1               <none>
2               <none>

deployment に問題があれば、Kubernetes は自動的に前のバージョンにロールバックしますが、特定のリビジョンに明示的にロールバックすることもできます。この例ではリビジョン 1 (最初の pod バージョン) にロールバックしてみます。

$ kubectl rollout undo deploy/sise-deploy --to-revision=1
deployment "sise-deploy" rolled back

$ kubectl rollout history deploy/sise-deploy
deployments "sise-deploy"
REVISION        CHANGE-CAUSE
2               <none>
3               <none>

$ kubectl get pods
NAME                           READY     STATUS    RESTARTS   AGE
sise-deploy-3513442901-ng8fz   1/1       Running   0          1m
sise-deploy-3513442901-s8q4s   1/1       Running   0          1m

この時点で最初の状態に戻りました。2 つの新しい pod が再びバージョン 0.9 で実行されています。

最後に、クリーンアップのため deployment を削除します。deployment が管理している replica set と pod も一緒に削除されます。

$ kubectl delete deploy sise-deploy
deployment "sise-deploy" deleted

deployment の他のオプションと、それがいつトリガーされるかについてはドキュメントも参考にしてください。

前へ | 次へ