Belajar GitOps - FluxCD - Image Automation
Episode 13 of 36

Belajar GitOps - FluxCD - Image Automation

Episode ini membahas image automation dengan FluxCD: ImageRepository untuk memindai registry, ImagePolicy untuk memilih versi sesuai kebijakan, dan ImageUpdateAutomation yang menulis pembaruan kembali ke Git secara otomatis.

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

Pendahuluan

Di episode 12 kalian sudah belajar multi-tenancy: cara memisahkan beberapa tim dalam satu cluster dengan RBAC per tenant, quota, dan lockdown mode. Struktur dan isolasi itu akan berguna sekarang, karena episode 13 membahas sesuatu yang berjalan lintas environment: image automation.

Image automation adalah kemampuan FluxCD untuk memantau container registry, mendeteksi image baru, mengevaluasi versi yang sesuai dengan kebijakan, lalu memperbarui manifest di Git secara otomatis. Seluruh alurnya tetap 100% GitOps — perubahan selalu berakhir di Git sebagai single source of truth, hanya saja tidak harus dilakukan manual oleh manusia.

Komponen Image Automation

Image automation di FluxCD dibangun dari tiga CustomResourceDefinition (CRD) yang saling bekerja sama:

CRDAPI GroupPeran
ImageRepositoryimage.toolkit.fluxcd.ioMemindai registry dan mencatat daftar tag image
ImagePolicyimage.toolkit.fluxcd.ioMengevaluasi tag mana yang paling baru sesuai kebijakan
ImageUpdateAutomationimage.toolkit.fluxcd.ioMenulis pembaruan versi kembali ke Git

ImageRepository

ImageRepository bertugas memindai container registry secara berkala dan menyimpan daftar tag yang ditemukan. Komponen ini dijalankan oleh image-reflector-controller.

imagerepository.yaml
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
  name: podinfo
  namespace: flux-system
spec:
  image: ghcr.io/stefanprodan/podinfo
  interval: 10m

Registry Authentication

Untuk registry privat, buat Secret berisi kredensial lalu referensikan lewat secretRef:

apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
  name: private-app
  namespace: flux-system
spec:
  image: registry.example.com/private-app
  interval: 5m
  secretRef:
    name: registry-credentials

Interval dan Filtering

Field interval menentukan seberapa sering registry dipindai. Hindari interval terlalu pendek, misalnya satu menit, untuk registry besar karena akan membebani registry dan controller. Untuk membatasi tag yang dipantau, gunakan filterTags dengan pola regex dan opsional extract:

imagerepository-filter.yaml
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
  name: app
  namespace: flux-system
spec:
  image: ghcr.io/acme/app
  interval: 10m
  filterTags:
    pattern: "^v?[0-9]+\\.[0-9]+\\.[0-9]+$"
    extract: "$1"

ImagePolicy

ImagePolicy menentukan kebijakan pemilihan versi dari tag yang ditemukan ImageRepository.

Semver Policy

Kebijakan paling umum, memakai semantic versioning:

imagepolicy-semver.yaml
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
  name: podinfo
  namespace: flux-system
spec:
  imageRepositoryRef:
    name: podinfo
  policy:
    semver:
      range: ">=1.0.0 <2.0.0"

Dengan range tersebut, ImagePolicy memilih tag versi tertinggi yang memenuhi rentang. Operator yang didukung meliputi >=, >, <, <=, =, serta wildcard x dan *.

Alphabetical Policy

Membandingkan tag secara leksikografis. Berguna untuk tag yang bukan versi semver:

imagepolicy-alpha.yaml
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
  name: app
  namespace: flux-system
spec:
  imageRepositoryRef:
    name: app
  policy:
    alphabetical:
      order: asc

Numerical Policy

Membandingkan tag sebagai angka, sehingga urutan numerik dihormati:

imagepolicy-numerical.yaml
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
  name: app
  namespace: flux-system
spec:
  imageRepositoryRef:
    name: app
  policy:
    numerical:
      order: asc

Perbandingan Policy

PolicyCara MenilaiContoh Urutan
semverUrutan semantic versioning1.4.2 lebih baru dari 1.3.9
alphabeticalUrutan hurufv9 dianggap lebih baru dari v10
numericalUrutan angkav10 lebih baru dari v9
regexPattern matching lewat filterTagsHanya tag yang cocok yang dipertimbangkan

Note

Filtering berbasis regex sebenarnya diterapkan di level ImageRepository melalui filterTags, lalu ImagePolicy memilih di antara tag yang tersisa. Kombinasi keduanya memberikan kontrol paling presisi.

ImageUpdateAutomation

ImageUpdateAutomation adalah mesin yang menulis pembaruan kembali ke Git. Komponen ini dijalankan oleh image-automation-controller.

imageupdateautomation.yaml
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageUpdateAutomation
metadata:
  name: flux-system
  namespace: flux-system
spec:
  interval: 10m
  sourceRef:
    kind: GitRepository
    name: flux-system
  git:
    checkout:
      ref:
        branch: main
    commit:
      author:
        email: fluxcdbot@users.noreply.github.com
        name: fluxcdbot
      messageTemplate: |
        [ci skip] update image version
    push:
      branch: main

Commit Message Template

Field messageTemplate menentukan isi pesan commit. Template mendukung beberapa variabel bawaan, misalnya nama image dan versi baru. Awalan [ci skip] pada contoh di atas mencegah pipeline CI berulang memicu dirinya sendiri.

Branch Strategy

Secara default pembaruan ditulis ke branch yang sama dengan checkout. Untuk strategi pull request, misalnya update ke branch fitur lalu PR ke main, set checkout.ref dan push.branch ke branch yang berbeda sehingga perubahan bisa direview manusia dulu.

Author Configuration

Selalu set author yang jelas, misalnya akun bot. Ini memudahkan audit: riwayat commit akan menunjukkan bahwa perubahan dilakukan oleh bot image automation, bukan manusia.

Alur Kerja End-to-End

Mari kita satukan seluruh komponen dengan alur nyata:

  1. CI pipeline membangun image baru dan meng-push ke registry dengan tag versi baru
  2. ImageRepository mendeteksi tag baru pada interval berikutnya
  3. ImagePolicy mengevaluasi tag mana yang memenuhi kebijakan semver
  4. ImageUpdateAutomation memperbarui field image di manifest Git dan membuat commit
  5. Flux menyinkronkan perubahan dari Git ke cluster

Agar ImageUpdateAutomation tahu image mana yang harus diperbarui, Kustomization harus memiliki blok images:

kustomization-images.yaml
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: apps
  namespace: flux-system
spec:
  interval: 10m
  path: ./apps
  prune: true
  sourceRef:
    kind: GitRepository
    name: flux-system
  images:
    - name: ghcr.io/stefanprodan/podinfo
      newName: ghcr.io/stefanprodan/podinfo

Saat ImagePolicy menghasilkan versi baru, ImageUpdateAutomation menulis versi tersebut ke newTag atau newName pada Kustomization, lalu commit ke Git. Verifikasi komponen yang berjalan:

Cek image automation
flux get images repository
flux get images policy
flux get images update

Use Cases

EnvironmentStrategiContoh Konfigurasi
DevelopmentUpdate otomatis penuhSemver range lebar, auto-commit ke main
StagingUpdate otomatis terkontrolRange sempit plus notifikasi
ProductionManual approval via PRUpdate ke branch fitur, lalu PR oleh manusia

Tip

Untuk production, jangan biarkan ImageUpdateAutomation menulis langsung ke main. Arahkan pembaruan ke branch terpisah dan gunakan pull request — manusia tetap menjadi gate terakhir sebelum perubahan diterapkan.

Penutup

Episode 13 ini menutup pembahasan tentang bagaimana FluxCD mengotomasi pembaruan image dari registry hingga Git.

Inti yang harus dibawa pulang:

  • Tiga komponen: ImageRepository memindai, ImagePolicy menilai, ImageUpdateAutomation menulis ke Git.
  • Pilih policy sesuai penamaan tag: semver untuk rilis semantik, numerical atau alphabetical untuk tag lain.
  • filterTags di ImageRepository mempersempit tag yang dipertimbangkan.
  • Commit bot dan branch terpisah menjaga riwayat Git tetap rapi dan aman.
  • Gunakan PR untuk production agar manusia tetap memegang kendali terakhir.

Di episode 14 berikutnya kita akan membahas Notifications & Alerts — bagaimana FluxCD mengirim notifikasi ke Slack, Discord, atau webhook kustom setiap kali ada event, dan bagaimana Alert CRD memfilter event agar tidak membanjiri tim. Sampai jumpa!

Belajar GitOps - FluxCD - Image Automation | Belajar FluxCD & GitOps