本記事でやること
HelmのVersion 3を使って、k8sのResourceであるDeploymentのUpgrade/Rollbackを確認してみる。
環境
root@ras01:~# helm version
version.BuildInfo{Version:"v3.5.3", GitCommit:"041ce5a2c17a58be0fcd5f5e16fb3e7e95fea622", GitTreeState:"dirty", GoVersion:"go1.15.8"}
root@ras01:~# kubectl version
Client Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:31:21Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/arm64"}
Server Version: version.Info{Major:"1", Minor:"21", GitVersion:"v1.21.0", GitCommit:"cb303e613a121a29364f75cc67d3d580833a7479", GitTreeState:"clean", BuildDate:"2021-04-08T16:25:06Z", GoVersion:"go1.16.1", Compiler:"gc", Platform:"linux/arm64"}
実行
1. Helm Chartの作成
最初に、Helm Chartを新規作成に以下、コマンドを実行する。
root@ras01:~# helm create deployment
Creating deployment
root@ras01:~# tree deployment
deployment
├── Chart.yaml
├── charts
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
上記の構成を持ったChart deployment
が作成される。しかし、ややこしいのでtemplate
配下のdeployment.yaml
以外は削除する。
root@ras01:~# tree deployment/
deployment/
├── Chart.yaml
├── charts
├── templates
│ └── deployment.yaml
└── values.yaml
2. templateの定義
以下のようにnginx:1.20.0
のDeploymentを定義する。
cat deployment/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: {{ .Release.Name }}
name: {{ .Release.Name }}
spec:
replicas: 1
selector:
matchLabels:
app: {{ .Release.Name }}
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: {{ .Release.Name }}
spec:
containers:
- image: nginx:1.20.0
name: nginx
resources: {}
3. Helm ChartのRelease
以下のように、コマンドを実行し、先ほど定義したHelm Chartに基づいてdeployment
リリースをインストールして、デプロイする。
root@ras01:~# helm install deployment deployment/
NAME: deployment
LAST DEPLOYED: Wed Apr 21 21:49:58 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
root@ras01:~# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
deployment default 1 2021-04-21 21:49:08.509322219 +0000 UTC deployed deployment-0.1.0 1.16.0
helm list
から現在インストールされているRelaseの一覧を確認できる。
4. Helm ChartのUpgrade
次に、nginx:1.20.0
からnginx:latest
のUpgradeを行う。先ほどと同じくdeployment/templates/deployment.yaml
を編集する。
apiVersion: apps/v1
kind: Deployment
(省略)
spec:
containers:
- image: nginx:latest
name: nginx
resources: {}
今回は、helm upgrade
を用いて、Upgradeを行う。
root@ras01:~# helm upgrade deployment deployment/
Release "deployment" has been upgraded. Happy Helming!
NAME: deployment
LAST DEPLOYED: Wed Apr 21 21:52:08 2021
NAMESPACE: default
STATUS: deployed
REVISION: 2
TEST SUITE: None
root@ras01:~# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
deployment default 2 2021-04-21 21:52:08.509847689 +0000 UTC deployed deployment-0.1.0 1.16.0
root@ras01:~# k describe deploy deployment | grep Image
Image: nginx:latest
上記のように、REVISON 2
として、デプロイが行えたことがわかり、PodのImageがnginx:latest
になっていることもわかる。
helm history
のコマンドを実行すると、これまでデプロイしたReleaseのRevisonを確認することもできる。
root@ras01:~# helm history deployment
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Wed Apr 21 21:49:58 2021 superseded deployment-0.1.0 1.16.0 Install complete
2 Wed Apr 21 21:52:08 2021 deployed deployment-0.1.0 1.16.0 Upgrade complete
5. Helm RollBack
デプロイ後、何かしらの理由(PodのErrorやCrashloopbackoff, pvcの未作成等)でエラーが発生した場合に、Rollbackを行うコマンドも用意されている。また任意のRevisionを指定して、Rollbackを行うことも可能である。
root@ras01:~# helm rollback deployment 1
Rollback was a success! Happy Helming!
root@ras01:~# helm history deployment
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Wed Apr 21 21:49:58 2021 superseded deployment-0.1.0 1.16.0 Install complete
2 Wed Apr 21 21:52:08 2021 superseded deployment-0.1.0 1.16.0 Upgrade complete
3 Wed Apr 21 22:08:11 2021 deployed deployment-0.1.0 1.16.0 Rollback to 1
root@ras01:~# k describe deploy deployment | grep Image
Image: nginx:1.20.0
最後に
不要になったReleaseを削除するために、忘れずにアンインストールを行う。
root@ras01:~# helm uninstall deployment
release "deployment" uninstalled
root@ras01:~# helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
参考文献