はじめに
このガイドのセクションでは、チャートを作成し、最初のテンプレートを追加します。ここで作成したチャートは、ガイドの残りの部分で使用されます。
始めましょう。Helmチャートを簡単に見てみましょう。
チャート
チャートガイドで説明されているように、Helmチャートは次のように構成されています。
mychart/
Chart.yaml
values.yaml
charts/
templates/
...
templates/
ディレクトリにはテンプレートファイルがあります。Helmがチャートを評価すると、templates/
ディレクトリ内のすべてのファイルがテンプレートレンダリングエンジンに送信されます。次に、これらのテンプレートの結果を収集し、Kubernetesに送信します。
values.yaml
ファイルもテンプレートにとって重要です。このファイルには、チャートのデフォルト値が含まれています。これらの値は、helm install
またはhelm upgrade
時にユーザーによって上書きされる場合があります。
Chart.yaml
ファイルには、チャートの説明が含まれています。テンプレート内からアクセスできます。
charts/
ディレクトリには、他のチャート(サブチャートと呼びます)が含まれている場合があります。このガイドの後半では、テンプレートレンダリングにおけるそれらの動作について説明します。
スターターチャート
このガイドでは、mychart
という単純なチャートを作成し、チャート内にいくつかのテンプレートを作成します。
$ helm create mychart
Creating mychart
mychart/templates/
の簡単な概要
mychart/templates/
ディレクトリを見ると、既にいくつかのファイルがあることに気付くでしょう。
NOTES.txt
:チャートの「ヘルプテキスト」。helm install
の実行時にユーザーに表示されます。deployment.yaml
:Kubernetes デプロイメントを作成するための基本的なマニフェストservice.yaml
:デプロイメントのサービスエンドポイントを作成するための基本的なマニフェスト_helpers.tpl
:チャート全体で再利用できるテンプレートヘルパーを配置する場所
そして、私たちが行うことは…すべて削除することです!そうすれば、最初からチュートリアルを進めることができます。実際には、後で独自のNOTES.txt
と_helpers.tpl
を作成します。
$ rm -rf mychart/templates/*
本番環境のチャートを作成する場合は、これらのチャートの基本バージョンがあると非常に役立ちます。そのため、日々のチャート作成では、削除したくないでしょう。
最初のテンプレート
最初に作成するテンプレートはConfigMap
です。Kubernetesでは、ConfigMapは構成データを保存するためのオブジェクトです。ポッドなどの他のものは、ConfigMapのデータにアクセスできます。
ConfigMapは基本的なリソースであるため、優れた出発点となります。
mychart/templates/configmap.yaml
というファイルを作成することから始めましょう。
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-configmap
data:
myvalue: "Hello World"
ヒント:テンプレート名は厳格な命名パターンに従いません。ただし、YAMLファイルには.yaml
、ヘルパーには.tpl
の拡張子を使用することをお勧めします。
上記のYAMLファイルは、最小限の必要なフィールドを持つ、基本的なConfigMapです。このファイルがmychart/templates/
ディレクトリにあるという事実により、テンプレートエンジンに送信されます。
このようなプレーンなYAMLファイルをmychart/templates/
ディレクトリに配置しても問題ありません。Helmがこのテンプレートを読み取ると、そのままKubernetesに送信されます。
この単純なテンプレートを使用すると、インストール可能なチャートができました。そして、このようにインストールできます。
$ helm install full-coral ./mychart
NAME: full-coral
LAST DEPLOYED: Tue Nov 1 17:36:01 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None
Helmを使用して、リリースを取得し、ロードされた実際のテンプレートを確認できます。
$ helm get manifest full-coral
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: mychart-configmap
data:
myvalue: "Hello World"
helm get manifest
コマンドは、リリース名(full-coral
)を受け取り、サーバーにアップロードされたすべてのKubernetesリソースを出力します。各ファイルは、YAMLドキュメントの開始を示す---
で始まり、その後、このYAMLドキュメントを生成したテンプレートファイルを知らせる自動生成されたコメント行が続きます。
そこから、YAMLデータがconfigmap.yaml
ファイルに入力したものとまったく同じであることがわかります。
これで、リリースをアンインストールできます:helm uninstall full-coral
。
単純なテンプレート呼び出しの追加
リソースにname:
をハードコーディングすることは、通常、悪い習慣と見なされます。名前はリリースに固有である必要があります。そのため、リリース名を使用して名前フィールドを生成したい場合があります。
ヒント:DNSシステムの制限により、name:
フィールドは63文字に制限されています。そのため、リリース名は53文字に制限されています。Kubernetes 1.3以前は24文字(したがって14文字の名前)に制限されていました。
configmap.yaml
をそれに応じて変更しましょう。
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Release.Name }}-configmap
data:
myvalue: "Hello World"
大きな変更は、name:
フィールドの値で、現在は{{ .Release.Name }}-configmap
になっています。
テンプレートディレクティブは、
{{
と}}
ブロックで囲まれています。
テンプレートディレクティブ{{ .Release.Name }}
は、リリース名をテンプレートに挿入します。テンプレートに渡される値は、名前空間オブジェクトと考えることができます。ドット(.
)は、各名前空間要素を区切ります。
Release
の前にあるドットは、このスコープの最上位の名前空間から始まることを示しています(スコープについては後で説明します)。そのため、.Release.Name
を「最上位の名前空間から始め、Release
オブジェクトを見つけ、その中からName
というオブジェクトを探します」と解釈できます。
Release
オブジェクトはHelmの組み込みオブジェクトの1つであり、後で詳しく説明します。しかし今のところ、これはライブラリが私たちのリリースに割り当てるリリース名を表示すると言うだけで十分です。
これで、リソースをインストールすると、このテンプレートディレクティブの使用結果がすぐに表示されます。
$ helm install clunky-serval ./mychart
NAME: clunky-serval
LAST DEPLOYED: Tue Nov 1 17:45:37 2016
NAMESPACE: default
STATUS: DEPLOYED
REVISION: 1
TEST SUITE: None
helm get manifest clunky-serval
を実行して、生成されたYAML全体を確認できます。
Kubernetes内のConfigMapの名前が、以前のmychart-configmap
ではなくclunky-serval-configmap
であることに注意してください。
現時点では、テンプレートを最も基本的な形で見てきました。つまり、{{
と}}
に埋め込まれたテンプレートディレクティブを持つYAMLファイルです。次の部分では、テンプレートを詳しく見ていきます。しかし、先に進む前に、テンプレートの作成を高速化できる簡単なトリックが1つあります。テンプレートのレンダリングをテストしたいが、実際には何もインストールしたくない場合は、helm install --debug --dry-run goodly-guppy ./mychart
を使用できます。これにより、テンプレートがレンダリングされます。しかし、チャートをインストールする代わりに、レンダリングされたテンプレートが返され、出力を確認できます。
$ helm install --debug --dry-run goodly-guppy ./mychart
install.go:149: [debug] Original chart version: ""
install.go:166: [debug] CHART PATH: /Users/ninja/mychart
NAME: goodly-guppy
LAST DEPLOYED: Thu Dec 26 17:24:13 2019
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
{}
COMPUTED VALUES:
affinity: {}
fullnameOverride: ""
image:
pullPolicy: IfNotPresent
repository: nginx
imagePullSecrets: []
ingress:
annotations: {}
enabled: false
hosts:
- host: chart-example.local
paths: []
tls: []
nameOverride: ""
nodeSelector: {}
podSecurityContext: {}
replicaCount: 1
resources: {}
securityContext: {}
service:
port: 80
type: ClusterIP
serviceAccount:
create: true
name: null
tolerations: []
HOOKS:
MANIFEST:
---
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: goodly-guppy-configmap
data:
myvalue: "Hello World"
--dry-run
を使用すると、コードを簡単にテストできますが、Kubernetes自体が生成するテンプレートを受け入れるとは限りません。--dry-run
が機能するからといって、チャートがインストールされると仮定しないでください。
チャートテンプレートガイドでは、ここで定義した基本的なチャートを使用して、Helmテンプレート言語を詳しく調べます。そして、組み込みオブジェクトから始めましょう。