# Arsitektur Zero-Downtime Deployment dengan Blue-Green Strategy di Kubernetes

> Diterbitkan oleh Literally Web ID pada 21 Oct 2026
> Sumber: https://literally.web.id/articles/arsitektur-zero-downtime-deployment-dengan-blue-green-strategy-di-kubernetes

---

Pengalaman di lapangan mengajarkan kita satu hal pahit: jam 2 malam, saat trafik sedang merangkak naik, sebuah rilis fitur baru mendadak melumpuhkan backend Go dan merusak database MySQL kita karena skema migrasi yang salah. Dulu, kita mengandalkan restart manual web server Nginx atau mematikan PHP-FPM satu per satu, yang berujung pada komplain pelanggan dan keringat dingin para C-level. Dari situlah arsitektur Zero-Downtime Deployment lahir, berevolusi dari sekadar skrip Bash rapuh hingga menjadi orkestrasi Kubernetes yang elegan menggunakan strategi Blue-Green dan manajemen routing Ingress Controller yang presisi. Pendekatan ini bukan lagi kemewahan, melainkan harga mati bagi sistem web modern yang menuntut ketersediaan 99.99%, di mana versi lama (Blue) dan versi baru (Green) hidup berdampingan secara damai sebelum gerbang trafik dipindahkan seketika tanpa jeda milidetik.

Memahami bagaimana transisi ini mengalir mulus membawa kita langsung ke bagian paling krusial di lapangan, yakni merangkum seluruh esensi arsitektur ini ke dalam bentuk panduan cepat yang bisa langsung dieksekusi oleh DevOps Engineer maupun Infrastructure Architect berpengalaman...

## 1. Intisari Kilat: Fondasi dalam Sekali Lirik

> [!IMPORTANT]
> Blue-Green Deployment bukan berarti menggandakan seluruh infrastruktur secara membabi buta. Di Kubernetes, kita menduplikasi *Workload* (Deployment pods) dan memanipulasi *Service selector* atau *Ingress Rules* secara atomik.

- **Blue Environment**: Versi aplikasi saat ini yang sedang melayani 100% trafik production, terhubung ke database utama (misal: MySQL/MariaDB) dan caching layer (Redis).
- **Green Environment**: Versi aplikasi baru yang telah melewati pipeline CI/CD, di-deploy secara terisolasi, dan diuji kesehatannya via liveness/readiness probe sebelum menerima satu pun request nyata.
- **Traffic Shifting Layer**: Menggunakan Ingress Controller (seperti Nginx Ingress atau Traefik) atau Service Mesh (Istio) untuk membalikkan saklar routing dari Blue ke Green secara instan.
- **Database Compatibility**: Menggunakan pola *Expand and Contract* (Backward-Compatible Schema) agar versi Blue dan Green dapat membaca/menulis ke database yang sama tanpa *breaking change*.

Memahami fondasi ini membuat kita harus segera menentukan pilihan arsitektur yang tepat agar tidak salah langkah di tengah proyek, yang akan kita bedah melalui kompas keputusan berikut...

## 2. Kompas Keputusan: Kapan Memilih Solusi Ini vs Alternatif Lain

Di dunia nyata, memilih strategi deployment mirip seperti memilih ban mobil: salah pilih tipe, mobil bisa tergelincir di tikungan tajam. Berikut adalah panduan cepat dalam bentuk decision tree untuk menentukan apakah Blue-Green Deployment adalah senjata yang tepat untuk infrastruktur Anda:

- **Jika trafik Anda masif, kritis (Fintech/E-commerce), dan downtime detik bernilai jutaan rupiah:** 
  👉 *Pilih Blue-Green Deployment.* Keunggulannya adalah rollback instan jika Green gagal. Kerugiannya adalah kebutuhan resource (RAM/CPU) melonjak 2x lipat selama proses transisi.
- **Jika resource klaster Kubernetes sangat terbatas (Cluster kecil, anggaran ketat):** 
  👉 *Hindari Blue-Green.* Lebih baik gunakan *Rolling Update* bawaan Kubernetes dengan parameter `maxSurge: 25%` dan `maxUnavailable: 0` untuk menghemat penggunaan memori Node.
- **Jika aplikasi Anda berbasis stateful (Menyimpan sesi lokal di disk/memori lokal alih-alih Redis terpusat):** 
  👉 *Waspada!* Blue-Green akan memutus sesi pengguna yang sedang aktif kecuali Anda mengimplementasikan *Sticky Sessions* di Nginx/Cloudflare atau memindahkan manajemen sesi ke Redis/Memcached.

Setelah memegang kompas keputusan ini, mari kita intip contekan parameter konfigurasi Kubernetes dan Nginx yang paling sering dicari di tengah malam saat insiden terjadi...

## 3. Contekan Konfigurasi & Parameter Paling Sering Dicari

Berikut adalah file manifest Kubernetes murni untuk implementasi Blue-Green menggunakan label selector `version: blue` dan `version: green` yang diatur oleh satu Service utama.

```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-app-blue
  namespace: production
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web-app
      version: blue
  template:
    metadata:
      labels:
        app: web-app
        version: blue
    spec:
      containers:
      - name: backend
        image: registry.internal/app:v1.2.0
        ports:
        - containerPort: 8080
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 5
          periodSeconds: 3
        livenessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 10
---
apiVersion: v1
kinds: Service
metadata:
  name: web-app-svc
  namespace: production
spec:
  selector:
    app: web-app
    version: blue # <-- Ubah ke 'green' untuk switch trafik secara instan
  ports:
  - protocol: TCP
    port: 80
    targetPort: 8080
```

> [!TIP]
> Gunakan alat bantu seperti Argo Rollouts atau Flagger jika Anda ingin mengotomatisasi *progressive delivery* (Canary/Blue-Green otomatis berdasarkan metrik Prometheus) alih-alih mengubah file YAML secara manual.

Konfigurasi di atas tidak akan ada artinya jika kita tidak tahu mantra terminal apa saja yang harus diketik saat menghadapi situasi darurat di server, yang terangkum rapi dalam daftar perintah kilat berikut...

## 4. Koleksi Mantra One-Liner Siap Salin untuk Keseharian

> [!NOTE]
> Simpan perintah-perintah ini di terminal Anda atau catat di buku saku operasional harian.

- **Switch Trafik Instan ke Versi Green via Kubectl Patch:**
  ```bash
  kubectl patch service web-app-svc -n production --type='json' -p='[{"op": "replace