KubernetesでDeploymentのRollback

こんにちは、サイオステクノロジー技術部 武井です。KubernetesでDeploymentのRollbackを試してみました。

Kubernetesには、いつでも旧バージョンのデプロイに戻せるようにDeploymentのRollback機能があります。試したのはAzure Kubernetes Serviceですが、他のクラウドサービス上のKubernetesでも同じだと思います。

以下のようにhogeと表示する単純なPHPをVer1.0とします。

<?php
echo "hoge";
?>

こちらの記事の方法に従って、Azure Container Registryにpushして、以下のkubectlコマンドでデプロイします。–recordオプションをtrueにしたのは、変更履歴に残したいためです。

# kubectl apply --filename=deployment.yml --record=true

 

以下のコマンドで変更履歴を確認してみます。先程デプロイした履歴がREVISION 1として記録されています。

$ kubectl rollout history deployment deployment-example
deployment.extensions/deployment-example 
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=deployment.yml --record=true

 

portfowardでコンテナの動作を確認してみます。

$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
deployment-example-66fcc4b9f7-5f8sh   1/1     Running   0          40m
deployment-example-66fcc4b9f7-j4pdc   1/1     Running   0          40m
deployment-example-66fcc4b9f7-jtp9z   1/1     Running   0          40m
$ kubectl port-forward deployment-example-66fcc4b9f7-5f8sh 8080:80
$ curl https://localhost:8088/test.php
hoge

hogeと表示されました。期待どおりです。

 

次に先程のPHPを以下のように変更してみます。

<?php
echo "fuga";
?>

 

同じようにこちらの記事の方法に従って、Azure Container Registryにpushして、以下のkubectlコマンドでデプロイします。

# kubectl apply --filename=deployment.yml --record=true

 

同じように以下のコマンドで変更履歴を確認してみます。先程デプロイした履歴がREVISION 2として記録されています。

$ kubectl rollout history deployment deployment-example
deployment.extensions/deployment-example 
REVISION  CHANGE-CAUSE
1         kubectl apply --filename=deployment.yml --record=true
2         kubectl apply --filename=deployment.yml --record=true

 

portfowardでコンテナの動作を確認してみます。

$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
deployment-example-5f796c7988-5klnz   1/1     Running   0          19s
deployment-example-5f796c7988-dgsnh   1/1     Running   0          22s
deployment-example-5f796c7988-v64g2   1/1     Running   0          16s
$ kubectl port-forward deployment-example-5f796c7988-5klnz 8080:80
$ curl https://localhost:8088/test.php
fuga

fugaと表示されました。期待どおりです。

 

では、前のバージョンにRollbackしてみます。kubectl rollout undo deploymentコマンドで以下のように行います。Revisionを1に戻したいので、–to-revisionで1を指定します。

$ kubectl rollout undo deployment deployment-example --to-revision=1

portfowardでコンテナの動作を確認してみます。

$ kubectl get pods
NAME                                  READY   STATUS    RESTARTS   AGE
deployment-example-66fcc4b9f7-ct4g6   1/1     Running   0          3m41s
deployment-example-66fcc4b9f7-nm97m   1/1     Running   0          3m38s
deployment-example-66fcc4b9f7-qmjp6   1/1     Running   0          3m44s
$ kubectl port-forward deployment-example-66fcc4b9f7-ct4g6 8080:80
$ curl https://localhost:8088/test.php
hoge

hogeと表示されました。一つ前のRevisionに戻せました。

Kubernetesではこんなに簡単に前のバージョンに戻せるので、とっても便利ですね。万が一のステップバックも簡単です。

ご覧いただきありがとうございます! この投稿はお役に立ちましたか?

役に立った 役に立たなかった

0人がこの投稿は役に立ったと言っています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です