Helm は、複数のKubernetesマニフェストを1つのパッケージとして導入・更新するツールです。External Secrets Operator(ESO)のように、CRD、ServiceAccount、RBAC、Deploymentをまとめて導入するソフトウェアで特に役立ちます。
本記事も手作業で実行します。自動デプロイやCI/CDは扱いません。
Helmの4用語
| 用語 | 意味 |
|---|---|
| Chart | Kubernetesリソースのテンプレート一式 |
| Repository | Chartの配布場所 |
| values | テンプレートへ与える設定値 |
| Release | クラスタへ導入されたChartの1インスタンス |
同じChartでも、Release名とNamespaceを分ければ複数導入できます。反対に同じReleaseへ upgrade すれば、履歴を持った更新になります。
インストールと接続先確認
Helmは公式インストール手順またはOSのパッケージ管理を使います。
helm version
kubectl config current-context
kubectl config view --minify
Helmは現在のkubeconfigを使ってクラスタへ変更を加えます。helm install の前にcontextとNamespaceを必ず確認します。
ESOのChartを例に確認する
helm repo add external-secrets https://charts.external-secrets.io
helm repo update
helm search repo external-secrets/external-secrets --versions
いきなりインストールせず、Chart情報と既定値を確認します。
helm show chart external-secrets/external-secrets
helm show values external-secrets/external-secrets
運用ではChartバージョンを確認し、採用版を明示します。YOUR_CHART_VERSION は、検証して決めたバージョンへ置き換えます。
valuesファイルは秘密値を置く場所ではない
# eso-values.yaml
installCRDs: true
replicaCount: 2
serviceAccount:
create: true
name: external-secrets
valuesファイルは環境差分を管理するのに適しますが、通常のGit管理下へ秘密値を書いてよいわけではありません。Secret Managerの秘密値をvaluesへコピーする運用は避けます。
生成されるマニフェストを先に見る
helm template external-secrets external-secrets/external-secrets \
--namespace external-secrets \
--version YOUR_CHART_VERSION \
--values eso-values.yaml
確認点は次のとおりです。
- cluster-wideなClusterRoleやCRDを作るか
- 作成されるServiceAccountは何か
- コンテナイメージとタグは何か
- requests・limits、レプリカ数、Probeは適切か
- webhookや外部通信があるか
Helmは信頼境界を消しません。Chartはクラスタへ適用するコードとしてレビューします。
upgrade —installで導入する
kubectl create namespace external-secrets
helm upgrade --install external-secrets external-secrets/external-secrets \
--namespace external-secrets \
--version YOUR_CHART_VERSION \
--values eso-values.yaml \
--wait \
--timeout 10m
upgrade --install はReleaseがなければ作成し、あれば更新します。スクリプトでなく手作業でも、毎回 install と upgrade を判断せず同じ形式で実行できます。
helm list -n external-secrets
helm status external-secrets -n external-secrets
helm get values external-secrets -n external-secrets
helm history external-secrets -n external-secrets
kubectl get pods -n external-secrets
Helmが成功しても、PodのReady、イベント、CRDの成立まで確認します。
更新とロールバック
更新前に新しいバージョンの変更点とvalues差分を確認します。
helm upgrade external-secrets external-secrets/external-secrets \
--namespace external-secrets \
--version YOUR_NEW_CHART_VERSION \
--values eso-values.yaml \
--wait \
--timeout 10m
helm history external-secrets -n external-secrets
helm rollback external-secrets YOUR_REVISION -n external-secrets --wait
CRDのスキーマ変更や、オペレーターが作成した外部リソースは、Releaseロールバックだけで完全に元へ戻らない場合があります。事前にChartのアップグレード手順を読みます。
uninstallは削除範囲を確認する
helm uninstall external-secrets -n external-secrets
このコマンドは例示であり、既存環境に安易に実行しません。CRD、Custom Resource、生成済みSecretが残るか消えるかはChartとKubernetesの所有関係によって異なります。helm template と helm get manifest で対象を確認します。
Helmが必要な場面、不要な場面
- 多数の関連リソース、CRD、RBACを配布するOSS:Helmが有効
- 環境差分を持つ再利用パッケージ:Helmが有効
- 自作アプリのDeploymentとServiceが数個だけ:素のYAMLでも十分
すべてをHelm化することが目的ではありません。生成結果を理解できる範囲で使います。