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このコマンドで雛形が自動生成されるので、まずはここからカスタマイズしてみるのが一番早いです。
