- 技術 💻
Helm入門|チャートの作り方とコマンド一覧
Helm は、Kubernetes の YAML 一式を「チャート」という部品にまとめ、値(values)を変えて何度でも入れられるようにする道具です。 入れたものは「リリース」として版(リビジョン)が記録され、1つのコマンドで前の版に戻せます。
helm create mychart # チャートの雛形を作る
helm lint mychart # 書き方を検査する
helm template myapp mychart -f values-dev.yaml # YAML を出力して確かめる(クラスターに入れない)
helm install myapp ./mychart -n web --create-namespace -f values-dev.yaml # 入れる
helm upgrade myapp ./mychart -n web -f values-dev.yaml --set replicaCount=2 # 更新する
helm history myapp -n web # 版の一覧
helm rollback myapp 3 -n web # 版 3 に戻す
helm uninstall myapp -n web # 消す
| 手元で動かしたこと | 結果 |
|---|---|
helm create |
雛形を作成。テンプレートは9ファイル(Gateway API の httproute.yaml を含む) |
| values の上書き(6通り) | -f は後ろが勝つ。--set < --set-string < --set-file < --set-literal の順で強い |
helm upgrade で --set だけ渡す |
values ファイルの値が消え、チャートの既定値に戻った |
失敗する更新に --rollback-on-failure |
自動で前の版に戻った |
helm upgrade の途中で強制終了 |
another operation (install/upgrade/rollback) is in progress。helm rollback で戻せた |
OCI レジストリへ helm push |
push したチャートから helm install できた |
確認環境:Helm v4.1.4(Go 1.26.5 でビルドされたもの)、k3s v1.36.5+k3s1(Kubernetes 1.36.5)の1ノードのクラスター、Ubuntu 24.04 で動かしました。OCI レジストリは CNCF Distribution 3.1.2 をローカルで動かしています。Helm 3 との違いと Helm 3 のサポート期限は、Helm の公式ドキュメントとブログで確かめています(確認日 2026年10月13日)。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Helm入門|チャートの作り方とコマンド一覧」
Helm の用語
| 用語 | 意味 |
|---|---|
| チャート(Chart) | テンプレートと既定値をまとめたもの。フォルダか .tgz |
| values | テンプレートに入れる値。values.yaml が既定値 |
| リリース(Release) | チャートをクラスターに入れたもの。名前で区別する |
| リビジョン(Revision) | リリースの版。install・upgrade・rollback のたびに1増える |
| リポジトリ | チャートを置く場所。HTTP のリポジトリか OCI レジストリ |
flowchart LR
C["チャート<br/>templates/ + values.yaml"] --> R["helm template / install"]
V["-f values-dev.yaml<br/>--set key=value"] --> R
R --> M["描画された YAML"]
M --> K["Kubernetes API"]
K --> S["リリースの記録<br/>Secret: sh.helm.release.v1.名前.v版"]
リリースの記録は、リリースと同じ名前空間の Secret に入ります。 手元でも sh.helm.release.v1.myapp.v9 のような Secret が版ごとにでき、ラベルに status=deployed などの状態が入っていました。残す版の数は --history-max で決まり、既定は10です。
インストール
| OS | コマンド |
|---|---|
| macOS | brew install helm |
| Windows | winget install Helm.Helm または scoop install helm |
| Linux(公式スクリプト) | curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4 → chmod 700 get_helm.sh → ./get_helm.sh |
| 版の確認 | helm version --short(手元は v4.1.4+g05fa379) |
Helm は kubectl と同じ ~/.kube/config(または環境変数 KUBECONFIG)でクラスターにつなぎます。名前空間は -n で指定し、省略すると今のコンテキストの名前空間になります。
チャートを作る:helm create
helm create mychart
mychart
├── .helmignore # package に入れないファイル
├── Chart.yaml # チャートの名前・版
├── charts/ # 依存するチャート(サブチャート)
├── templates/
│ ├── NOTES.txt # install 後に表示する案内
│ ├── _helpers.tpl # 共通の部品(名前・ラベル)
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── httproute.yaml # Gateway API
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests/
│ └── test-connection.yaml # helm test で動く Pod
└── values.yaml # 既定値(161行)
# Chart.yaml(コメントを除いたもの)
apiVersion: v2
name: mychart
description: A Helm chart for Kubernetes
type: application
version: 0.1.0 # チャートの版。中身を変えたら上げる
appVersion: "1.16.0" # 入れるアプリの版。image.tag を空にするとこれが使われる
| ファイル | 何を書くか |
|---|---|
Chart.yaml |
version(チャートの版、SemVer)と appVersion(アプリの版) |
values.yaml |
利用者が変えてよい値と、その既定値 |
templates/*.yaml |
Kubernetes の YAML。{{ }} の中に値や関数を書く |
templates/_*.tpl |
名前が _ で始まるファイルは YAML として出力されない。define で部品を書く |
templates/NOTES.txt |
install・upgrade の後に表示される文 |
自分のアプリ用に直す
雛形の Deployment は nginx を動かす前提で、command も環境変数もありません。値で変えたい所を values.yaml に足し、テンプレートで読むようにします。 手元では、起動コマンドと ConfigMap を足しました。
# templates/deployment.yaml(imagePullPolicy の下に足した部分)
imagePullPolicy: {{ .Values.image.pullPolicy }}
{{- with .Values.command }}
command:
{{- toYaml . | nindent 12 }}
{{- end }}
envFrom:
- configMapRef:
name: {{ include "mychart.fullname" . }}
# templates/configmap.yaml(新しく作ったファイル)
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "mychart.fullname" . }}
labels:
{{- include "mychart.labels" . | nindent 4 }}
data:
APP_ENV: {{ .Values.env | default "dev" | quote }}
LOG_LEVEL: {{ .Values.config.logLevel | upper | quote }}
FEATURES: {{ join "," .Values.config.featureFlags | quote }}
RELEASE: {{ printf "%s-%s" .Release.Name .Chart.Version | quote }}
NAMESPACE: {{ .Release.Namespace | quote }}
{{- if eq (.Values.env | default "dev") "prod" }}
CACHE_TTL: "3600"
{{- else }}
CACHE_TTL: "0"
{{- end }}
# values.yaml に足した部分
command: []
config:
logLevel: info
featureFlags:
- search
- export
{{- と -}} の - は、その側の空白と改行を消します。 nindent 12 は「改行してから12文字字下げ」です。YAML は字下げで構造が決まるので、toYaml の結果は nindent で位置を合わせます。
確かめる:helm lint と helm template
helm lint mychart
==> Linting mychart
[INFO] Chart.yaml: icon is recommended
1 chart(s) linted, 0 chart(s) failed
helm template myapp mychart -s templates/configmap.yaml # -s で1ファイルだけ出す
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: myapp-mychart
labels:
helm.sh/chart: mychart-0.1.0
app.kubernetes.io/name: mychart
app.kubernetes.io/instance: myapp
app.kubernetes.io/version: "1.16.0"
app.kubernetes.io/managed-by: Helm
data:
APP_ENV: "dev"
LOG_LEVEL: "INFO"
FEATURES: "search,export"
RELEASE: "myapp-0.1.0"
NAMESPACE: "default"
CACHE_TTL: "0"
--set env=prod --set config.logLevel=warn を付けると、APP_ENV: "prod"、LOG_LEVEL: "WARN"、CACHE_TTL: "3600" に変わりました。
| コマンド | クラスターにつなぐか | 使いどころ |
|---|---|---|
helm lint |
つながない | 書き方の誤り・推奨事項の検査 |
helm template |
つながない | 出力される YAML を見る。CI での差分確認 |
helm install --dry-run=client |
つながない | install と同じ処理で YAML を見る |
helm install --dry-run=server |
つなぐ | API サーバーに検査させる(下の注意も参照) |
helm template は、クラスターの版を知らないので既定の版で描画します。 手元の Helm 4.1.4 では .Capabilities.KubeVersion.Version が v1.35.0 になり、--kube-version 1.36.5 を付けると v1.36.5 になりました。版で分岐するチャートでは --kube-version を付けて確かめます。
values の上書きの優先順位
-f は後ろに書いたファイルが勝ち、--set 系は -f より強くなります。 手元で、values.yaml(logLevel: info)、values-prod.yaml(env: prod、logLevel: warn)、values-local.yaml(logLevel: debug)を組み合わせた結果です。
| 指定 | APP_ENV | LOG_LEVEL |
|---|---|---|
| (なし) | dev | INFO |
-f values-prod.yaml |
prod | WARN |
-f values-prod.yaml -f values-local.yaml |
prod | DEBUG(後ろが勝つ) |
-f values-local.yaml -f values-prod.yaml |
prod | WARN(後ろが勝つ) |
-f values-prod.yaml -f values-local.yaml --set config.logLevel=error |
prod | ERROR(--set が勝つ) |
--set config.logLevel=error --set-string config.logLevel=trace |
dev | TRACE |
--set 系どうしは、書いた順番ではなく種類で強さが決まります。 --set-string を --set より前に書いても --set-string が勝ちました。手元で確かめた強さの順です。
弱い チャートの values.yaml
↓ 親チャートの values.yaml(サブチャートのとき)
↓ -f / --values(後ろに書いたものほど強い)
↓ --set-json
↓ --set(同じ種類どうしは後ろが勝つ)
↓ --set-string
↓ --set-file
強い --set-literal
--set の書き方
| 書き方 | 結果の値 |
|---|---|
--set replicaCount=3 |
replicaCount: 3(整数) |
--set image.tag=1.10 |
"1.10"(手元では文字列のまま) |
--set config.logLevel=1234567890123 |
整数になる。upper に渡すと expected string; got int64 のエラー |
--set-string image.tag=20261013 |
文字列 "20261013" |
--set 'config.featureFlags={a,b,c}' |
リスト [a, b, c] |
--set-json 'config.featureFlags=["x","y"]' |
リスト ["x", "y"] |
--set a=1,b=2 |
2つの値(, で区切る) |
--set-literal 'config.logLevel=a,b' |
文字列 "a,b"(, で区切らない) |
--set-file config.script=run.sh |
ファイルの中身 |
--set livenessProbe.httpGet=null |
既定値のキーを消す |
数字だけのタグやバージョンは --set-string で渡します。 公式ドキュメントでは、既定値のキーを消すには null を入れると説明されています(例:livenessProbe.httpGet を消して exec の probe に替える)。
入れる・更新する・戻す
helm install
helm install myapp ./mychart -n web --create-namespace -f values-dev.yaml --wait --timeout 2m
# values-dev.yaml(手元では BusyBox の httpd を動かした)
image:
repository: rancher/mirrored-library-busybox
tag: "1.37.0"
command: ["sh", "-c", "mkdir -p /www && echo ok > /www/index.html && exec httpd -f -p 80 -h /www"]
--wait を付けると、Pod が Ready になるまで待ち、--timeout を過ぎると失敗にします。 手元では1回目、ノードが空き容量不足(DiskPressure)で Pod を置けず、2分後に次のエラーで failed になりました。
Error: INSTALLATION FAILED: resource Deployment/web/myapp-mychart not ready. status: InProgress, message: Available: 0/1
context deadline exceeded
failed のリリースは、同じ名前で helm upgrade すると続きから直せます。原因を直して upgrade すると、版 2 で STATUS: deployed になりました。
helm upgrade と helm history
helm upgrade myapp ./mychart -n web -f values-dev.yaml --set replicaCount=2 --wait --timeout 2m
helm history myapp -n web
REVISION UPDATED STATUS CHART APP VERSION DESCRIPTION
1 Tue Oct 13 13:13:03 2026 superseded mychart-0.1.0 1.16.0 Release "myapp" failed: resource Deployment/web/myapp-mychart not ready. ...
2 Tue Oct 13 13:18:54 2026 superseded mychart-0.1.0 1.16.0 Upgrade complete
3 Tue Oct 13 13:18:54 2026 deployed mychart-0.1.0 1.16.0 Upgrade complete
helm upgrade に --set だけを渡すと、前回の -f の値は引き継がれません。 手元で --dry-run=client を付けて試した結果です。
| upgrade の指定 | image | replicas |
|---|---|---|
| 値を何も渡さない | busybox(前回の値) | 2(前回の値) |
--set replicaCount=3 だけ |
nginx:1.16.0(チャートの既定値に戻った) | 3 |
--reuse-values --set replicaCount=3 |
busybox | 3 |
--reset-then-reuse-values --set replicaCount=3 |
busybox | 3 |
値を何も渡さなければ前回の値を使い、1つでも渡すとチャートの既定値から作り直します。 毎回 -f values-dev.yaml を付けるのが確実です。--reuse-values は前回の値をそのまま使うので、チャートの values.yaml に新しく足したキーが入りません。--reset-then-reuse-values は「新しいチャートの既定値に、前回の値を重ねる」動きです。
helm get values myapp -n web # 利用者が渡した値
helm get values myapp -n web --all # 既定値も含めた全部
helm get values myapp -n web --revision 2 # 版 2 のときの値
helm get manifest myapp -n web # 入れた YAML
helm upgrade --install myapp ./mychart -n web -f values-dev.yaml # 無ければ install、あれば upgrade(CI で使う)
helm rollback
失敗した更新は、--rollback-on-failure(Helm 3 の --atomic)を付けると自動で前の版に戻ります。 手元で存在しないタグ 9.9.9 に更新した結果です。
helm upgrade myapp ./mychart -n web -f values-dev.yaml --set image.tag=9.9.9 --rollback-on-failure --timeout 40s
Error: UPGRADE FAILED: release myapp failed, and has been rolled back due to rollback-on-failure being set: resource Deployment/web/myapp-mychart not ready. status: InProgress, message: Pending termination: 1
context deadline exceeded
REVISION STATUS DESCRIPTION
4 failed Upgrade "myapp" failed: resource Deployment/web/myapp-mychart not ready. ...
5 deployed Rollback to 3
手で戻すときは、戻したい版の番号を指定します。戻すと、新しい版の番号が増えます(版 3 に戻すと版 7 ができる)。
helm rollback myapp 3 -n web --wait
# Rollback was a success! Happy Helming!
helm uninstall
helm uninstall myapp -n web # リソースと記録を消す
helm uninstall myapp -n web --keep-history # 記録を残す(helm list --uninstalled で見られる)
パッケージにして配る:helm package と OCI
helm package mychart # Chart.yaml の version で作る
helm package mychart --version 0.2.0 --app-version 2.0.0
Successfully packaged chart and saved it to: (今いるフォルダ)/mychart-0.1.0.tgz
手元では 5,344 バイトの mychart-0.1.0.tgz ができ、.helmignore に書いたもの(.git/・*.swp・.vscode/ など)は入りませんでした。
チャートは、コンテナイメージと同じ OCI レジストリに置けます。 手元のレジストリ(http)に push し、そこから install できました。ECR・GHCR・Docker Hub・Artifact Registry も OCI レジストリとして使えます。
helm push mychart-0.1.0.tgz oci://localhost:5000/charts --plain-http
# Pushed: localhost:5000/charts/mychart:0.1.0
helm show chart oci://localhost:5000/charts/mychart --version 0.1.0 --plain-http
helm install myapp oci://localhost:5000/charts/mychart --version 0.1.0 --plain-http -n web -f values-dev.yaml
--plain-http は TLS なしのレジストリ用です。通常のレジストリでは付けません。認証が要るレジストリは helm registry login でログインします。
テンプレート関数の早見表
手元で helm template を動かして得た結果です(values:name: " My App "、tag: ""、port: 8080、debug: false、labels: {team: web, tier: front}、hosts: [a.example.com, b.example.com])。
| 書き方 | 結果 | 用途 |
|---|---|---|
{{ .Values.tag | default "latest" | quote }} |
"latest" |
空なら既定値 |
{{ .Values.port | quote }} |
"8080" |
文字列にする(ConfigMap の値は文字列が必須) |
{{ .Values.port | squote }} |
'8080' |
一重引用符 |
{{ .Values.name | trim | upper | quote }} |
"MY APP" |
前後の空白を消して大文字 |
{{ .Values.name | trim | lower | replace " " "-" }} |
my-app |
名前に使える形にする |
{{ "abcdefghij" | trunc 5 }} |
abcde |
長さを切る(名前は63文字まで) |
{{ printf "%s:%d" "db" (int .Values.port) }} |
db:8080 |
書式を指定してつなぐ |
{{ ternary "on" "off" .Values.debug }} |
off |
条件で2つから選ぶ |
{{ coalesce .Values.tag .Values.missing "fallback" }} |
fallback |
最初の空でない値 |
{{ join "," .Values.hosts }} |
a.example.com,b.example.com |
リストを文字列に |
{{ len .Values.hosts }} / {{ first .Values.hosts }} |
2 / a.example.com |
要素数・先頭 |
{{ hasKey .Values.labels "team" }} |
true |
キーがあるか |
{{ empty .Values.tag }} |
true |
空か(""・0・false・空のリスト) |
{{ toJson .Values.labels }} |
{"team":"web","tier":"front"} |
JSON にする |
{{- toYaml .Values.labels | nindent 4 }} |
改行して4字下げした YAML | values の塊をそのまま埋める |
{{ "secret" | b64enc }} |
c2VjcmV0 |
Secret の data |
{{ "secret" | sha256sum | trunc 12 }} |
2bb80d537b1d |
設定が変わったら Pod を作り直す注釈 |
{{ tpl .Values.tmpl . }} |
rel-cache |
values の中の {{ }} を描画する |
{{ semverCompare ">=1.30-0" .Capabilities.KubeVersion.Version }} |
true |
Kubernetes の版で分岐 |
{{ required "db.password が必要です" .Values.db.password }} |
空ならエラーで止める | 必須の値 |
{{ include "mychart.labels" . }} |
_helpers.tpl の部品 |
共通のラベル・名前 |
| 制御構文 | 書き方 |
|---|---|
| 条件 | {{- if .Values.ingress.enabled }} ... {{- else }} ... {{- end }} |
| 比較 | eq・ne・lt・gt・and・or・not(例:{{ if and .Values.a (eq .Values.env "prod") }}) |
| 繰り返し | {{- range $i, $h := .Values.hosts }} {{ $i }}={{ $h }} {{- end }} |
| 範囲を絞る | {{- with .Values.podAnnotations }} ... {{ toYaml . }} ... {{- end }}(中では . が変わる) |
| 外の値を参照 | with・range の中では $.Release.Name のように $ から書く |
よく使う組み込みの値
| 書き方 | 中身 |
|---|---|
.Release.Name |
リリース名(myapp) |
.Release.Namespace |
入れる名前空間 |
.Release.Revision |
版の番号 |
.Release.IsInstall / .Release.IsUpgrade |
install か upgrade か |
.Chart.Name / .Chart.Version / .Chart.AppVersion |
Chart.yaml の値 |
.Values.xxx |
values |
.Capabilities.KubeVersion.Version |
Kubernetes の版 |
.Files.Get "files/app.conf" |
チャートに入れたファイルの中身 |
.Template.Name |
今のテンプレートのパス |
Helm 3 と Helm 4 の違い
Helm 4 は 2025年11月に出ました。 Helm の公式ブログでは、Helm 3 のバグ修正は 2026年9月9日まで、セキュリティ修正は 2027年2月10日までと案内されています。
| 項目 | Helm 3 | Helm 4(手元の 4.1.4) |
|---|---|---|
| 失敗したら自動で戻す | --atomic |
--rollback-on-failure(--atomic は Flag --atomic has been deprecated と出て動く) |
| 置き換えで強制更新 | --force |
--force-replace(--force は同様に非推奨の表示) |
| 新規 install の適用方法 | クライアント側の適用 | サーバー側の適用(Server-Side Apply)が既定 |
| 待ち方 | --wait(あり/なし) |
--wait=watcher・hookOnly(既定)・legacy |
| 全状態のリリース一覧 | helm list -a(--all) |
--all は無い(手元で unknown shorthand flag: 'a')。--failed・--pending などで絞る |
| post-renderer | 実行ファイルを直接指定 | プラグインとして指定 |
| チャートの API | apiVersion: v2 |
v2 のまま使える。v3 は試験的 |
Helm 4 で新しく入れたリリースは、サーバー側の適用で反映されます。 Helm 3 で入れたリリースを Helm 4 で更新した場合は、前回の方法(クライアント側)を引き継ぎます(--server-side の既定値 auto)。
よくあるエラーと直し方
手元で起こしたエラーの原文です。
| エラー(原文) | 原因 | 直し方 |
|---|---|---|
INSTALLATION FAILED: release name check failed: cannot reuse a name that is still in use |
同じ名前のリリースがある | helm upgrade --install を使う。消すなら helm uninstall |
UPGRADE FAILED: another operation (install/upgrade/rollback) is in progress |
前の操作が途中で止まり pending-upgrade のまま |
helm history で最後の deployed の版を見て helm rollback |
nil pointer evaluating interface {}.host |
.Values.database.host の親 database が無い |
values にキーを足すか、{{ with .Values.database }} で囲む。dig も使える |
YAML parse error on ...: error converting YAML to JSON: yaml: line 11: mapping values are not allowed in this context |
字下げのずれ | helm template --debug で描画結果を見て、nindent の数を直す |
parse error at (...x.yaml:6): unexpected "}" in operand |
{{ }} の閉じ忘れ |
テンプレートの括弧を直す。helm lint でも見つかる |
execution error at (...): db.password が必要です |
required の値が空 |
-f・--set で値を渡す |
wrong type for value; expected string; got int64 |
数字が整数になり、文字列の関数に渡った | --set-string で渡すか、テンプレートで toString |
failed to create typed patch object (web/x; /v1, Kind=ConfigMap): .data.PORT: expected string, got &value.valueUnstructured{Value:80} |
ConfigMap の値に数字 | quote で文字列にする |
resource Deployment/... not ready. status: InProgress と context deadline exceeded |
--wait の時間内に Ready にならない |
kubectl describe pod で原因を見る。イメージや probe の問題が多い |
helm install --dry-run=server でも、すべての誤りが見つかるとは限りません。 手元では、ConfigMap に数字を入れたチャートが --dry-run=server を通り、実際の install で上の expected string のエラーになりました。
pending-upgrade から戻した手順です。
helm list -n web --pending
# NAME NAMESPACE REVISION STATUS CHART
# myapp web 8 pending-upgrade mychart-0.1.0
helm history myapp -n web | tail -2
helm rollback myapp 7 -n web
# Rollback was a success! Happy Helming!
Pod が起動しないときの切り分けは、関連記事「CrashLoopBackOffの直し方|原因別の切り分け表」と「ImagePullBackOffの直し方|ErrImagePullとの違いと原因表」で扱っています。
コマンド一覧
| やりたいこと | コマンド |
|---|---|
| 雛形を作る | helm create <名前> |
| 検査 | helm lint <フォルダ> |
| YAML を出す | helm template <リリース名> <チャート> [-f ...] [-s templates/x.yaml] |
| 入れる | helm install <リリース名> <チャート> -n <ns> --create-namespace |
| 更新(無ければ入れる) | helm upgrade --install <リリース名> <チャート> -n <ns> -f values.yaml |
| 一覧 | helm list -n <ns>、全部の名前空間は -A |
| 状態 | helm status <リリース名> -n <ns> |
| 版の一覧 | helm history <リリース名> -n <ns> |
| 戻す | helm rollback <リリース名> <版> -n <ns> |
| 値・YAML を見る | helm get values / helm get manifest / helm get all |
| 消す | helm uninstall <リリース名> -n <ns> |
| チャートの既定値を見る | helm show values <チャート> |
| パッケージ | helm package <フォルダ> |
| OCI に置く | helm push <tgz> oci://<レジストリ>/<パス> |
| HTTP リポジトリを足す | helm repo add <名前> <URL> → helm repo update |
| 探す | helm search repo <語> / helm search hub <語> |
| 依存チャートを取る | helm dependency update <フォルダ> |
| テスト Pod を動かす | helm test <リリース名> -n <ns> |
よくある質問
Q. Kustomize とどちらを使えばよいですか?
A. 値を変えて同じものを何度も入れる、版を記録して戻す、という用途は Helm が向いています。Kustomize は YAML に差分を重ねる方式で、kubectl apply -k で使えます。Helm で描画した YAML に Kustomize で手を加える組み合わせもあります。
Q. Secret の値を values.yaml に書いてよいですか?
A. values.yaml は Git に入るので、パスワードは書かないのが一般的です。--set で CI から渡す、External Secrets Operator などで外の保管庫から読む、といった方法があります。リリースの記録(Secret)には、描画した YAML と値が入る点にも注意します。
Q. ConfigMap を変えても Pod が作り直されません。
A. Deployment の Pod テンプレートが変わらないと、Pod は作り直されません。Pod の注釈に checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }} を入れると、ConfigMap が変わるたびに注釈も変わり、Pod が作り直されます。
まとめ
helm create→helm lint→helm templateで確かめてからhelm install- values は
-fの後ろが勝ち、--set系はその上。--set-stringは--setより強い - upgrade で値を1つでも渡すと、前回の
-fは引き継がれない。毎回-fを付ける - 失敗に備えて
--rollback-on-failure(Helm 3 は--atomic)と--wait・--timeout pending-upgradeで止まったらhelm rollback- Helm 4 は新規 install がサーバー側の適用。Helm 3 のセキュリティ修正は 2027年2月10日まで
Kubernetes のリソースと YAML の基本は、関連記事「Kubernetes入門|主要リソースとYAMLの書き方、kubectl早見表」で扱っています。
参考・出典
確認日はいずれも 2026年10月13日です。
- Helm「Installing Helm」:https://helm.sh/docs/intro/install/
- Helm「Helm 4 Overview」:https://helm.sh/docs/overview/
- Helm「Chart Template Guide - Values Files」:https://helm.sh/docs/chart_template_guide/values_files/
- Helm「Chart Template Guide - Template Function List」:https://helm.sh/docs/chart_template_guide/function_list/
- Helm「Chart Template Guide - Built-in Objects」:https://helm.sh/docs/chart_template_guide/builtin_objects/
- Helm「Use OCI-based registries」:https://helm.sh/docs/topics/registries/
- Helm「Charts」:https://helm.sh/docs/topics/charts/
- Helm「Helm Commands」:https://helm.sh/docs/helm/
- Helm Blog「Helm 4 Released」:https://helm.sh/blog/helm-4-released
- Helm Blog「Helm 3 End of Life」:https://helm.sh/blog/helm-v3-end-of-life
- k3s:https://docs.k3s.io/
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「Helm入門|チャートの作り方とコマンド一覧」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。