値
このベストプラクティスガイドでは、値の使い方について説明します。このガイドでは、チャートのvalues.yaml
ファイルの設計に焦点を当て、値の構成と使用方法に関する推奨事項を提供します。
命名規則
変数名は小文字で始まり、単語はキャメルケースで区切る必要があります
正しい
chicken: true
chickenNoodleSoup: true
誤り
Chicken: true # initial caps may conflict with built-ins
chicken-noodle-soup: true # do not use hyphens in the name
Helmの組み込み変数はすべて大文字で始まるため、ユーザー定義の値(.Release.Name
、.Capabilities.KubeVersion
)と容易に区別できることに注意してください。
フラットな値またはネストされた値
YAMLは柔軟な形式であり、値は深くネストしたり、フラットにしたりできます。
ネストされた
server:
name: nginx
port: 80
フラットな
serverName: nginx
serverPort: 80
ほとんどの場合、ネストされた値よりもフラットな値の方が推奨されます。これは、テンプレート開発者とユーザーにとってよりシンプルだからです。
最適な安全性を確保するために、ネストされた値はすべてのレベルでチェックする必要があります
{{ if .Values.server }}
{{ default "none" .Values.server.name }}
{{ end }}
ネストのすべてのレイヤーに対して、存在チェックを行う必要があります。ただし、フラットな構成では、このようなチェックを省略できるため、テンプレートが読みやすく使いやすくなります。
{{ default "none" .Values.serverName }}
多数の関連変数があり、そのうち少なくとも1つが必須である場合は、読みやすさを向上させるためにネストされた値を使用できます。
型を明確にする
YAMLの型強制ルールは、直観に反する場合があります。たとえば、foo: false
はfoo: "false"
と同じではありません。 foo: 12345678
のような大きな整数は、場合によっては科学表記法に変換されます。
型変換エラーを回避する最も簡単な方法は、文字列については明示的に、それ以外のすべてについては暗黙的にすることです。つまり、簡単に言うと、*すべての文字列を引用符で囲みます*。
多くの場合、整数のキャストの問題を回避するために、整数も文字列として格納し、テンプレートで{{ int $value }}
を使用して文字列から整数に変換することが有利です。
ほとんどの場合、明示的な型タグは尊重されるため、foo: !!string 1234
は1234
を文字列として扱います。*ただし*、YAMLパーサーはタグを使用するため、1回の解析後に型データは失われます。
ユーザーが値をどのように使用するかを検討する
値には3つの潜在的なソースがあります
- チャートの
values.yaml
ファイル helm install -f
またはhelm upgrade -f
によって提供される値ファイルhelm install
またはhelm upgrade
の--set
または--set-string
フラグに渡される値
値の構造を設計する際には、チャートのユーザーが-f
フラグまたは--set
オプションを使用して値をオーバーライドする可能性があることに注意してください。
--set
の表現力はより制限されているため、values.yaml
ファイルを作成するための最初のガイドラインは、***--setからオーバーライドしやすいようにする***ことです。
このため、多くの場合、マップを使用して値ファイルを構成する方が適切です。
--set
での使用が難しい
servers:
- name: foo
port: 80
- name: bar
port: 81
上記は、Helm <=2.4
では--set
で表現できません。 Helm 2.5では、fooのポートへのアクセスは--set servers[0].port=80
です。ユーザーが理解するのが難しいだけでなく、後でservers
の順序が変更された場合にエラーが発生しやすくなります。
使いやすい
servers:
foo:
port: 80
bar:
port: 81
fooのポートへのアクセスははるかに明白です:--set servers.foo.port=80
。
values.yaml
を文書化する
values.yaml
で定義されているすべてのプロパティは、文書化する必要があります。ドキュメント文字列は、それが記述するプロパティの名前で始まり、少なくとも1文の説明を提供する必要があります.
誤り
# the host name for the webserver
serverHost: example
serverPort: 9191
正しい
# serverHost is the host name for the webserver
serverHost: example
# serverPort is the HTTP listener port for the webserver
serverPort: 9191
各コメントを、それが文書化するパラメータの名前で始めることで、ドキュメントをgrepで抽出するのが容易になり、ドキュメントツールがドキュメント文字列とそれらが記述するパラメータを確実に関連付けることができます.