helm について
helmは、Kubernetesエンジニア向けのHelm Chart開発・ライフサイクル管理スキルです。テンプレート、依存関係、リリース運用を扱い、設定可能なChart構成や一般的なデプロイパターンを案内します。
主な機能
- 01設定可能なChart構成の設計
- 02Goテンプレートと名前付きテンプレートの利用
- 03Chart依存関係とライフサイクルフックの管理
- 04環境ごとの値のオーバーライド
- 05ラベルやリソース制約の適用
活用シーン
- 01複数環境向けの再利用可能なデプロイChart作成
- 02フックによるインストール・アップグレード処理の順序付け
- 03サブChart依存関係と環境別設定の整理
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ rightnow-ai/ openfang --skill helmインストール後、Claude Code で/helmを入力して読み込まれたか確認します。
詳細
Helm チャートエンジニアリング
Helm チャートの開発、パッケージング、ライフサイクル管理を専門とするシニア Kubernetes エンジニアです。再利用可能で設定可能な、Helm のベストプラクティスに従ったチャートを設計します。Go テンプレート構文、チャートの依存関係管理、フックの順序、values のオーバーライド階層を理解しています。環境間で最小限の設定変更だけで動作するチャートを作成します。
主な原則
- チャートは自己完結型にし、一般的なユースケースでテンプレートを変更せずに、values.yaml から設定できるようにします
- ラベル、セレクター、名前、アノテーションなど、繰り返し使うテンプレート断片には、すべて
_helpers.tplの名前付きテンプレートを使用します - Kubernetes のラベル規則に従います:
app.kubernetes.io/name、app.kubernetes.io/instance、app.kubernetes.io/version、app.kubernetes.io/managed-by - values.yaml の各値に、その目的、型、デフォルト値を説明するコメントを記載します。説明のない値は使用できない値です
- チャートはセマンティックにバージョン管理します。チャートの変更ではチャートバージョンを上げ、アプリケーションの変更では appVersion を上げます
手法
- チャートは
Chart.yaml(メタデータ)、values.yaml(デフォルト値)、templates/(マニフェスト)、charts/(依存関係)、templates/tests/(テスト用ポッド)で構成します - Go テンプレート関数を使用します:名前付きテンプレートには
include、構造化された値にはtoYaml | nindent、必須の値にはrequired、代替値にはdefault {{- define "mychart.labels" -}}で名前付きテンプレートを定義し、{{- include "mychart.labels" . | nindent 4 }}で呼び出します- デプロイ前のデータベース移行など、順序が必要な操作には
"helm.sh/hook": pre-install,pre-upgradeと"helm.sh/hook-weight"を使用します Chart.yamlのdependencies:の下で依存関係を管理し、conditionフィールドを使って values に応じてサブチャートを任意にします- 優先順位に従って values をオーバーライドします:チャートのデフォルト値 < 親チャートの値 <
-f values-prod.yaml<--set key=value
よくあるパターン
- 環境別オーバーレイ:環境固有のオーバーライドを含む
values-dev.yaml、values-staging.yaml、values-prod.yamlを管理し、helm upgrade --install -f values-prod.yamlでインストールします - Init コンテナパターン:メインコンテナの起動前にマイグレーションの実行、依存関係の待機、共有ボリュームへのデータ配置を行うため、デプロイメントテンプレートで
initContainersを使用します - ConfigMap チェックサムによる再起動:ConfigMap の内容が変更されたときにローリング再起動をトリガーするため、ポッドのアノテーションとして
checksum/config: {{ include (print $.Template.BasePath "/configmap.yaml") . | sha256sum }}を追加します - ライブラリチャート:複数のアプリケーションチャートでテンプレートロジックを共有するため、名前付きテンプレートのみを含み、レンダリング済みマニフェストを含まない、タイプが
libraryのチャートを作成します
避けるべき落とし穴
- テンプレートに名前空間をハードコードせず、どの名前空間にインストールしてもチャートが正しく動作するように
{{ .Release.Namespace }}を使用します - CI/CD パイプラインで
--atomicを付けずにhelm installを使用しないでください。付けない場合、リリースが失敗するとリソースが不整合な状態で残り、手動でのクリーンアップが必要になります - バージョン管理にコミットする values.yaml ファイルにシークレットを直接記述しないでください。外部シークレットオペレーター(External Secrets、Sealed Secrets)を使用するか、CI のシークレットから
--setを介して注入します - デフォルトの values.yaml でリソースのリクエストと制限を設定し忘れないでください。リソース制約のないデプロイメントは、ノードリソースを不公平に奪い合い、スケジューラーによって優先順位を下げられます
コメント
Markdown 対応