Fase baru seri ini: progressive delivery dengan Flagger. Kita membahas apa itu Flagger, arsitektur controller dan CRD-nya, persyaratan service mesh dan ingress, hingga cara kerja analisis canary, pergeseran traffic, dan promosi otomatis.

Di episode 14 kalian sudah belajar notifikasi: bagaimana setiap controller FluxCD menghasilkan event dan bagaimana Alert meneruskannya ke Slack, Discord, atau webhook. Sekarang kita masuk fase baru yang memanfaatkan observability tersebut: progressive delivery.
Di episode 15 ini kita akan berkenalan dengan Flagger, tool progressive delivery yang bagian dari ekosistem FluxCD. Kita pelajari konsepnya, arsitekturnya, cara instalasinya, dan alur kerjanya — sebelum nanti di episode 16 dan 17 kita membedah strategi canary, blue-green, dan A/B testing secara praktis.
Progressive delivery adalah pendekatan mendeploy versi baru secara bertahap dengan mengukur dampaknya sebelum seluruh traffic dialihkan. Berbeda dengan rolling update yang hanya berfokus pada ketersediaan, progressive delivery berfokus pada verifikasi kualitas selama proses deploy berlangsung.
| Pendekatan | Kontrol Traffic | Verifikasi | Risiko |
|---|---|---|---|
| Rolling update | Tidak ada, bertahap replika | Health check dasar | Sedang |
| Canary | Pergeseran bertahap | Metrics dan analisis | Rendah |
| Blue-green | Switch penuh | Pre-promotion test | Rendah |
| A/B testing | Header atau cookie | Metrics eksperimen | Rendah |
Flagger mendukung semua strategi di atas: canary, A/B testing, dan blue-green, dengan analisis metrics yang bisa dikonfigurasi.
Flagger adalah tool open-source untuk progressive delivery yang dikembangkan oleh Weaveworks dan menjadi bagian dari ekosistem FluxCD. Flagger berjalan sebagai controller Kubernetes yang mengamati objek Deployment atau DaemonSet, lalu mengotomasi seluruh siklus analisis dan pergeseran traffic.
Beberapa hal penting tentang Flagger:
CanaryFlagger terdiri dari satu controller dan beberapa CRD. Berikut komponen utamanya:
| Komponen | Peran |
|---|---|
| Flagger controller | Menjalankan loop analisis, membuat resource canary, dan mengambil keputusan promote atau rollback |
| Canary CRD | Mendefinisikan target, service, dan konfigurasi analisis |
| MetricTemplate CRD | Template query metrics untuk analisis yang bisa dipakai ulang |
| AlertProvider CRD | Konfigurasi notifikasi Flagger ke Slack, Teams, Discord, dan lain-lain |
Canary CRD minimal:
apiVersion: flagger.app/v1beta1
kind: Canary
metadata:
name: podinfo
namespace: test
spec:
targetRef:
apiVersion: apps/v1
kind: Deployment
name: podinfo
service:
port: 9898
analysis:
interval: 1m
iterations: 10
stepWeight: 10
maxWeight: 50
metrics:
- name: request-success-rate
threshold: 99
interval: 1mMetricTemplate contoh untuk metrik kustom:
apiVersion: flagger.app/v1beta1
kind: MetricTemplate
metadata:
name: not-found-percentage
namespace: test
spec:
provider:
type: prometheus
address: http://prometheus.observability:9090
query: |
sum(rate(http_request_duration_seconds_count{status="404"}[2m]))
/
sum(rate(http_request_duration_seconds_count[2m]))AlertProvider contoh:
apiVersion: flagger.app/v1beta1
kind: AlertProvider
metadata:
name: on-call
namespace: flux-system
spec:
type: slack
channel: on-call
secretRef:
name: slack-urlFlagger diinstall lewat Helm chart. Persyaratan dasar: cluster Kubernetes versi 1.16 atau lebih baru, kubectl, dan Prometheus yang berjalan di cluster.
helm repo add flagger https://flagger.app
helm upgrade -i flagger flagger/flagger \
--namespace flux-system \
--set crd.create=true \
--set meshProvider=nginx \
--set metricsServer=http://prometheus.observability:9090Flagger biasanya diinstall di namespace flux-system, sedangkan resource aplikasi yang dikelolanya berada di namespace lain. Parameter meshProvider menentukan bagaimana Flagger menggeser traffic, dan metricsServer menunjuk ke Prometheus yang digunakan untuk analisis.
Flagger tidak menggeser traffic sendiri — dia mendelegasikan ke service mesh atau ingress controller yang terpasang:
| Kategori | Provider |
|---|---|
| Service mesh | Istio, Linkerd, AWS App Mesh, Kuma, Open Service Mesh |
| Ingress controller | NGINX, Contour, Gloo, Traefik, Skipper |
| Gateway API | Didukung untuk routing modern berbasis HTTPRoute |
Important
Pilihan meshProvider saat install harus sesuai dengan yang benar-benar terpasang di cluster. Salah mengatur provider akan membuat Flagger gagal menggeser traffic pada saat analisis canary dimulai.
Saat sebuah Deployment baru diterapkan, Flagger menjalankan siklus berikut:
stepWeight dan iterationsSelama proses berlangsung, Flagger mengirim notifikasi melalui AlertProvider, misalnya saat canary dinaikkan, dipromosikan, atau di-rollback. Seluruh proses berjalan otomatis tanpa intervensi manusia.
kubectl get canaries.flagger.app -n test
kubectl describe canary podinfo -n testTip
Gunakan kubectl get canaries.flagger.app untuk melihat status setiap canary, termasuk fase analisis, traffic weight, dan hasil promosi terakhir.
Episode 15 ini memperkenalkan Flagger sebagai mesin progressive delivery dalam ekosistem FluxCD.
Inti yang harus dibawa pulang:
Di episode 16 berikutnya kita akan membedah Canary Deployments secara mendalam: konfigurasi Canary CRD, strategi pergeseran traffic bertahap, analisis metrics, dan kondisi yang memicu rollback otomatis. Sampai jumpa!