CTS-KB

Helm入門:Chartを確認して安全に手動導入する

⏱ 約 3 分で読めます
#Kubernetes#GKE#Helm#Chart#パッケージ管理

Helm は、複数のKubernetesマニフェストを1つのパッケージとして導入・更新するツールです。External Secrets Operator(ESO)のように、CRD、ServiceAccount、RBAC、Deploymentをまとめて導入するソフトウェアで特に役立ちます。

本記事も手作業で実行します。自動デプロイやCI/CDは扱いません。

Helmの4用語

用語意味
ChartKubernetesリソースのテンプレート一式
RepositoryChartの配布場所
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がなければ作成し、あれば更新します。スクリプトでなく手作業でも、毎回 installupgrade を判断せず同じ形式で実行できます。

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 templatehelm get manifest で対象を確認します。

Helmが必要な場面、不要な場面

  • 多数の関連リソース、CRD、RBACを配布するOSS:Helmが有効
  • 環境差分を持つ再利用パッケージ:Helmが有効
  • 自作アプリのDeploymentとServiceが数個だけ:素のYAMLでも十分

すべてをHelm化することが目的ではありません。生成結果を理解できる範囲で使います。

参考資料