このセクションでは、Recreate による Pod のアップデートについて紹介します。 Recreate は、一度全ての Pod リソースを削除してから再度 Pod を作成してアップデートします。そのため、ダウンタイムが発生しますが、ローリングアップデートのように余剰のリソースを使わないことや切り替え完了が早いといったメリットがあります。
サンプルのマニフェストファイルを新規作成し、以下コードを記述します。
[root@kube-master sample-deployment]# vi sample-deployment-recreate.yaml
spec に strategy 項目を記述し、type に Recreate を指定します。
[root@kube-master sample-deployment]# cat sample-deployment-recreate.yaml apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-recreate spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.13 ports: - containerPort: 80 [root@kube-master sample-deployment]#
Master サーバーから 作成したマニフェストを実行し、Kubernetes クラスタ上にリソースを作成します。 – – record オプションを付けておくことで、アップデートを行った際の履歴を保持しておくことが可能です。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-recreate.yaml --record deployment.apps/sample-deployment-recreate created [root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを確認します。- – watch オプションを付けることで、リソースの状態に変化あった場合の状態を常時確認することできます。ここでは、3つの Pod リソースを新規で作成した状態を確認できます。
[root@kube-master ~]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-recreate-7b4f67c7bc 3 0 0 0s sample-deployment-recreate-7b4f67c7bc 3 0 0 0s sample-deployment-recreate-7b4f67c7bc 3 3 0 0s sample-deployment-recreate-7b4f67c7bc 3 3 1 1s sample-deployment-recreate-7b4f67c7bc 3 3 2 2s sample-deployment-recreate-7b4f67c7bc 3 3 3 2s
サンプルのマニフェストファイルを編集し、以下コードを変更します。
[root@kube-master sample-deployment]# vi sample-deployment-recreate.yaml
コンテナイメージを nginx:1.13 から nginx:1.12 に変更します。
apiVersion: apps/v1 kind: Deployment metadata: name: sample-deployment-recreate spec: strategy: type: Recreate replicas: 3 selector: matchLabels: app: sample-app template: metadata: labels: app: sample-app spec: containers: - name: nginx-container image: nginx:1.12 ports: - containerPort: 80
Master サーバーから 変更したマニフェストを実行します。
[root@kube-master sample-deployment]# kubectl apply -f sample-deployment-recreate.yaml --record
deployment.apps/sample-deployment-recreate configured
[root@kube-master sample-deployment]#
Master サーバーから ReplicaSet のリソースを – – watch オプションを付けて確認します。ここでは、最初に作成した 3つの Pod リソースが一旦全て削除され、再作成している状態が確認できます。
[root@kube-master ~]# kubectl get replicasets --watch NAME DESIRED CURRENT READY AGE sample-deployment-recreate-7b4f67c7bc 3 0 0 0s sample-deployment-recreate-7b4f67c7bc 3 0 0 0s sample-deployment-recreate-7b4f67c7bc 3 3 0 0s sample-deployment-recreate-7b4f67c7bc 3 3 1 1s sample-deployment-recreate-7b4f67c7bc 3 3 2 2s sample-deployment-recreate-7b4f67c7bc 3 3 3 2s sample-deployment-recreate-7b4f67c7bc 0 3 3 2m5s sample-deployment-recreate-7b4f67c7bc 0 3 3 2m5s sample-deployment-recreate-7b4f67c7bc 0 0 0 2m5s sample-deployment-recreate-6c5948bf66 3 0 0 0s sample-deployment-recreate-6c5948bf66 3 0 0 0s sample-deployment-recreate-6c5948bf66 3 3 0 0s sample-deployment-recreate-6c5948bf66 3 3 1 1s sample-deployment-recreate-6c5948bf66 3 3 2 2s sample-deployment-recreate-6c5948bf66 3 3 3 2s
Master サーバーから Deployment リソースの変更履歴を確認します。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment-recreate deployment.extensions/sample-deployment-recreate REVISION CHANGE-CAUSE 1 kubectl apply --filename=sample-deployment-recreate.yaml --record=true 2 kubectl apply --filename=sample-deployment-recreate.yaml --record=true [root@kube-master sample-deployment]#