はじめに
Helmを使って簡単なチャートを作成してみます。
Helmとは何か、基本的な知識と簡単な使い方については下記で解説しています。

Helmのチャート
Helmのチャートとは、Kubernetes上でアプリケーションを実行するためのリソースが定義されたパッケージです。
Helmチャートは主に以下のような構成で管理されます。(他にもファイルがありますが、今回は省略しています)
.
├── Chart.yaml
├── templates
│ ├── deployment.yaml
│ └── service.yaml
└── values.yaml
それぞれのファイル・ディレクトリの役割は以下のようになります。
Chart.yaml
: チャートに関する基本情報(チャート名やバージョンなど)values.yaml
: チャートで設定可能な値templates/
: テンプレートとなるKubernetesのマニフェスト
valus.yamlは、自由な形式のYAMLファイルになります。ユーザーがチャートで設定可能にしたい値を自由に選択できるようになっています。
チャートの作成
まずは、helm
コマンドでチャートのディレクトリを作成します。
helm create mychart
以下のようなファイルが作成されます。
.
├── Chart.yaml
├── charts
├── templates
│ ├── NOTES.txt
│ ├── _helpers.tpl
│ ├── deployment.yaml
│ ├── hpa.yaml
│ ├── ingress.yaml
│ ├── service.yaml
│ ├── serviceaccount.yaml
│ └── tests
│ └── test-connection.yaml
└── values.yaml
今回はChart.yaml
とtemplates/deployment.yaml
、values.yaml
しか使わないので、それ以外は削除してしまいます。
.
├── Chart.yaml
├── templates
│ └── deployment.yaml
└── values.yaml
テンプレートの作成
まずはテンプレートとなるtemplates/deployment.yaml
を作成します。
内容としてはシンプルなNginxのコンテナです。
テンプレートは以下になります。{{ .Values.metadata.name }}
と{{ .Values.replica }}
がvalues.yaml
で設定される値になります。
apiVersion: apps/v1
kind: Deployment
metadata:
name: {{ .Values.metadata.name }}
spec:
replicas: {{ .Values.replica }}
selector:
matchLabels:
app: mychart
template:
metadata:
labels:
app: mychart
spec:
containers:
- name: ntginx
image: nginx:latest
values.yamlの作成
次にvalues.yaml
を作成します。
形式は自由ですが、テンプレートで{{ .Values.metadata.name }}
と{{ .Values.replica }}
としているので、以下のようになります。
metadata:
name: mychart-from-value
replica: 2
チャートをインストールしてみる
helm install --dry-run --debug
で適用するマニフェストが確認できます。
❯ helm install --dry-run --debug ./mychart --generate-name
NAME: mychart-1639404725
LAST DEPLOYED: Mon Dec 13 23:12:07 2021
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
metadata:
name: mychart-from-value
replica: 2
HOOKS:
MANIFEST:
---
# Source: mychart/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: mychart-from-value
spec:
replicas: 2
selector:
matchLabels:
app: mychart
template:
metadata:
labels:
app: mychart
spec:
containers:
- name: ntginx
image: nginx:latest
values.yaml
の値が設定されているのがわかります。
実際にチャートをインストールしてみます。
helm install ./mychart --generate-name
リリースが確認できます。
❯ helm list
NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
mychart-1639404888 default 1 2021-12-13 23:14:50.93399 +0900 JST deployed mychart-0.1.0 1.16.0
下記でも適用したマニフェストが確認できます。
helm get manifest mychart-1639404888