Helmを使ってアプリケーションをデプロイするとき、Chart(チャート)という単位でまとめて管理します。
Chartは「Kubernetesリソース(YAML)をパラメータ化して、使い回しできるようにしたテンプレート群」とも言えます。
具体的には、以下のようなフォルダ構造になります。
mychart/
├── Chart.yaml
├── values.yaml
├── charts/
├── templates/
│ ├── deployment.yaml
│ ├── service.yaml
│ └── _helpers.tpl
└── README.md(任意)
それぞれ何を意味しているのか、詳しく見ていきましょう。
📘 Chart.yaml
Chartのメタ情報が書かれたファイルです。名前・バージョン・説明・依存チャートなどを定義します。
apiVersion: v2
name: mychart
description: A sample Helm chart for Kubernetes
version: 0.1.0
appVersion: "1.0.0"
name
: チャート名(例:mychart)version
: チャート自体のバージョン(Helm用)appVersion
: アプリケーションのバージョン(Dockerイメージのタグなど)
🧾 values.yaml
ここにアプリケーションの**設定値(パラメータ)**を書きます。
テンプレートファイル内で .Values.xxx
という形で参照されます。
replicaCount: 2
image:
repository: nginx
tag: "1.25"
pullPolicy: IfNotPresent
service:
type: ClusterIP
port: 80
この values.yaml
を --values
オプションで上書きすることで、環境ごとの違いに柔軟に対応できます。
🧩 templates/ ディレクトリ
ここに Kubernetes の各種マニフェストを テンプレート化して配置 します。
templates/
├── deployment.yaml # Deploymentリソースのテンプレート
├── service.yaml # Serviceリソースのテンプレート
└── _helpers.tpl # 関数や共通変数の定義
たとえば、 deployment.yaml
はこんなふうに書けます:
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Release.Name }}-deployment
spec:
replicas: {{ .Values.replicaCount }}
template:
spec:
containers:
- name: app
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
このように、 {{ ... }}
で Goテンプレートの構文を使い、柔軟な展開が可能です。
🧠 _helpers.tpl(任意)
共通関数や命名規則をまとめて定義できます。
例:
{{- define "mychart.fullname" -}}
{{ .Release.Name }}-{{ .Chart.Name }}
{{- end -}}
テンプレート側ではこのように呼び出せます:
metadata:
name: {{ include "mychart.fullname" . }}
📦 charts/ ディレクトリ(依存チャート)
もしこのチャートが、他のチャート(例:RedisやMySQL)に依存している場合は、ここに依存チャートが配置されます。
依存関係は Chart.yaml
に書いて管理できます:
dependencies:
- name: mysql
version: 9.3.0
repository: https://charts.bitnami.com/bitnami
✅ まとめ:Chart構成の全体像
ファイル | 役割 |
---|---|
Chart.yaml | チャートの名前・バージョンなど |
values.yaml | 設定値(パラメータ)のデフォルト |
templates/ | Kubernetesリソースのテンプレート |
charts/ | 依存チャート |
_helpers.tpl | 再利用用のテンプレート関数 |
🛠️ ハンズオンしてみたい方へ
helm create mychart
このコマンドで雛形が自動生成されるので、まずはここからカスタマイズしてみるのが一番早いです。