Helm 3.0 - 6 / what is a chart

Page content

Helm 3.0 が GAになったので 色々やってみる。その6

今日のお題はここ Getting Started

チャートの作り方をもう少し。

チャートとは何なのか

私の理解ですが、各種 Kubernetesリソースの テンプレートをまとめた物。

テンプレートなので values.yaml等の設定値を使って テンプレートの tagをレンダリングして Kubernetesクラスタに デプロイされる。

以下の values.yamlがあったとして

db:
  user: dbadmin

ConfigMapのテンプレートがこう

apiVersion: v1
kind: ConfigMap
metadata:
  name: db
data:
  user: "{{ .Values.db.user }}"

これを レンダリングすると {{}} が置換されて以下のような出力を得られる。

apiVersion: v1
kind: ConfigMap
metadata:
  name: db
data:
  user: "dbadmin"

他にも、チャートは 依存関係を持たせる事が出来るので 例えば Web Applicationで mysqlや apache等のチャートをサブチャートとして再利用することが可能だったりとか、色々機能はあるけど基本はこのテンプレート化。これで同じ事を繰り返さずに似て非なる物を作り出す事が出来る様になる。

チャートの構造

helm createで作られる構造は簡単には以下

mychart
├── Chart.yaml
├── charts/
├── templates/
└── values.yaml

Chart.yamlは チャート自身の詳細情報を格納するファイル

chartsディレクトリは 依存関係にあるサブチャートを格納する場所

templatesディレクトリが このチャート自身が作り出す Kubernetesリソースのテンプレートを格納する場所

values.yamlが、テンプレートをレンダリングするためのパラメータを記述するファイル

テンプレートとは

Helmの中では Goのテンプレートエンジンが使われている。

Package template

このテンプレートエンジンでは double mustache {{ }} で括られた範囲が template engine側で処理対象。

先程の例では {{ .Values.db.user }} という形でValuesの値を参照していたが、Values以外にも Built-in Objectとして色々ある。

テンプレートの拡張子

あくまで推奨事項ですが、通常は テンプレートとしては ‘.yaml’ を使う。ただし、テンプレートの中からパーツとして呼び出して使うヘルパテンプレート(partial)は ‘.tpl’ を使う。