L
Kubernetes & CI/CD • Literally Web ID

Zero-Downtime Deployment Menggunakan ArgoCD dan Kubernetes di Lingkungan Hybrid Cloud

⏱️ 18 menit baca • 📅 19 Oct 2026 • 👁️ 5 views
Zero-Downtime Deployment Menggunakan ArgoCD dan Kubernetes di Lingkungan Hybrid Cloud

1. Konteks Industri & Analisis Akar Masalah

Dalam lanskap pengembangan perangkat lunak modern, tuntutan untuk merilis fitur baru dengan kecepatan tinggi sering kali berbenturan dengan stabilitas sistem operasional. Di lingkungan enterprise yang mengadopsi arsitektur hybrid cloud (menggabungkan on-premise data center dengan AWS, GCP, atau Azure), kompleksitas infrastruktur berlipat ganda. Masalah klasik yang sering dihadapi oleh DevOps & Infrastructure Engineers adalah kegagalan saat proses deployment manual, konfigurasi drift antara lingkungan staging dan production, serta downtime yang tidak terencana ketika terjadi pergantian versi aplikasi.

Secara tradisional, rilis aplikasi melibatkan skrip bash yang rapuh, koneksi SSH manual ke berbagai server web (seperti Nginx atau Apache), pembaruan kode PHP/Go/Node.js, migrasi database yang rentan error, hingga penyesuaian record DNS dan konfigurasi CDN Cloudflare secara terpisah. Bottleneck utama dari pendekatan ini adalah kurangnya single source of truth dan ketiadaan mekanisme rollback otomatis yang cepat.

Sebelum penerapan Zero-Downtime Deployment berbasis ArgoCD dan Kubernetes di lingkungan hybrid cloud:

  • Deployment Manual & Rentan Human Error: Administrator harus menjalankan skrip secara manual pada puluhan instance server, meningkatkan risiko salah konfigurasi.
  • Waktu Pemulihan (MTTR) Tinggi: Ketika terjadi kegagalan rilis, proses pengembalian ke versi sebelumnya memerlukan waktu berjam-jam karena harus membalikkan perubahan skema database dan file konfigurasi secara manual.
  • Konfigurasi Drift: Perubahan manual langsung pada server membuat kondisi aktual berbeda dari dokumentasi atau repositori kode, menyulitkan audit keamanan dan pemeliharaan.

Sesudah penerapan Zero-Downtime Deployment berbasis GitOps:

  • Git sebagai Single Source of Truth: Seluruh status infrastruktur dan aplikasi dideklarasikan dalam repositori Git. Perubahan apa pun, mulai dari konfigurasi Nginx, kredensial S3/MinIO, hingga replika Kubernetes, dikontrol melalui Pull Request.
  • Zero Downtime Otomatis: Pembaruan pod menggunakan strategi Rolling Update atau Canary memastikan traffic tidak pernah terputus, didukung oleh health check dan readiness probe yang presisi.
  • Rekonsiliasi Otomatis via ArgoCD: ArgoCD secara terus-menerus membandingkan status aktual di cluster Kubernetes dengan status yang diinginkan di Git, melakukan koreksi otomatis jika terjadi drift.

2. Konsep Inti & Deep Dive Arsitektur

ArgoCD adalah alat deklaratif, GitOps continuous delivery (CD) untuk Kubernetes. Berbeda dengan sistem CI/CD tradisional (seperti Jenkins atau GitLab CI) yang bersifat push-based (CI server mengirimkan instruksi ke cluster), ArgoCD bekerja secara pull-based. Ia memantau repositori Git secara berkala atau melalui webhook, lalu menerapkan perubahan manifest YAML langsung ke cluster target.

Alur Data & Eksekusi Arsitektur Hybrid Cloud

+-----------------------+
|      Developer        |
+-----------------------+
            |
            | 1. Git Push (Manifest YAML)
            v
+-----------------------+
|   Git Repository      |
+-----------------------+
            ^
            | 3. Poll / Webhook
            | 
+---------------------------------------------------+
|              Kubernetes Cluster                   |
|  +---------------------------------------------+  |
|  |                 ArgoCD                      |  |
|  |  (Application Controller + API Server)      |  |
|  +---------------------------------------------+  |
|                     |                             |
|                     | 4. Sync & Reconcile         |
|                     v                             |
|  +---------------------------------------------+  |
|  |           Target Workloads                  |
|  |   (Deployment, Service, Ingress, HPA)       |  |
|  +---------------------------------------------+  |
+---------------------------------------------------+
            |
            | 5. Load Balancing & Traffic Routing
            v
+---------------------------------------------------+
|       Hybrid Cloud Edge (Cloudflare / Nginx)      |
+---------------------------------------------------+

Penjelasan alur kerja di balik layar:

  1. Developer melakukan commit dan push perubahan manifest Kubernetes (Deployment, Service, Ingress) ke repositori Git.
  2. ArgoCD Application Controller mendeteksi perubahan tersebut (melalui polling interval atau webhook dari GitHub/GitLab).
  3. ArgoCD melakukan perbandingan (diff) antara kondisi live di cluster dengan deklarasi di Git.
  4. Jika terdapat perbedaan, ArgoCD melakukan sinkronisasi (sync) secara otomatis atau manual sesuai kebijakan (automatic sync policy).
  5. Kubernetes menjalankan Rolling Update pada Pod, memastikan Pod versi lama tetap melayani traffic hingga Pod versi baru benar-benar siap dan melewati readiness probe.
  6. Edge Layer (seperti Cloudflare CDN atau Nginx Ingress Controller) mendistribusikan traffic dengan mulus tanpa ada dropped connections.

3. Perbandingan Komparatif / Analisis Pendekatan

Berikut adalah analisis mendalam mengenai pendekatan deployment di lingkungan hybrid cloud:

Parameter Pendekatan Tradisional (SSH + Bash) CI/CD Push-Based (Jenkins/GitLab CI) GitOps ArgoCD (Pull-Based)
Keamanan Kredensial Rendah (SSH keys tersebar di skrip) Sedang (Token CI disimpan di runner) Tinggi (Credentials terisolasi di dalam cluster K8s)
Konfigurasi Drift Sangat tinggi Sedang Sangat rendah (Rekonsiliasi otomatis)
Kemudahan Rollback Manual dan berisiko tinggi Memerlukan re-run pipeline Instan (Revert commit Git & Sync)
Konsumsi Resource Minimal (hanya server target) Sedang (CI Runners aktif terus) Efisien (ArgoCD controller terpusat)
Kompleksitas Hybrid Kompleks & sulit diskalakan Sedang Sangat terstruktur & terpusat

[!TIP] Gunakan pendekatan GitOps dengan ArgoCD untuk lingkungan hybrid cloud karena meminimalisir pembukaan port SSH inbound ke jaringan privat on-premise, serta memberikan visibilitas terpusat untuk semua cluster dari satu dashboard ArgoCD.


4. Prasyarat Sistem & Persiapan Lingkungan

Sebelum membangun sistem deployment zero-downtime, pastikan komponen berikut telah tersedia dan terverifikasi:

  1. Cluster Kubernetes Multi-Node: Minimal 1 Control Plane dan 2 Worker Nodes (mendukung K8s versi 1.25+).
  2. Command Line Tools: kubectl, helm, dan argocd CLI terpasang pada mesin administrator.
  3. Akses Jaringan & DNS: Konfigurasi record DNS (A Record) yang mengarah ke Ingress Controller di cluster.
  4. Storage & Database: Akses ke external database (MySQL/MariaDB) dan object storage (S3/MinIO) untuk aplikasi stateless/stateful.

Verifikasi kesiapan cluster:

kubectl cluster-info
kubectl get nodes -o wide

5. Panduan Implementasi Langkah demi Langkah

Langkah 1: Instalasi ArgoCD pada Cluster Kubernetes

Buat namespace khusus untuk ArgoCD dan instal menggunakan manifest resmi:

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Verifikasi bahwa seluruh pod ArgoCD berjalan dengan normal:

kubectl get pods -n argocd

Ubah service ArgoCD Server menjadi LoadBalancer atau gunakan Port Forwarding untuk akses awal:

kubectl port-forward svc/argocd-server -n argocd 8080:443

Dapatkan password awal administrator:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
echo ""

Langkah 2: Konfigurasi Manifest Aplikasi Deklaratif

Buat file manifest aplikasi ArgoCD bernama application-production.yaml. File ini mendefinisikan sumber repositori Git dan cluster target.

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: enterprise-web-app
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: default
  source:
    repoURL: 'https://github.com/perusahaan-anda/k8s-gitops-configs.git'
    targetRevision: HEAD
    path: manifests/production
  destination:
    server: 'https://kubernetes.default.svc'
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - CreateNamespace=true

Terapkan manifest aplikasi ke cluster:

kubectl apply -f application-production.yaml

Langkah 3: Konfigurasi Deployment Kubernetes untuk Zero-Downtime

Berikut adalah file manifest deployment aplikasi backend (Node.js/Go/PHP) yang mengimplementasikan strategi Rolling Update secara optimal dengan liveness dan readiness probes.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: web-backend
  namespace: production
  labels:
    app: web-backend
spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels:
    app: web-backend
  template:
    metadata:
      labels:
        app: web-backend
    spec:
      containers:
      - name: backend
        image: registry.perusahaan.com/app/backend:v1.2.0
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 8080
        env:
        - name: DB_HOST
          valueFrom:
            secretKeyRef:
              name: db-secrets
              key: host
        - name: REDIS_URL
          value: "redis://redis-master.production.svc.cluster.local:6379"
        resources:
          limits:
            cpu: "500m"
            memory: "512Mi"
          requests:
            cpu: "200m"
            memory: "256Mi"
        readinessProbe:
          httpGet:
            path: /healthz
            port: 8080
          initialDelaySeconds: 10
          periodSeconds: 5
          failureThreshold: 3
        livenessProbe:
          httpGet:
            path: /livez
            port: 8080
          initialDelaySeconds: 15
          periodSeconds: 10
          failureThreshold: 3

6. Bedah Kode & Penjelasan Detail Baris Kunci

Mari kita bedah parameter krusial dalam file Deployment di atas untuk memastikan zero-downtime:

  • strategy.type: RollingUpdate: Menginstruksikan Kubernetes untuk mengganti pod lama dengan pod baru secara bertahap.
  • maxSurge: 1: Menentukan jumlah maksimum pod yang dapat dibuat di atas jumlah replika yang diinginkan selama proses pembaruan (misal: dari 3 pod, sementara menjadi 4 pod).
  • maxUnavailable: 0: Parameter paling krusial untuk zero-downtime. Menjamin bahwa tidak ada satu pun pod yang dimatikan sebelum pod baru siap menerima traffic. Kubernetes tidak akan mematikan pod lama sampai pod baru berstatus Ready.
  • readinessProbe: Mengecek apakah aplikasi siap menerima traffic (misalnya koneksi ke database MySQL dan Redis sudah mapan). Jika endpoint /healthz mengembalikan status HTTP 200, baru traffic dialirkan ke pod tersebut.
  • livenessProbe: Mengecek apakah aplikasi mengalami deadlock atau macet total. Jika gagal, Kubernetes akan otomatis me-restart container yang bermasalah.

7. Skenario Produksi & Studi Kasus Dunia Nyata

Pada lingkungan produksi dengan beban tinggi (high concurrency, misal 50.000 req/sec), integrasi antara ArgoCD, Kubernetes, Nginx Ingress Controller, dan Cloudflare Edge Caching memegang peran vital.

  1. Koneksi Database & Migrasi: Migrasi skema database (MySQL/MariaDB) harus bersifat backward compatible. Jangan pernah mengubah kolom yang sedang digunakan oleh versi aplikasi lama. Gunakan pola Expand and Contract (misal: buat kolom baru, isi data secara paralel, lalu hapus kolom lama pada rilis berikutnya).
  2. Session Handling & Redis: Pastikan backend bersifat stateless. Sesi pengguna disimpan di Redis Cluster, bukan di memori lokal container, sehingga ketika pod melakukan rolling update, pengguna tidak kehilangan sesi login mereka.
  3. Cache Purging di Cloudflare: Melalui webhook post-sync ArgoCD, panggil API Cloudflare untuk melakukan purge cache pada aset statis (HTML/CSS/JS) setelah rilis sukses.

8. Common Pitfalls, Anti-Patterns & Solusi

[!WARNING] Kesalahan Fatal #1: Menggunakan image:latest pada deployment produksi. Solusi: Selalu gunakan tag versi semantik yang spesifik (misal: v1.2.1) atau SHA digest gambar container agar ArgoCD dapat mendeteksi perubahan dengan akurat dan melakukan rollback tanpa kebingungan versi.

[!WARNING] Kesalahan Fatal #2: Tidak mengatur Resource Requests & Limits. Solusi: Tanpa limits, satu pod yang mengalami memory leak dapat menghabiskan seluruh resource node dan memicu Eviction pada pod lain, menyebabkan downtime massal.

  • Anti-Pattern: Melakukan perubahan manual menggunakan kubectl edit langsung di cluster produksi. Hal ini melanggar prinsip GitOps dan akan menyebabkan ArgoCD menimpa perubahan tersebut saat siklus sinkronisasi berikutnya (kecuali diatur dengan ignoreDifferences).

9. Benchmark, Metrik Kinerja & Tuning Performa

Lakukan pengujian beban (load testing) menggunakan tool seperti k6 atau wrk selama proses rolling update berlangsung untuk memastikan tidak ada dropped packets atau lonjakan latensi.

Skrip pengujian k6 (load-test.js):

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 100 },
    { duration: '5m', target: 500 },
    { duration: '2m', target: 0 },
  ],
};

export default function () {
  const res = http.get('https://app.perusahaan.com/healthz');
  check(res, {
    'status is 200': (r) => r.status === 200,
    'response time < 200ms': (r) => r.timings.duration < 200,
  });
  sleep(1);
}

Jalankan perintah benchmark:

k6 run load-test.js

Interpretasi Hasil: Pastikan persentase success rate tetap 100% (http_req_failed: 0.00%) meskipun proses kubectl rollout restart deployment/web-backend sedang berjalan di latar belakang.


10. Checklist Penerapan Produksi & Kesimpulan

Sebelum meluncurkan sistem ke lingkungan produksi live, pastikan checklist berikut telah terpenuhi:

  • Repositori Git terkunci dengan aturan Branch Protection (wajib Pull Request dan Code Review).
  • ArgoCD dikonfigurasi dengan automated sync dan self-heal aktif.
  • Konfigurasi maxUnavailable: 0 dan maxSurge: 1 diterapkan pada semua Deployment.
  • Readiness dan Liveness probes telah diuji dengan skenario kegagalan aplikasi.
  • Secret management terintegrasi dengan aman (menggunakan External Secrets Operator atau HashiCorp Vault).
  • Sistem monitoring (Prometheus & Grafana) memantau metrik pod dan cluster secara real-time.

Dengan menerapkan arsitektur GitOps menggunakan ArgoCD dan Kubernetes di lingkungan hybrid cloud, organisasi Anda tidak hanya mencapai zero-downtime deployment secara konsisten, tetapi juga meningkatkan keamanan, auditabilitas, dan kecepatan inovasi produk secara signifikan.

🏷️ Tags: #Devops #Kubernetes #Gitops #Argocd #Hybrid Cloud