Helmは、Kubernetesのマニフェストをテンプレート化・パッケージ管理するためのツールです。複雑な構成を「チャート」として再利用でき、運用効率が大幅に向上します。本記事では、Helmの基本概念とチャートの使い方を入門レベルで解説します。
Helmとは
Helmは「Kubernetesのパッケージマネージャ」と呼ばれるツールです。npmやapt-getのように、よく使う構成(Nginx、Prometheus、Grafana等)を1コマンドでインストールでき、独自アプリも「Chart」としてパッケージ化できます。
Helmの構成要素
- Chart:マニフェストのテンプレート集
- Values:Chartに渡すパラメータ
- Release:ChartをValuesで適用したインスタンス
- Repository:Chartを配布するレジストリ(Artifact Hub等)
インストールと基本コマンド
brew install helm
helm version
# リポジトリ追加
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Chart検索
helm search repo nginx
# 既存Chartでインストール
helm install my-nginx bitnami/nginx
# 一覧
helm list
# 削除
helm uninstall my-nginx
独自Chartを作る
helm create my-app
# my-app/
# ├── Chart.yaml
# ├── values.yaml
# └── templates/
# ├── deployment.yaml
# ├── service.yaml
# └── ...
templates/配下にはGoテンプレート構文を含むYAMLが入ります。values.yamlで値を切り替えられます。
テンプレート例
# templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
# values.yaml
replicaCount: 3
image:
repository: my-app
tag: "1.0.0"
環境別の値ファイル
helm install my-app ./my-app -f values.prod.yaml
helm upgrade my-app ./my-app -f values.stg.yaml
GitOpsとの組み合わせ
ArgoCDやFlux等のGitOpsツールと組み合わせれば、ChartのバージョンをGitで管理し、自動デプロイが可能になります。HelmファイルをGitリポジトリで一元管理する運用が定石です。
注意点
- テンプレートが複雑になると保守難度が上がる
- secretの取り扱いはhelm-secretsやexternal-secretsで補強
- 大規模ではKustomizeとの使い分けも検討
まとめ
Helmは、Kubernetesマニフェストを「再利用可能なパッケージ」に進化させる強力なツールです。Chart + Values + Repositoryの3つを押さえれば、本番運用での再現性・効率性が一段上がります。まずはBitnami等の公開Chartを試して感覚を掴むのがおすすめです。