Helm
Kubernetes のパッケージマネージャーで、アプリケーションのデプロイをテンプレート化して管理する
Helm とは
Helm は Kubernetes のパッケージマネージャーで、複数の Kubernetes マニフェスト (Deployment, Service, ConfigMap 等) を 1 つの Chart としてパッケージ化し、テンプレート変数で環境ごとの設定を切り替えてデプロイする。npm が Node.js のパッケージマネージャーであるように、Helm は Kubernetes のパッケージマネージャーだ。
Helm はメジャーバージョンの境目で構造が大きく変わっている。v2 はクラスタ内に Tiller という常駐コンポーネントを置き、その権限でマニフェストを適用していた。Helm 3 で Tiller は廃止され、helm コマンドが利用者自身の kubeconfig と権限で Kubernetes API を直接呼ぶ形になった。v2 は 2020 年 11 月 13 日以降リリースが止まっており、helm init や Tiller が登場する手順書は v2 時代のものと判断してよい。さらに Helm 4 の安定版が 2025 年 11 月に出ており、2026 年 8 月時点の最新系列は 4 系だ。Helm 4 は CLI のフラグや出力に後方非互換の変更を含む一方、現在流通している apiVersion v2 の Chart はそのまま扱えるとされている。バージョンを固定せずに CI で helm を入れていると、この境目でパイプラインが壊れる。
Chart の構造
Helm Chart はディレクトリ構造で管理される。Chart.yaml にメタデータ、values.yaml にデフォルトのパラメータ値、templates/ 配下に Kubernetes マニフェストのテンプレートを配置する。デプロイ時に values.yaml の値がテンプレートに注入される。
my-app/
Chart.yaml # Chart のメタデータ
values.yaml # デフォルト値
templates/
deployment.yaml # テンプレート
service.yaml
ingress.yaml
テンプレート
テンプレートの例を示す。
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-app
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
resources:
requests:
cpu: {{ .Values.resources.requests.cpu }}
memory: {{ .Values.resources.requests.memory }}
# values.yaml (デフォルト)
replicaCount: 2
image:
repository: myapp
tag: latest
resources:
requests:
cpu: 100m
memory: 128Mi
環境ごとの values
環境ごとの values の例を示す。
# values-prod.yaml
replicaCount: 5
image:
tag: "1.2.3"
resources:
requests:
cpu: 500m
memory: 512Mi
# dev 環境
helm install my-app ./my-app
# prod 環境 (values-prod.yaml で上書き)
helm install my-app ./my-app -f values-prod.yaml
helm コマンド
helm コマンドの例を示す。
# インストール
helm install my-app ./my-app
# アップグレード
helm upgrade my-app ./my-app
# ロールバック
helm rollback my-app 1
# アンインストール
helm uninstall my-app
# リリース一覧
helm list
# テンプレートのレンダリング確認 (ドライラン)
helm template my-app ./my-app
公開 Chart の利用
公開 Chart の利用の例を示す。
# リポジトリの追加
helm repo add bitnami https://charts.bitnami.com/bitnami
# Chart の検索
helm search repo nginx
# インストール
helm install my-nginx bitnami/nginx
NGINX、PostgreSQL、Redis、Prometheus など、よく使うミドルウェアは公開 Chart でデプロイできる。
配布形式は 2 通りある。従来の HTTP リポジトリ (helm repo add で index.yaml を読む方式) と、コンテナイメージと同じ OCI レジストリを使う oci:// 形式だ。Helm 公式ドキュメントは helm push / helm install の両方で OCI レジストリを扱う手順を案内しており、Bitnami も公式リポジトリの案内を OCI 形式に切り替えている。
# OCI レジストリから直接インストール
helm install my-nginx oci://registry-1.docker.io/bitnamicharts/nginx
公開 Chart に依存するときは、配布元の方針変更がそのまま自分のデプロイに響く点が落とし穴になる。Bitnami の場合、https://charts.bitnami.com/bitnami は 2026 年 8 月時点でも Broadcom 側のホストへリダイレクトされて利用できるが、Debian ベースの従来イメージは bitnamilegacy レジストリへ退避され、公式の案内は Bitnami Secure Images へ移った。Chart の版と参照イメージのタグを固定し、必要なら自組織のレジストリへ複製しておかないと、配布側の再編で以前と同じデプロイが再現できなくなる。
EKS での Helm
EKS では helm コマンドが kubectl と同じ kubeconfig を使用する。AWS Load Balancer Controller、ExternalDNS、cert-manager などの EKS アドオンも Helm Chart で管理する。
Helm vs Kustomize vs kubectl
Helm・Kustomize・kubectl apply の違いを以下にまとめる。
| ツール | テンプレート | パッケージ管理 | 用途 |
|---|---|---|---|
| Helm | Go テンプレートで値を差し込む | Chart として配布し、版を管理できる | 複雑なアプリのデプロイ |
| Kustomize | テンプレートは持たず、元の YAML にパッチを重ねる | 配布の仕組みは持たない | 環境ごとの差分管理 |
| kubectl apply | YAML をそのまま適用する | 配布の仕組みは持たない | シンプルなデプロイ |
Helm の理解を深めるには関連書籍が参考になる。
この記事は役に立ちましたか?
関連用語
Kubernetes
コンテナのデプロイ、スケーリング、管理を自動化するオープンソースのオーケストレーションプラットフォーム
Deployment
Kubernetes で Pod のレプリカ数、更新戦略、ロールバックを宣言的に管理するリソース
Kubernetes Namespace
Kubernetes クラスター内の API リソースを論理的に分離し、権限とリソース枠の適用単位を切る仕組み。ノードとカーネルは共有されるためセキュリティ境界にはならない
GitOps
Git リポジトリを唯一の正として、インフラとアプリケーションの状態を宣言的に管理する運用手法
CloudFormation
AWS のインフラをテンプレート (YAML/JSON) で宣言的に定義および管理する IaC サービス
AWS SAM
AWS のサーバーレスアプリケーションを定義 / デプロイするためのフレームワーク