Episode penutup fase progressive delivery: blue/green deployment dengan traffic mirroring dan promosi instan, A/B testing berbasis header dan cookie, integrasi load testing, serta conformance testing dengan Helm test dan acceptance criteria.

Di episode 16 kalian sudah membedah canary deployment: pergeseran traffic bertahap, analisis metrics, dan rollback otomatis. Namun tidak semua rilis cocok dengan model bertahap itu. Untuk rilis besar atau eksperimen pengguna, ada strategi lain: blue/green dan A/B testing.
Di episode 17 ini kita akan membahas keduanya, ditambah dua praktik pendukung yang sering menyertainya: load testing sebelum promosi dan conformance testing sebagai gerbang kualitas.
Blue/green adalah strategi yang menjaga dua environment penuh secara paralel: blue adalah versi lama, green adalah versi baru. Seluruh traffic tetap di blue sementara green divalidasi, lalu traffic dialihkan secara instan ke green.
Keunggulan blue/green:
Di Flagger, blue/green dikonfigurasi dengan stepWeight dan maxWeight bernilai 100. Analisis dijalankan beberapa iterasi tanpa menggeser traffic, lalu seluruh traffic dialihkan sekaligus:
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: 100
maxWeight: 100
metrics:
- name: request-success-rate
threshold: 99
interval: 1mDengan konfigurasi ini, Flagger membuat environment green, menjalankan iterations kali analisis, dan hanya mengalihkan traffic setelah semua metrik sehat. Karena seluruh traffic berpindah sekaligus, pastikan environment green sudah diuji dengan beban yang memadai sebelum promosi.
A/B testing berbeda dari canary: traffic tidak dibagi berdasarkan persentase, melainkan berdasarkan karakteristik request seperti header atau cookie. Ini memungkinkan sekelompok pengguna tertentu mencoba versi baru sementara sisanya tetap di versi lama.
Penggunaan umum:
x-canary: insider, menentukan kelompok eksperimenDi Flagger, A/B testing dikonfigurasi dengan stepWeight: 0 dan aturan match:
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: 0
match:
- headers:
x-canary:
exact: "insider"
metrics:
- name: request-success-rate
threshold: 99
interval: 1mJika match menggunakan cookie, struktur yang dipakai adalah cookies dengan aturan yang sama. Selama iterasi berlangsung, Flagger mengarahkan request yang cocok dengan kondisi match ke versi canary dan mengevaluasi metrik pada traffic tersebut. Promosi dilakukan jika semua iterasi lolos.
Note
A/B testing membutuhkan provider yang mendukung routing berbasis header atau cookie, misalnya Istio dengan VirtualService, atau NGINX dengan annotation. Pastikan meshProvider sudah sesuai sebelum memakai strategi ini.
Blue/green dan A/B hanya bermakna jika versi baru benar-benar diuji di bawah beban. Flagger mengintegrasikan load tester melalui webhook pada analysis.webhooks.
Webhook load test dijalankan pada setiap iterasi untuk memastikan versi canary mampu menahan lalu lintas:
analysis:
interval: 1m
iterations: 10
webhooks:
- name: load-test
url: http://flagger-loadtester.test/
timeout: 5s
metadata:
cmd: "hey -z 1m -c 50 -q 20 http://podinfo-canary.test:9898/"Webhook tipe lain bisa dipakai untuk verifikasi tambahan, misalnya mengecek endpoint khusus, menjalankan smoke test, atau memvalidasi respons terhadap payload tertentu.
Parameter pada command load tester mengatur tingkat konkurensi, misalnya -c 50 berarti 50 koneksi paralel. Naikkan nilai ini secara bertahap untuk menemukan titik lemah sebelum traffic produksi menemukannya.
Catat hasil load test versi lama sebagai baseline. Bandingkan latensi dan error rate versi baru terhadap baseline tersebut sebagai salah satu criteria kelulusan.
Selain beban, rilis juga perlu lolos uji kesesuaian terhadap kriteria yang sudah disepakati. Flagger mendukung berbagai pendekatan untuk ini.
Untuk aplikasi yang dikelola Helm, jalankan helm test sebagai hook sebelum promosi. Hook yang mengembalikan error akan menggagalkan analisis dan memicu rollback:
analysis:
interval: 1m
iterations: 5
webhooks:
- name: helm-test
type: rollout
url: http://flagger-hook.test/
timeout: 30s
metadata:
cmd: "helm test podinfo -n test"Untuk pengujian yang lebih kompleks, jalankan job Kubernetes kustom yang mengeksekusi skenario pengujian, lalu gunakan webhook untuk menunggu hasilnya sebelum analisis dilanjutkan.
Gabungkan semuanya menjadi gerbang promosi: load test, helm test, dan webhook tambahan harus lolos pada setiap iterasi. Jika salah satu gagal, Flagger menahan promosi dan traffic kembali ke versi lama. Kriteria ini didokumentasikan langsung di dalam Canary CRD, sehingga seluruh tim bisa melihat apa yang dipersyaratkan sebuah rilis.
| Jenis Uji | Mekanisme | Gerbang |
|---|---|---|
| Load test | Webhook load tester | Tiap iterasi |
| Helm test | Webhook rollout dengan perintah helm test | Sebelum promosi |
| Custom test | Job kustom plus webhook | Sebelum promosi |
| Metrics | Prometheus success rate dan duration | Tiap iterasi |
Important
Jangan jadikan konfigurasi A/B atau blue/green sebagai pengganti pengujian di CI. Progressive delivery menambah lapisan verifikasi di deployment, tetapi unit test dan integration test di pipeline tetap wajib dijalankan.
Episode 17 menutup fase progressive delivery dengan dua strategi yang melengkapi canary: blue/green dan A/B testing, plus penguatan lewat load testing dan conformance testing.
Inti yang harus dibawa pulang:
stepWeight: 100 dan maxWeight: 100, menjaga dua environment penuh dengan rollback instan.stepWeight: 0 dengan match berbasis header atau cookie untuk eksperimen pengguna.Di episode 18 berikutnya kita akan membahas Service Mesh Integration — bagaimana Istio, Linkerd, dan AWS App Mesh bekerja sama dengan FluxCD dan Flagger untuk traffic management, observability, dan visualisasi canary. Sampai jumpa!