Belajar GitOps - FluxCD - Managing Helm Charts
Episode 8 of 36

Belajar GitOps - FluxCD - Managing Helm Charts

Helm charts dalam alur GitOps: HelmRepository sebagai source, HelmRelease untuk release, strategi pengelolaan values, siklus hidup install upgrade rollback, hingga dependency antar release.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 7 kalian sudah menggunakan Kustomize untuk me-merge dan men-transform manifest. Kini giliran Helm — cara lain, dan sering kali lebih praktis, untuk mengemas aplikasi. Flux menjalankan Helm sepenuhnya dari dalam cluster lewat Helm Controller, jadi kalian tidak perlu memasang Helm di laptop.

Kita akan pelajari HelmRepository sebagai source chart, HelmRelease sebagai wadah release, pengelolaan values, siklus hidup release, dan dependency.

Menambahkan HelmRepository

Sebelum chart bisa di-install, Flux harus tahu dari mana chart itu berasal. Objeknya bernama HelmRepository. Repo publik contohnya Bitnami dan ingress-nginx:

HelmRepository untuk repo publik
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: bitnami
  namespace: flux-system
spec:
  interval: 1h
  url: https://charts.bitnami.com/bitnami

Buat lewat CLI:

Menambahkan Helm repository
flux create source helm bitnami \
  --url=https://charts.bitnami.com/bitnami \
  --interval=1h

Repo Privat

Repo privat (ChartMuseum, Artifactory, Harbor) butuh autentikasi:

HelmRepository privat dengan basic auth
flux create secret helm auth-helm \
  --username=arman \
  --password=$HELM_PASSWORD
 
flux create source helm internal \
  --url=https://helm.internal.acme.com \
  --secret-ref=auth-helm

OCI Registry

Selain HTTP, HelmRepository juga mendukung OCI — chart dikemas sebagai image di registry seperti Harbor, ECR, atau GHCR. Cukup beri type: oci dan URL registry:

HelmRepository tipe OCI
apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: ghcr
  namespace: flux-system
spec:
  type: oci
  interval: 10m
  url: oci://ghcr.io/arman

Tip

OCI menjadi standar distribusi chart modern karena bisa memakai registry yang sama dengan image aplikasi, termasuk mekanisme auth dan scan kerentanan yang sudah ada.

Membuat HelmRelease

HelmRelease adalah CRD dari Helm Controller. Ia mereferensikan chart dari HelmRepository dan menentukan konfigurasi release:

HelmRelease dasar
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: redis
  namespace: databases
spec:
  interval: 5m
  chart:
    spec:
      chart: redis
      version: "20.x"
      sourceRef:
        kind: HelmRepository
        name: bitnami
  values:
    architecture: standalone
    auth.enabled: true

Lewat CLI:

Membuat HelmRelease via flux create
flux create helmrelease redis \
  --source=HelmRepository/bitnami \
  --chart=redis \
  --chart-version="20.x" \
  --target-namespace=databases

Yang perlu diperhatikan:

  • chart.spec.chart — nama chart di repository.
  • chart.spec.version — batasan versi semver. Nilai "20.x" berarti semua versi 20.
  • spec.interval — seberapa sering Flux memeriksa chart versi baru.
  • spec.values — nilai yang menimpa default chart.

Chart selalu di-install ke namespace yang sama dengan lokasi HelmRelease, kecuali kalian set spec.targetNamespace. Untuk merelease chart ke namespace lain, sertakan service account agar Helm Controller punya izin.

Mengelola Values

Ada dua cara utama memberikan values: inline di spec.values, atau diambil dari ConfigMap atau Secret lewat spec.valuesFrom.

valuesFrom dari ConfigMap dan Secret
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: redis
  namespace: databases
spec:
  chart:
    spec:
      chart: redis
      version: "20.x"
      sourceRef:
        kind: HelmRepository
        name: bitnami
  values:
    architecture: standalone
  valuesFrom:
    - kind: ConfigMap
      name: redis-values
      valuesKey: common.yaml
    - kind: Secret
      name: redis-secret-values
      valuesKey: secrets.yaml

Urutan override (yang terakhir menang):

  1. Nilai default di dalam chart (values.yaml).
  2. spec.values pada HelmRelease.
  3. valuesFrom sesuai urutan kemunculannya di daftar.

Warning

valuesFrom dan spec.values digabung dengan urutan yang deterministik, tapi hasilnya bukan deep merge penuh. Simpan setiap nilai hanya di satu tempat untuk menghindari kejutan saat chart di-upgrade.

Siklus Hidup Release

Helm Controller mengelola install, upgrade, dan rollback secara otomatis. Setiap kali chart atau source berubah, Flux melakukan upgrade:

  • Jika release belum ada, ia melakukan install.
  • Jika sudah ada dan chart atau values berubah, ia melakukan upgrade.
  • Jika upgrade gagal, default-nya Flux melakukan rollback ke versi sebelumnya.
Memeriksa dan me-reconcile HelmRelease
flux get helmreleases
flux reconcile helmrelease redis
kubectl describe helmrelease redis -n databases

Hooks dan Test

Chart Helm dengan pre-upgrade, post-install, atau job test tetap berjalan karena Flux mendukung penuh hook Helm. Aktifkan test agar Flux mengeksekusi job test saat upgrade:

HelmRelease dengan test
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: redis
  namespace: databases
spec:
  interval: 5m
  test:
    enable: true
  chart:
    spec:
      chart: redis
      version: "20.x"
      sourceRef:
        kind: HelmRepository
        name: bitnami

Install, Uninstall, Atomic

  • install.createNamespace: true — Helm membuat namespace otomatis saat install.
  • upgrade.force: true — force upgrade, merecreate resource yang immutable.
  • upgrade.atomic: true — jika upgrade gagal, seluruh release di-rollback otomatis.
  • uninstall.disableHooks dan uninstall.keepHistory — mengontrol perilaku saat HelmRelease dihapus.
Install dan upgrade dengan atomic
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: redis
  namespace: databases
spec:
  install:
    createNamespace: true
    remediation:
      retries: 3
  upgrade:
    atomic: true
    remediation:
      retries: 5
  rollback:
    enable: true
  interval: 5m
  chart:
    spec:
      chart: redis
      version: "20.x"
      sourceRef:
        kind: HelmRepository
        name: bitnami

Important

Kombinasi upgrade.atomic: true dan remediation.retries adalah yang terbaik untuk production: kegagalan tidak pernah meninggalkan cluster dalam kondisi setengah-setengah.

Dependency dan Ordering

Ada dua lapis dependency yang perlu dipahami: antar chart dan antar Kustomization atau HelmRelease.

  • Chart dependency — chart yang mereferensikan sub-chart (misal nginx sebagai ingress untuk aplikasi) dihandle Helm itu sendiri; Flux hanya perlu memastikan HelmRepository-nya tersedia.
  • Kustomization dependency — urutan deploy di level Flux memakai dependsOn antar Kustomization atau antar HelmRelease:
Dependency antar Kustomization
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: apps
  namespace: flux-system
spec:
  dependsOn:
    - name: databases
  path: ./apps
  prune: true
  sourceRef:
    kind: GitRepository
    name: fleet

Dengan ini, Kustomization apps baru dijalankan setelah databases selesai dan semua release-nya dilaporkan sehat. Detail orkestrasi seperti health check dan pencegahan circular dependency dibahas tuntas di episode 10.

Note

Kunci mental: Kustomize atau HelmRelease menentukan apa yang dideploy, sedangkan dependsOn menentukan urutan deploy. Keduanya bekerja bersama untuk menjaga konsistensi.

Penutup

Helm kini menjadi bagian dari alur GitOps kalian:

  • HelmRepository menyediakan chart dari repo publik, privat, maupun OCI registry.
  • HelmRelease menentukan chart, versi, namespace, dan values sebuah release.
  • Values bisa inline atau bersumber dari ConfigMap atau Secret dengan urutan override yang jelas.
  • Install, upgrade, rollback, hooks, test, dan atomic diatur deklaratif.
  • Dependency antar release dikendalikan lewat dependsOn.

Selanjutnya kita akan mendalami source management: referensi Git tingkat lanjut, HelmRepository dan OCIRepository, bucket storage, sampai verifikasi signature GPG dan Cosign. Sampai jumpa!

Belajar GitOps - FluxCD - Managing Helm Charts | Belajar FluxCD & GitOps