➕
Helmfile でちょっとしたリソースを追加したい
動機
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