1. Helmの中核概念
HelmはKubernetesのパッケージマネージャーです。KubernetesマニフェストをChartsにパッケージ化し、デプロイメントをReleasesとして管理します。
Helm Architecture:
values.yaml Chart templates
│ │
▼ ▼
┌──────────────────────────────┐
│ Helm Template Engine │
│ Renders YAML manifests │
└──────────────┬───────────────┘
│
▼ kubectl apply
Kubernetes Cluster
(stored as Release)
| 用語 | 定義 |
|---|---|
| Chart | Helmのパッケージ — テンプレート + デフォルト値を含む |
| Release | クラスターにデプロイされたChartのインスタンス |
| Repository | Chartsの保管場所(Artifact Hub、Bitnamiなど) |
| Values | Chartをカスタマイズする設定パラメータ |
| Revision | install/upgradeごとに新しいリビジョンが作成される |
2. Helmコマンド
# リポジトリを追加
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update
# Chartsを検索
helm search repo bitnami/nginx
helm search hub wordpress
# Chartをインストール
helm install my-release bitnami/nginx
helm install my-release bitnami/nginx --values custom-values.yaml
helm install my-release bitnami/nginx --set image.tag=1.25
# Releasesを一覧表示
helm list
helm list -n production
# Releaseをアップグレード
helm upgrade my-release bitnami/nginx --set replicaCount=3
# 前のリビジョンにロールバック
helm rollback my-release 1 # リビジョン1にロールバック
helm rollback my-release # 前のリビジョンにロールバック
# アンインストール
helm uninstall my-release
# レンダリングされたテンプレートを確認(dry-run)
helm template my-release bitnami/nginx
helm install my-release bitnami/nginx --dry-run
試験のポイント: CKADでは
helm installの--setフラグ(値を直接オーバーライド)と--values file.yaml(ファイルからオーバーライド)がよく出題されます。helm upgradeとhelm rollbackも出題されます。--setのオーバーライドは--valuesファイルよりも優先されることを覚えましょう。
3. Kustomize
Kustomizeはkubectlに組み込まれたツールで、テンプレートやパラメータなしでKubernetesマニフェストをカスタマイズできます。オーバーレイパターンを使用します。
Kustomize Structure:
base/
├── kustomization.yaml # Base kustomization
├── deployment.yaml
└── service.yaml
overlays/
├── development/
│ ├── kustomization.yaml # Patches for dev
│ └── replica-patch.yaml
└── production/
├── kustomization.yaml # Patches for prod
└── replica-patch.yaml
# base/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- deployment.yaml
- service.yaml
# overlays/production/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
bases:
- ../../base
patches:
- path: replica-patch.yaml
images:
- name: myapp
newTag: "2.0"
# Kustomizeで適用
kubectl apply -k overlays/production/
# レンダリング結果をプレビュー
kubectl kustomize overlays/production/
4. Helm vs Kustomize
| 比較項目 | Helm | Kustomize |
|---|---|---|
| アプローチ | テンプレートベース(Goテンプレート) | オーバーレイ/パッチ(プレーンYAML) |
| 学習コスト | 高め(テンプレート構文) | 低め(YAMLパッチ) |
| パッケージ管理 | あり(charts、repos、バージョニング) | なし |
| Release履歴 | あり(upgrade/rollback) | 組み込み機能なし |
| kubectl組み込み | なし(別バイナリ) | あり(kubectl apply -k) |
| 最適な用途 | アプリの配布 | 環境別のカスタマイズ |
5. チートシート
| タスク | コマンド |
|---|---|
| カスタム値でChartをインストール | helm install rel chart --values f.yaml |
| 値を1つオーバーライド | helm install rel chart --set key=val |
| Helm releaseをロールバック | helm rollback release-name 2 |
| Kustomizeオーバーレイを適用 | kubectl apply -k overlays/prod/ |
| Kustomize出力をプレビュー | kubectl kustomize overlays/prod/ |
6. 練習問題
Q1: "stable"リポジトリからHelmチャートをレプリカ数5でデプロイする必要があります。正しいコマンドはどれですか?
- A)
helm deploy myapp stable/nginx --replicas=5 - B)
helm install myapp stable/nginx --set replicaCount=5✓ - C)
helm install myapp stable/nginx -e replicaCount=5 - D)
helm apply myapp stable/nginx --values replicaCount=5
解説: helm installでは--setフラグで値をオーバーライドします。構文は--set key=valueです。正確なキー名(replicaCount)はチャートのvalues.yamlに依存しますが、--setがインライン値オーバーライドの正しいフラグです。
Q2: チームがKustomizeのbase設定とproduction/stagingオーバーレイを使用しています。productionオーバーレイを適用するコマンドはどれですか?
- A)
kubectl apply -f overlays/production/ - B)
kubectl kustomize overlays/production/ | kubectl apply -f - - C)
kubectl apply -k overlays/production/✓ - D)
kustomize apply overlays/production/
解説: kubectl apply -k(-fではなく-k)がkustomizationディレクトリを適用する組み込みの方法です。選択肢Bも動作しますがより冗長です。-kフラグはkubectlにディレクトリをKustomize設定として処理するよう指示します。
Q3: Helmのアップグレード後にバグが発生し、前の正常な状態に戻す必要があります。正しいアプローチはどれですか?
- A) kubectl rollout undo deployment/myapp
- B) helm install --replace myapp stable/nginx
- C) helm rollback myapp ✓
- D) helm upgrade myapp --version=previous
解説: helm rollbackはreleaseを前のリビジョンに戻します。リビジョン番号を指定しない場合、前のリビジョンにロールバックします。失敗したアップグレードによる変更(ConfigMaps、Secrets、チャートが管理するその他リソースを含む)をすべて元に戻します。