前回の記事では Helmfile に入門した!Helm Chart を宣言的に管理することができて便利だった💡
引き続き Helmfile を試していて,GitHub に載っている「The Helmfile Best Practices Guide」を読んでいたら「テンプレート機能」が紹介されていた.Helmfile で多くの Helm Chart を管理していくと,徐々に helmfile.yaml が長くなる可能性がある.そこで「テンプレート機能」を使って共通化をすることで可読性を高くシンプルに記述できるようになる.さっそく試していく!
「テンプレート機能」を使わずに Helmfile を記述する
まずは「テンプレート機能」を使わずに Helmfile を記述する.今回はサンプルとして bitnami/metrics-server と bitnami/nginx-ingress-controller を Helm Chart でセットアップする.
ディレクトリ構成は以下とする.helmfile.yaml と環境ごとに values.yaml を用意する.
$ tree .
.
├── helmfile.yaml
├── metrics-server
│ ├── values-development.yaml
│ ├── values-production.yaml
│ └── values-staging.yaml
└── nginx-ingress-controller
├── values-development.yaml
├── values-production.yaml
└── values-staging.yaml
2 directories, 7 files
helmfile.yaml を以下のように記述する.複雑な記述はなく bitnami/metrics-server と bitnami/nginx-ingress-controller を含めている.
environments: development: staging: production: releases: - name: metrics-server chart: bitnami/metrics-server namespace: kube-system version: 5.10.0 values: - metrics-server/values-{{`{{ .Environment.Name }}`}}.yaml - name: nginx-ingress-controller chart: bitnami/nginx-ingress-controller namespace: kube-system version: 7.6.21 values: - nginx-ingress-controller/values-{{`{{ .Environment.Name }}`}}.yaml
実際に helmfile apply コマンドを実行するとうまくセットアップできた.
$ helmfile -e staging apply (中略) UPDATED RELEASES: NAME CHART VERSION metrics-server bitnami/metrics-server 5.10.0 nginx-ingress-controller bitnami/nginx-ingress-controller 7.6.21 $ helmfile delete
「テンプレート機能」を使って Helmfile を書く
今度は「テンプレート機能」を使って Helmfile を記述する.以下のように templates を使って Helm Chart の宣言をテンプレート化できる.今回は chart と namespace と values を含めつつ .Release.Name と .Environment.Name をパラメータとして埋め込むようにしている.そして YAML 自体に実装されているマージ機能 << を使って releases を記述している.
environments: development: staging: production: templates: default: &default chart: bitnami/{{`{{ .Release.Name }}`}} namespace: kube-system values: - "{{`{{ .Release.Name }}`}}/values-{{`{{ .Environment.Name }}`}}.yaml" releases: - name: metrics-server version: 5.10.0 <<: *default - name: nginx-ingress-controller version: 7.6.21 <<: *default
結果は同じく helmfile apply コマンドを実行してセットアップすることができた.
$ helmfile -e staging apply (中略) UPDATED RELEASES: NAME CHART VERSION metrics-server bitnami/metrics-server 5.10.0 nginx-ingress-controller bitnami/nginx-ingress-controller 7.6.21 $ helmfile delete
まとめ
Helmfile で「テンプレート機能」を使うと helmfile.yaml を 共通化して可読性を高くシンプルに記述できるようになる.今回のサンプルでは「18行」→「19行」とむしろ行数が増えてしまったけど,Helm Chart を増やせばメリットが出てくるし,何しろ設定ミスを減らすことにも繋がるため,行数だけでは判断できないと思う.引き続き Helmfile を試していくぞー!