このベストプラクティスガイドでは、値の使い方について説明します。このガイドでは、チャートの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: falsefoo: "false"と同じではありません。 foo: 12345678のような大きな整数は、場合によっては科学表記法に変換されます。

型変換エラーを回避する最も簡単な方法は、文字列については明示的に、それ以外のすべてについては暗黙的にすることです。つまり、簡単に言うと、*すべての文字列を引用符で囲みます*。

多くの場合、整数のキャストの問題を回避するために、整数も文字列として格納し、テンプレートで{{ int $value }}を使用して文字列から整数に変換することが有利です。

ほとんどの場合、明示的な型タグは尊重されるため、foo: !!string 12341234を文字列として扱います。*ただし*、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で抽出するのが容易になり、ドキュメントツールがドキュメント文字列とそれらが記述するパラメータを確実に関連付けることができます.