このセクションでは、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]#