Raw ChartでKustomize管理のマニフェストをそのままHelmfile管理にする

Raw Chartは、Helmfile から任意の Kubernetes マニフェストをデプロイするための汎用的な Helm Chart です。

bedag.github.io

既存の Kustomize 構成をとりあえず Helmfile 管理に移したい場合や、 諸事情により Helmfile の統合機能を素直に使えない場合(ConfigMapGenerator を使っているなど)にも利用できます。

github.com

Helmfile

environments:
  dev:
---
repositories:
  - name: bedag
    url: https://bedag.github.io/helm-charts

releases:
  - name: deploy-kustomize
    namespace: ...
    chart: bedag/raw
    values:
      - values/deploy-kustomize/values.yaml.gotmpl

values.yaml.gotmpl

templates:
  - |
    {{ exec "kustomize" (list "build" (printf "../manifests/overlays/%s" .Environment.Name)) | nindent 4 }}

このように設定しておくことで、kustomize build した結果をそのまま Raw Chart 経由でデプロイできます。

Kustomize の例

apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization

resources:
  - ../../base
  - some/overlay

configMapGenerator:
  - name: example-config
    namespace: example
    files:
      - conf/example.yaml


patches:
  - path: patches/example.yaml

ディレクトリ構成例

.
├── helmfile.yaml
├── values
│   └── deploy-kustomize
│       └── values.yaml.gotmpl
└── manifests
    ├── base
    │   ├── deployment.yaml
    │   └── kustomization.yaml
    └── overlays
        └── dev
            ├── kustomization.yaml
            ├── patches
            │   └── example.yaml
            └── conf
                └── example.yaml
  • overlays/<environment>.Environment.Name で切り替え
  • Helmfile 側では環境差分を意識せずに管理可能
  • 既存の Kustomize 構成をほぼそのまま流用できる

参考

zenn.dev