Episode ini membahas traffic shifting dan canary release dengan HTTPRoute weights, feedback loop observability untuk keamanan deployment, serta integrasi dengan Argo Rollouts dan Flagger.

Merilis versi baru tanpa mengganggu pengguna adalah salah satu tantangan terbesar dalam operasi. Episode 9 membahas canary deployments dan progressive delivery dengan Multigress: menggeser traffic perlahan memakai weights, memantau kesehatan rilis secara real-time, dan mengotomatisasi prosesnya dengan Argo Rollouts atau Flagger.
Canary adalah jembatan antara "langsung rilis" dan "rollback manual". Traffic dialirkan sedikit demi sedikit, dan keputusan lanjut atau mundur diambil berdasarkan data, bukan keberuntungan.
Canary paling sederhana: dua Service menuju dua Deployment yang menunjuk ke image berbeda, lalu weights di HTTPRoute menentukan proporsinya:
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
name: api-route
spec:
parentRefs:
- name: main-gateway
namespace: multigress-system
hostnames:
- "api.example.com"
rules:
- backendRefs:
- name: api-stable
port: 8080
weight: 95
- name: api-canary
port: 8080
weight: 5Lima persen traffic sudah menuju versi baru. Saat kalian yakin, ubah weight menjadi 50:50, lalu 0:100.
Alihkan traffic bertahap lewat patch:
kubectl patch httproute api-route --type=json \
-p='[{"op":"replace","path":"/spec/rules/0/backendRefs/1/weight","value":25}]'Perintah kubectl patch httproute api-route --type=json mengubah weight canary menjadi 25 tanpa menulis ulang seluruh file. Proses ini bisa diulang sesuai jadwal: 5, 25, 50, 100.
Warning
Canary berbasis weight bukan pengganti tes. Pastikan liveness dan readiness probe Deployment canary sudah valid — pod yang tidak sehat tidak akan menerima traffic, tetapi hasilnya bisa membingungkan saat membaca distribusi.
Untuk menguji ke tim internal saja, kombinasikan dengan rule header seperti episode 8. Weight lalu dipakai sebagai lapisan kedua untuk release ke publik.
Canary yang aman membutuhkan pengamatan. Metrik yang harus dipantau selama canary berjalan:
Query Prometheus untuk membandingkan dua backend:
sum(rate(multigress_http_requests_total{backend="api-canary"}[5m])) by (code)
sum(rate(multigress_http_requests_total{backend="api-stable"}[5m])) by (code)Bandingkan distribusi status code kedua backend. Jika api-canary memproduksi 5xx jauh lebih banyak dari api-stable, hentikan canary segera.
Tetapkan ambang sebelum rilis, misalnya:
Tanpa ambang, observability hanya menjadi layar cantik tanpa keputusan. Feedback loop baru berguna ketika ada aturan eksplisit untuk bertindak.
Argo Rollouts bisa mengotomatisasi penambahan weight dan analisis. Analisis dilakukan lewat AnalysisTemplate:
apiVersion: argoproj.io/v1alpha1
kind: AnalysisTemplate
metadata:
name: canary-error-rate
spec:
metrics:
- name: error-rate
interval: 30s
successCondition: result < 1
provider:
prometheus:
address: http://kube-prometheus-stack-prometheus.monitoring:9090
query: |
sum(rate(multigress_http_requests_total{backend="api-canary",code=~"5.."}[2m]))
/ sum(rate(multigress_http_requests_total{backend="api-canary"}[2m]))Template di atas memicu pengukuran setiap 30 detik. Jika error rate canary di atas satu persen, analisis gagal dan Rollout otomatis kembali ke stable.
Rollout kemudian memakai weights HTTPRoute Multigress sebagai langkah canary:
apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
name: api
spec:
strategy:
canary:
canaryService: api-canary
stableService: api-stable
trafficRouting:
multigress:
httpRoute: api-route
steps:
- setWeight: 10
- pause: { duration: 10m }
- setWeight: 50
- pause: { duration: 10m }
- setWeight: 100Alur di atas menahan traffic di 10 persen selama 10 menit, lalu 50 persen, lalu penuh. Perintah kubectl argo rollouts get rollout api menampilkan status analisis dan langkah canary secara real-time.
Flagger bekerja dengan prinsip serupa tetapi memakai Kubernetes Deployment biasa dan menangani analisis sendiri. Pilihannya tergantung ekosistem tim: Argo Rollouts menyatu dengan Argo CD, sedangkan Flagger lebih ringan dan terintegrasi dengan Prometheus serta Grafana.
Tip
Apapun tool-nya, pastikan HTTPRoute dianggap sebagai bagian dari deployment, bukan konfigurasi statis. Canary otomatis bekerja paling baik ketika weights route berubah bersamaan dengan rilis image.
Episode 9 menutup lingkaran progressive delivery: kalian tahu cara menggeser traffic dengan weights, menentukan ambang keberhasilan dari observability, dan mengotomatisasi seluruh proses dengan Argo Rollouts atau Flagger.
Inti yang harus dibawa pulang:
kubectl patch, bukan edit file utuh.Di episode 10 selanjutnya kita akan membahas multi-tenant routing & namespace isolation — routing berbasis domain lintas namespace, gateway scoping, pola isolasi namespace, dan pengelolaan shared gateway untuk banyak tim. Canary yang sudah kalian bangun akan hidup dalam struktur multi-tenant yang baru.