Helmfile でちょっとしたリソースを追加したい

2023/12/11に公開

動機

Helmfile で公式のチャートをインストールしていて,追加で関連リソースを追加したいことがあります。

関連リソースの数が多い,内容が環境によって変わるなどの場合は,カスタムチャートを追加することになるでしょう。
ただ,そこまで複雑ではない,関連リソースが数個レベルの場合,カスタムチャートだと大げさに感じることがあります。

そこでどうすべきか迷っていたところ,同僚の toVersus さんに別の方法を教えていただきました。

extraTemplates 系の変数を使う

Helm チャートによっては extraTemplates や extraObjects といった変数が定義されていて,関連リソースを文字列として入力することで追加で作成することができます。これで当初の目的が達成できます。

公開 Helm チャートを軽く調査した結果,同じ働きをする変数名は以下のとおりです。

チャート 変数名
argo-* extraObjects
Bitnami 系 extraDeploy
kubernetes-dashboard extra.manifests
kube-prometheus-stack 系 extraManifests
traefik extraObjects

調査した範囲で該当する変数がなかった・廃止されたチャートは以下のとおりです。

  • cert-manager
  • cilium
  • cluster-autoscaler
  • fluentd
  • harbor
  • ingress-nginx
  • karpenter
  • kyverno
  • rook-ceph

ちなみに変数がない場合も,extraContainers や extraEnv など,マニフェストの特定の箇所だけ追加できる変数は散見されました。

変数がない場合は依存チャートとして raw を注入する

Helm チャートに該当する変数がない場合は,Helmfile の依存チャートを注入できる機能を利用します。
Helm チャートをフォークする必要がないので便利です。

まず,helmfile.yaml において,raw のように任意のリソースを追加できる Helm チャートを参照または自作し,

helmfile.yaml
repositories:
- name: jetstack
  url: https://charts.jetstack.io
- name: bedag
  url: https://bedag.github.io/helm-charts/

releases:
- name: cert-manager
  chart: jetstack/cert-manager
  values: path/to/values.yaml
  dependencies:
  - chart: bedag/raw
    version: 2.0.0

のように依存チャートを記述します。
次に,大元のチャートの values.yaml ファイルに以下を追記すれば,目的が達成できます。

values.yaml
# 大元のチャートの変数指定…

raw:
  templates:
  - apiVersion: ...  # 追加するリソースのマニフェストを文字列として指定する。

Discussion