このセクションでは、Deployment リソースを使ってPod のロールバックをする方法について紹介します。ロールバックすることで、Pod の状態をアップデートに戻すことができます。
Master サーバーから Deployment リソースの変更履歴を確認します。ここでは、2つのリビジョンが確認できます。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment deployment.extensions/sample-deployment REVISION CHANGE-CAUSE 1 kubectl apply --filename=sample-deployment.yaml --record=true 2 kubectl apply --filename=sample-deployment.yaml --record=true [root@kube-master sample-deployment]#
Master サーバーから リビジョン 1 の Deployment リソースを確認します。ここでは、コンテナイメージが nginx:1.12 であることが確認できます。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment --revision 1 deployment.extensions/sample-deployment with revision #1 Pod Template: Labels: app=sample-app pod-template-hash=6c5948bf66 Annotations: kubernetes.io/change-cause: kubectl apply --filename=sample-deployment.yaml --record=true Containers: nginx-container: Image: nginx:1.12 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> [root@kube-master sample-deployment]#
Master サーバーから リビジョン 2 の Deployment リソースを確認します。ここでは、コンテナイメージが nginx:1.13 であることが確認できます。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment --revision 2 deployment.extensions/sample-deployment with revision #2 Pod Template: Labels: app=sample-app pod-template-hash=7b4f67c7bc Annotations: kubernetes.io/change-cause: kubectl apply --filename=sample-deployment.yaml --record=true Containers: nginx-container: Image: nginx:1.13 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> [root@kube-master sample-deployment]#
Master サーバーから Kubernetes クラスタ上の ReplicaSet を確認します。ここでは、リビジョン 2 の Deployment リソースで 3 つの Pod が稼働していることが確認できます。
[root@kube-master sample-deployment]# kubectl get replicasets NAME DESIRED CURRENT READY AGE sample-deployment-6c5948bf66 0 0 0 5m24s sample-deployment-7b4f67c7bc 3 3 3 23s [root@kube-master sample-deployment]#
Master サーバーから リビジョン 1 の Deployment リソースにロールバックします。
[root@kube-master sample-deployment]# kubectl rollout undo deployment sample-deployment --to-revision 1 deployment.extensions/sample-deployment rolled back [root@kube-master sample-deployment]#
Master サーバーからロールバックの状況を確認します。ここでは、3つの新しいレプリカを作成し2つの古いレプリカを終了する処理をした後に、最後に残りの古い1つのレプリカを終了する動きをしロールバックが終了していることが確認できます。
[root@kube-master sample-deployment]# kubectl rollout status deployment sample-deployment Waiting for deployment "sample-deployment" rollout to finish: 2 out of 3 new replicas have been updated... Waiting for deployment "sample-deployment" rollout to finish: 2 out of 3 new replicas have been updated... Waiting for deployment "sample-deployment" rollout to finish: 1 old replicas are pending termination... Waiting for deployment "sample-deployment" rollout to finish: 1 old replicas are pending termination... deployment "sample-deployment" successfully rolled out [root@kube-master sample-deployment]#
Master サーバーから Kubernetes クラスタ上の ReplicaSet を確認します。ここでは、リビジョン 1 の Deployment リソースで 3 つの Pod が稼働していることが確認できます。
[root@kube-master sample-deployment]# kubectl get replicasets NAME DESIRED CURRENT READY AGE sample-deployment-6c5948bf66 3 3 3 62m sample-deployment-7b4f67c7bc 0 0 0 57m [root@kube-master sample-deployment]#
Master サーバーから Deployment リソースの変更履歴を確認します。ここでは、リビジョンが 2 と 3 の 2つのリビジョンが確認できます。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment deployment.extensions/sample-deployment REVISION CHANGE-CAUSE 2 kubectl apply --filename=sample-deployment.yaml --record=true 3 kubectl apply --filename=sample-deployment.yaml --record=true [root@kube-master sample-deployment]#
Master サーバーから リビジョン 2 の Deployment リソースを確認します。ここでは、コンテナイメージが nginx:1.13 であることが確認できます。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment --revision 2 deployment.extensions/sample-deployment with revision #2 Pod Template: Labels: app=sample-app pod-template-hash=7b4f67c7bc Annotations: kubernetes.io/change-cause: kubectl apply --filename=sample-deployment.yaml --record=true Containers: nginx-container: Image: nginx:1.13 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> [root@kube-master sample-deployment]#
Master サーバーから リビジョン 3 の Deployment リソースを確認します。ここでは、コンテナイメージが nginx:1.12 であることが確認できます。
[root@kube-master sample-deployment]# kubectl rollout history deployment sample-deployment --revision 3 deployment.extensions/sample-deployment with revision #3 Pod Template: Labels: app=sample-app pod-template-hash=6c5948bf66 Annotations: kubernetes.io/change-cause: kubectl apply --filename=sample-deployment.yaml --record=true Containers: nginx-container: Image: nginx:1.12 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: <none> Volumes: <none> [root@kube-master sample-deployment]#