[初学者向け]Helmを学ぼう!~Templateを深く深く知ろう2~

こんにちは。KOUKIです。

とある企業でWebエンジニアをやっています。

前回は、HelmのTemplateについて学習をしました。

今回も引き続き、HelmのTemplateについて深く学びましょう!

検証環境

  • helm v3
  • mac
  • minikube

Kubernetesに関しては、こちらも参考にしてください。

条件分岐

Go言語やその他のプログラミング言語のように、HelmもIf文の条件分岐が可能です。

例えば、以前作成したmyappフォルダ内のserviceaccount.yamlファイルを開いてみましょう。

先頭の「{{- if .Values.serviceAccount.create -}}」ですが、これはvalues.yamlのserviceAccount.create↓を見てます。

ここではtrueが定義されているので、serviceAccountは作成されます。

例えば、今の状態でデバッキングしてみましょう。

現状は、test-myappというserviceAccountが作成されるようです。

それでは、falseに変更してデバッキングしてみましょう。

serviceAccountの項目がなくなりました!

これは直感的なので、わかりやすいと思います。

If文を自分で定義

今度は、自分でIf文を定義してみましょう。

values.yamlの以下の値を見て下さい。

service.typeにClusterIPが指定されています。

これを条件分岐を使って、ロジックを書いてみましょう。NOTES.txtを開いて下さい。

定番のif-else if-else文ですね。デバッキングしてみましょう。

OKですね。NodePortやその他の値に変えると条件分岐で別のメッセージが表示されます。

以下は、NodePortに変更した時の例です。

ちなみに「eq」は「==」の意味です。「ne」にすると「!=」の意味になります。

その他にも色々あります

プログラムと違うのはeqやneなどが、ifの直ぐ後に来ることですね。

例えば、こんな感じです。

書き方が若干違うので、テンプレートを作り込みすぎると保守が大変そうだなと思います。

Validation – fail

Validationと呼んでいいのかわかりませんが、failは便利そうです。

NOTES.txtに以下を書き込みます。

ご覧の通り、デバッキングが強制終了しました。

絶対設定しておきたい値とか逆に設定しておきたくない値とかを定義するときに便利ですね。

ループを学ぼう

ど定番と言えるループを学びましょう!

values.yamlのserviceブロックに以下のプロパティを追加します。

続いて、service.yamlに下記のプロパティを追加します。

「追加」とコメントを打ったところがそれです。

この状態でデバッキングします。

OKですね。こうやって手で一つ一つ実装してもいいのですが、ループを使えばもっと画期的な方法で実装できます。

values.yamlのserviceブロックを下記のように書き換えます。

続いて、service.yamlも書き換えます。

ループを使うには、range構文を利用します。

デバッキングしてみましょう。

OKですね。かなり楽になったことがわかると思います。

Helmのベストプラクティス

Helmを触ってみて、Template(service.yamlなど)は上記のように構文を活用しつつ中身を固定化させ、values.yamlの定義で内容(Portの増減など)を書き換えていく方法がベストかなと思いました。

だからこそ「Template」という名前なんでしょうけども。

–setオプションで設定の上書き

–setオプションを使って動的に変更できます。

書き変わりました。しかし、他のportの設定が消えましたね。。

–setオプションは完全に上書きしてしまうようですね。

index構文

先ほど見た通り、portsはオブジェクトであり複数の値を保持しています。

この値の一つを選択し、パラメーターとして設定したい場合は、「index」を使います。

services.yamlのmetadataにannotationsを追加しましょう。

デバッキングしてみましょう。

map型で出てきましたね。修正しましょう。

numberは、portsに指定したプロパティです。

デバッキングしましょう。

変数の定義

変数も定義できます。

使いやすいですね。

range文とif文のコラボレーション

rangeとifを掛け合わせてみましょう。

_helpersファイル

最後に、Chartを作成するときに一緒に生成される_helpers.tplファイルも知っておいた方が良いです。

内容を見ると、Chartで共通に使うものを定義しているみたいですね。

例えばですが「{{- define “myapp.name” -}}」と定義されてます。これをNOTES.txtから読み込んでみます。

前回追加したfailをコメントアウトし、デバッキングしてみましょう。

_helperに定義しておけば、どこでも自由に使えるというわけですね。

それを確かめるべく、自分でも値を設定してみます。

_helperに以下の文言を追加して下さい。

NOTES.txtにも追加します。

デバッキングをします。

OKですね。言い忘れてましたが、_helperの値を読み込むときは「include」構文を使うみたいです。

次回

次回は、Helmの依存関係、ライブラリ化、レポジトリなどについて学びましょう

Helmまとめ

コメントを残す