
こんにちは、サイオステクノロジー技術部 武井です。KubernetesでDeploymentのRollbackを試してみました。
Kubernetesには、いつでも旧バージョンのデプロイに戻せるようにDeploymentのRollback機能があります。試したのはAzure Kubernetes Serviceですが、他のクラウドサービス上のKubernetesでも同じだと思います。
以下のようにhogeと表示する単純なPHPをVer1.0とします。
1 2 3 |
<?php echo "hoge"; ?> |
こちらの記事の方法に従って、Azure Container Registryにpushして、以下のkubectlコマンドでデプロイします。–recordオプションをtrueにしたのは、変更履歴に残したいためです。
1 |
# kubectl apply --filename=deployment.yml --record=true |
以下のコマンドで変更履歴を確認してみます。先程デプロイした履歴がREVISION 1として記録されています。
1 2 3 4 |
$ kubectl rollout history deployment deployment-example deployment.extensions/deployment-example REVISION CHANGE-CAUSE 1 kubectl apply --filename=deployment.yml --record=true |
portfowardでコンテナの動作を確認してみます。
1 2 3 4 5 6 7 8 |
$ 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 http://localhost:8088/test.php hoge |
hogeと表示されました。期待どおりです。
次に先程のPHPを以下のように変更してみます。
1 2 3 |
<?php echo "fuga"; ?> |
同じようにこちらの記事の方法に従って、Azure Container Registryにpushして、以下のkubectlコマンドでデプロイします。
1 |
# kubectl apply --filename=deployment.yml --record=true |
同じように以下のコマンドで変更履歴を確認してみます。先程デプロイした履歴がREVISION 2として記録されています。
1 2 3 4 5 |
$ 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でコンテナの動作を確認してみます。
1 2 3 4 5 6 7 8 |
$ 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 http://localhost:8088/test.php fuga |
fugaと表示されました。期待どおりです。
では、前のバージョンにRollbackしてみます。kubectl rollout undo deploymentコマンドで以下のように行います。Revisionを1に戻したいので、–to-revisionで1を指定します。
1 |
$ kubectl rollout undo deployment deployment-example --to-revision=1 |
portfowardでコンテナの動作を確認してみます。
1 2 3 4 5 6 7 8 |
$ 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 http://localhost:8088/test.php hoge |
hogeと表示されました。一つ前のRevisionに戻せました。
Kubernetesではこんなに簡単に前のバージョンに戻せるので、とっても便利ですね。万が一のステップバックも簡単です。

>> 雑誌等の執筆依頼を受付しております。
ご希望の方はお気軽にお問い合わせください!
コメント投稿