アップデートはバージョン管理されているので任意のタイミングで戻すことができる。
https://kubernetes.io/ja/docs/tutorials/kubernetes-basics/update
サンプルをバージョン2に更新する
基本的に更新対象のイメージをデプロイすれば良い。
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
Pods確認。少し時間をおいて複数回。
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 3h 10.1.0.16 docker-for-desktop
kubernetes-bootcamp-5c69669756-zlv7l 1/1 Running 0 48m 10.1.0.17 docker-for-desktop
MacBook-Pro:powerpecognition shinichiyamada$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.extensions/kubernetes-bootcamp image updated
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 3h 10.1.0.16 docker-for-desktop
kubernetes-bootcamp-5c69669756-zlv7l 1/1 Running 0 49m 10.1.0.17 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 0/1 ContainerCreating 0 2s docker-for-desktop
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 3h 10.1.0.16 docker-for-desktop
kubernetes-bootcamp-5c69669756-zlv7l 1/1 Terminating 0 49m 10.1.0.17 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-lgt87 0/1 ContainerCreating 0 1s docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 8s 10.1.0.20 docker-for-desktop
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-7799cbcb86-lgt87 1/1 Running 0 3m 10.1.0.21 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 3m 10.1.0.20 docker-for-desktop
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 3h 10.1.0.16 docker-for-desktop
kubernetes-bootcamp-5c69669756-zlv7l 1/1 Running 0 48m 10.1.0.17 docker-for-desktop
MacBook-Pro:powerpecognition shinichiyamada$ kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=jocatalin/kubernetes-bootcamp:v2
deployment.extensions/kubernetes-bootcamp image updated
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 3h 10.1.0.16 docker-for-desktop
kubernetes-bootcamp-5c69669756-zlv7l 1/1 Running 0 49m 10.1.0.17 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 0/1 ContainerCreating 0 2s
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5c69669756-zg8z6 1/1 Running 0 3h 10.1.0.16 docker-for-desktop
kubernetes-bootcamp-5c69669756-zlv7l 1/1 Terminating 0 49m 10.1.0.17 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-lgt87 0/1 ContainerCreating 0 1s
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 8s 10.1.0.20 docker-for-desktop
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-7799cbcb86-lgt87 1/1 Running 0 3m 10.1.0.21 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 3m 10.1.0.20 docker-for-desktop
Pod1(ver1), Pod2(ver1) が稼働中にUpdateをおこなったとき
Pod3(ver2)作成
Pod3稼働、Pod2停止
Pod4(ver2)作成
Pod4稼働、Pod1停止
といった流れになっていることがわかる。
http://localhost:32088/ へアクセス
Hello Kubernetes bootcamp! | Running on: kubernetes-bootcamp-7799cbcb86-ml8rg | v=2
末尾がv2になっている。kubectl rollout status コマンドで状態を確認できる。
MacBook-Pro:xxxx xxxx$ kubectl rollout status deployments/kubernetes-bootcamp
deployment "kubernetes-bootcamp" successfully rolled out
deployment "kubernetes-bootcamp" successfully rolled out
ロールバック
v10にアップデート
kubectl set image deployments/kubernetes-bootcamp kubernetes-bootcamp=gcr.io/google-samples/kubernetes-bootcamp:v10
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5f76cd7b94-rfb7b 0/1 ErrImagePull 0 3m 10.1.0.22 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-lgt87 1/1 Running 0 21m 10.1.0.21 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 21m 10.1.0.20 docker-for-desktop
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-5f76cd7b94-rfb7b 0/1 ErrImagePull 0 3m 10.1.0.22 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-lgt87 1/1 Running 0 21m 10.1.0.21 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 21m 10.1.0.20 docker-for-desktop
1つのPodでエラーが発生している。なぜならv10のイメージがないため。
エラーが発生したら更新が止まるらしく致命傷は避けれる。
ロールバックする
kubectl rollout undo deployments/kubernetes-bootcamp
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-7799cbcb86-lgt87 1/1 Running 0 21m 10.1.0.21 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 21m 10.1.0.20 docker-for-desktop
MacBook-Pro:xxxx xxxx$ kubectl get pods -o wide
NAME READY STATUS RESTARTS AGE IP NODE
kubernetes-bootcamp-7799cbcb86-lgt87 1/1 Running 0 21m 10.1.0.21 docker-for-desktop
kubernetes-bootcamp-7799cbcb86-ml8rg 1/1 Running 0 21m 10.1.0.20 docker-for-desktop
以上でチュートリアルは完了
自前のアプリを公開するといった部分がないので後ほどまとめる予定。
レジストリを用意しないといけないので若干面倒。
雑多なまとめでいいなら以下に記述している。
https://trueman-developer.blogspot.com/2019/02/kubernetesk8s.html