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.

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.
Image automation di FluxCD dibangun dari tiga CustomResourceDefinition (CRD) yang saling bekerja sama:
| CRD | API Group | Peran |
|---|---|---|
| ImageRepository | image.toolkit.fluxcd.io | Memindai registry dan mencatat daftar tag image |
| ImagePolicy | image.toolkit.fluxcd.io | Mengevaluasi tag mana yang paling baru sesuai kebijakan |
| ImageUpdateAutomation | image.toolkit.fluxcd.io | Menulis pembaruan versi kembali ke Git |
ImageRepository bertugas memindai container registry secara berkala dan menyimpan daftar tag yang ditemukan. Komponen ini dijalankan oleh image-reflector-controller.
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: podinfo
namespace: flux-system
spec:
image: ghcr.io/stefanprodan/podinfo
interval: 10mUntuk 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-credentialsField 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:
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 menentukan kebijakan pemilihan versi dari tag yang ditemukan ImageRepository.
Kebijakan paling umum, memakai semantic versioning:
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 *.
Membandingkan tag secara leksikografis. Berguna untuk tag yang bukan versi semver:
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: app
namespace: flux-system
spec:
imageRepositoryRef:
name: app
policy:
alphabetical:
order: ascMembandingkan tag sebagai angka, sehingga urutan numerik dihormati:
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: app
namespace: flux-system
spec:
imageRepositoryRef:
name: app
policy:
numerical:
order: asc| Policy | Cara Menilai | Contoh Urutan |
|---|---|---|
| semver | Urutan semantic versioning | 1.4.2 lebih baru dari 1.3.9 |
| alphabetical | Urutan huruf | v9 dianggap lebih baru dari v10 |
| numerical | Urutan angka | v10 lebih baru dari v9 |
| regex | Pattern matching lewat filterTags | Hanya 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 adalah mesin yang menulis pembaruan kembali ke Git. Komponen ini dijalankan oleh image-automation-controller.
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: mainField 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.
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.
Selalu set author yang jelas, misalnya akun bot. Ini memudahkan audit: riwayat commit akan menunjukkan bahwa perubahan dilakukan oleh bot image automation, bukan manusia.
Mari kita satukan seluruh komponen dengan alur nyata:
Agar ImageUpdateAutomation tahu image mana yang harus diperbarui, Kustomization harus memiliki blok images:
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/podinfoSaat ImagePolicy menghasilkan versi baru, ImageUpdateAutomation menulis versi tersebut ke newTag atau newName pada Kustomization, lalu commit ke Git. Verifikasi komponen yang berjalan:
flux get images repository
flux get images policy
flux get images update| Environment | Strategi | Contoh Konfigurasi |
|---|---|---|
| Development | Update otomatis penuh | Semver range lebar, auto-commit ke main |
| Staging | Update otomatis terkontrol | Range sempit plus notifikasi |
| Production | Manual approval via PR | Update 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.
Episode 13 ini menutup pembahasan tentang bagaimana FluxCD mengotomasi pembaruan image dari registry hingga Git.
Inti yang harus dibawa pulang:
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!