【Helm】チャートを作成してみる
はじめに
Helmを使って簡単なチャートを作成してみます。
Helmとは何か、基本的な知識と簡単な使い方については下記で解説しています。
【Helm入門】Helm使ってみる
はじめに これからHelmを使ってみたい人に向けて、**Helmとはどんなものなのか**ざっくり
Helmのチャート
Helmのチャートとは、Kubernetes上でアプリケーションを実行するためのリソースが定義されたパッケージです。
Helmチャートは主に以下のような構成で管理されます。(他にもファイルがありますが、今回は省略しています)
1.
2├── Chart.yaml
3├── templates
4│ ├── deployment.yaml
5│ └── service.yaml
6└── values.yaml
Charts
Explains the chart format, and provides basic guidance for building charts with Helm.
それぞれのファイル・ディレクトリの役割は以下のようになります。
Chart.yaml
: チャートに関する基本情報(チャート名やバージョンなど)values.yaml
: チャートで設定可能な値templates/
: テンプレートとなるKubernetesのマニフェスト
valus.yamlは、自由な形式のYAMLファイルになります。ユーザーがチャートで設定可能にしたい値を自由に選択できるようになっています。
チャートの作成
まずは、helm
コマンドでチャートのディレクトリを作成します。
1helm create mychart
以下のようなファイルが作成されます。
1.
2├── Chart.yaml
3├── charts
4├── templates
5│ ├── NOTES.txt
6│ ├── _helpers.tpl
7│ ├── deployment.yaml
8│ ├── hpa.yaml
9│ ├── ingress.yaml
10│ ├── service.yaml
11│ ├── serviceaccount.yaml
12│ └── tests
13│ └── test-connection.yaml
14└── values.yaml
今回はChart.yaml
とtemplates/deployment.yaml
、values.yaml
しか使わないので、それ以外は削除してしまいます。
1.
2├── Chart.yaml
3├── templates
4│ └── deployment.yaml
5└── values.yaml
テンプレートの作成
まずはテンプレートとなるtemplates/deployment.yaml
を作成します。
内容としてはシンプルなNginxのコンテナです。
テンプレートは以下になります。{{ .Values.metadata.name }}
と{{ .Values.replica }}
がvalues.yaml
で設定される値になります。
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 name: {{ .Values.metadata.name }}
5spec:
6 replicas: {{ .Values.replica }}
7 selector:
8 matchLabels:
9 app: mychart
10 template:
11 metadata:
12 labels:
13 app: mychart
14 spec:
15 containers:
16 - name: ntginx
17 image: nginx:latest
values.yamlの作成
次にvalues.yaml
を作成します。
形式は自由ですが、テンプレートで{{ .Values.metadata.name }}
と{{ .Values.replica }}
としているので、以下のようになります。
1metadata:
2 name: mychart-from-value
3replica: 2
チャートをインストールしてみる
helm install --dry-run --debug
で適用するマニフェストが確認できます。
1❯ helm install --dry-run --debug ./mychart --generate-name
2NAME: mychart-1639404725
3LAST DEPLOYED: Mon Dec 13 23:12:07 2021
4NAMESPACE: default
5STATUS: pending-install
6REVISION: 1
7TEST SUITE: None
8USER-SUPPLIED VALUES:
9{}
10
11COMPUTED VALUES:
12metadata:
13 name: mychart-from-value
14replica: 2
15
16HOOKS:
17MANIFEST:
18---
19# Source: mychart/templates/deployment.yaml
20apiVersion: apps/v1
21kind: Deployment
22metadata:
23 name: mychart-from-value
24spec:
25 replicas: 2
26 selector:
27 matchLabels:
28 app: mychart
29 template:
30 metadata:
31 labels:
32 app: mychart
33 spec:
34 containers:
35 - name: ntginx
36 image: nginx:latest
values.yaml
の値が設定されているのがわかります。
実際にチャートをインストールしてみます。
1helm install ./mychart --generate-name
リリースが確認できます。
1❯ helm list
2NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION
3mychart-1639404888 default 1 2021-12-13 23:14:50.93399 +0900 JST deployed mychart-0.1.0 1.16.0
下記でも適用したマニフェストが確認できます。
1helm get manifest mychart-1639404888