Helm
Kubernetes のパッケージマネージャーで、アプリケーションのデプロイをテンプレート化して管理する
Kubernetesパッケージ管理
Helm とは
Helm は Kubernetes のパッケージマネージャーで、複数の Kubernetes マニフェスト (Deployment, Service, ConfigMap 等) を 1 つの Chart としてパッケージ化し、テンプレート変数で環境ごとの設定を切り替えてデプロイする。npm が Node.js のパッケージマネージャーであるように、Helm は Kubernetes のパッケージマネージャーだ。
Chart の構造
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-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 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 の利用
# リポジトリの追加
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 で簡単にデプロイできる。
EKS での Helm
EKS では helm コマンドが kubectl と同じ kubeconfig を使用する。AWS Load Balancer Controller、ExternalDNS、cert-manager などの EKS アドオンも Helm Chart で管理する。
Helm vs Kustomize vs kubectl
| ツール | テンプレート | パッケージ管理 | 用途 |
|---|---|---|---|
| Helm | ✅ (Go テンプレート) | ✅ (Chart) | 複雑なアプリのデプロイ |
| Kustomize | ❌ (パッチベース) | ❌ | 環境ごとの差分管理 |
| kubectl apply | ❌ | ❌ | シンプルなデプロイ |
Helm の理解を深めるには関連書籍が参考になる。