Helm入門:最小Chartをinstall・upgrade・rollbackする

中級 | 12分 で読める | 2026.04.24

公式ドキュメント

Helmは、Kubernetesの複数のマニフェストをChartとしてまとめ、設定値とリリース履歴を管理するツールです。今回はDeploymentとServiceだけのChartを作ります。

今回やること

Chart.yaml、values.yaml、templatesをHelmがrenderしてKubernetes manifestsを作り、install・upgrade・rollbackのrevision履歴を残す図

Chart + values → helm install → revision 1
values変更     → helm upgrade → revision 2
問題を想定     → helm rollback 1

前提: 自分のローカルminikubeなど、学習用クラスタでkubernetes入門を完了していること。

言葉意味
Chartテンプレート、既定値、メタデータをまとめたディレクトリ
ReleaseChartをクラスタへ導入した一つの実体
Revisioninstallやupgradeごとに増えるリリース履歴の番号

同じChartでも、release名とvaluesを変えれば別の実体として管理できます。この実習ではrelease名をdemoに固定します。

最小Chartを作る

demo-web/
├── Chart.yaml
├── values.yaml
└── templates/
    ├── deployment.yaml
    └── service.yaml

Chart.yamlにはChart自身の情報を書きます。

apiVersion: v2
name: demo-web
description: Minimal nginx chart for learning
type: application
version: 0.1.0
appVersion: "1.30.4"

values.yamlには変更したい値をまとめます。

replicaCount: 1
image:
  repository: nginx
  tag: "1.30.4"

templates/deployment.yamlを作ります。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .Release.Name }}-demo-web
spec:
  replicas: {{ .Values.replicaCount }}
  selector:
    matchLabels:
      app: {{ .Release.Name }}-demo-web
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-demo-web
    spec:
      containers:
        - name: nginx
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          ports:
            - containerPort: 80

templates/service.yamlを作ります。

apiVersion: v1
kind: Service
metadata:
  name: {{ .Release.Name }}-demo-web
spec:
  selector:
    app: {{ .Release.Name }}-demo-web
  ports:
    - port: 80
      targetPort: 80

installする

クラスタの向き先を確認してから、Chartを検査・表示・導入します。

kubectl config current-context
helm lint ./demo-web
helm template demo ./demo-web
helm install demo ./demo-web

helm templateはクラスタを変更せず、生成されるKubernetesマニフェストを表示します。意図しない名前や値がないか確認してからhelm installへ進みます。

kubectl wait --for=condition=available \
  deployment/demo-demo-web --timeout=120s
helm status demo

upgradeとrollback

Pod数だけを2へ変更します。

helm upgrade demo ./demo-web --set replicaCount=2
kubectl get pods -l app=demo-demo-web
helm history demo

revision 2がdeployedで、Podが2つになったことを確認します。次にrevision 1へ戻します。

helm get values demo

ここではコマンドラインで上書きしたreplicaCount: 2を確認できます。複数環境で繰り返し使う値は、コマンド履歴だけに残さずvaluesファイルとしてGit管理します。

helm rollback demo 1
kubectl rollout status deployment/demo-demo-web
kubectl get pods -l app=demo-demo-web
helm history demo

rollbackも新しい履歴として記録されます。履歴を消して過去へ戻る操作ではありません。

成功確認

  • install後にDeploymentがAvailableになる
  • upgrade後にPodが2つになる
  • rollback後にPodが1つへ戻る
  • helm history demoにinstall、upgrade、rollbackが残る

よくあるつまずき

template errorでインストールできない

先にhelm linthelm templateを実行し、YAMLの字下げと.Valuesの名前を確認します。

別のクラスタへ入れてしまう

Helmは現在のkubeconfigを使います。実行前にkubectl config current-contextを確認してください。

練習

service.port: 80values.yamlへ移し、Serviceテンプレートから参照してください。helm templateの結果でport: 80になれば成功です。

後片付け

helm uninstall demo
kubectl get all -l app=demo-demo-web

リソースが残っていないことを確認します。ローカルクラスタ自体の削除はKubernetes入門の手順を使います。

次のステップ

参考リソース

← 一覧に戻る
PR
PR
PR
PR