Belajar GitOps dengan ArgoCD - Sync Strategies & Policies
Episode 7 of 36

Belajar GitOps dengan ArgoCD - Sync Strategies & Policies

Mengotomatiskan deployment: strategi sync manual versus automated, opsi seperti prune dan self-healing, urutan eksekusi lewat sync phases dan waves, hingga cara ArgoCD menilai kesehatan aplikasi.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Di episode 6 kalian merasakan kesenangan pertama GitOps — tapi mungkin juga merasakan kerumitan: setiap perubahan harus di-sync manual. Tenang, itu memang dirancang: ArgoCD memisahkan deteksi (selalu otomatis) dari penerapan (bisa otomatis, bisa manual). Keputusan ini berdampak besar pada keamanan dan alur kerja tim.

Episode ini mengupas tuntas sync strategies dan policies: kapan memilih manual vs automated, apa bahaya dan manfaat auto-prune dan self-healing, bagaimana sync options mengubah cara resource diterapkan, bagaimana sync phases dan waves mengatur urutan eksekusi, serta bagaimana health assessment menentukan kondisi aplikasi.

Strategi Sync

Manual Sync

Seperti di episode 6: ArgoCD terus mendeteksi perubahan Git dan menandai OutOfSync, tetapi menunggu persetujuan (argocd app sync api atau tombol di UI). Cocok untuk produksi dengan persetujuan manusia.

Automatic Sync

ArgoCD langsung menerapkan setiap perubahan yang terdeteksi:

ArgoCDMengaktifkan automated sync
argocd app set api --sync-policy automated

atau secara deklaratif:

syncPolicy automated
spec:
  syncPolicy:
    automated:
      prune: false
      selfHeal: false

Auto-sync dengan Prune

Secara default ArgoCD tidak menghapus resource yang hilang dari Git — ini melindungi dari kesalahan hapus massal. Dengan prune: true, resource yang tidak ada lagi di Git ikut dihapus:

ArgoCDAutomated sync + prune + self-heal
argocd app set api --sync-policy automated --auto-prune --self-heal

Self-Healing

Tanpa self-heal, jika seseorang mengubah Deployment manual (kubectl scale deployment api --replicas=10), ArgoCD akan menandai OutOfSync tapi tidak membatalkan perubahan. Dengan selfHeal: true, ArgoCD mengembalikan resource ke kondisi Git secara otomatis.

Warning

Kombinasi automated + prune + self-heal adalah mode paling "agresif". Aman hanya jika repository Git kalian rapi dan semua perubahan melalui PR. Di lingkungan ramai, hidupkan fitur ini bertahap dan pantau event ArgoCD.

Sync Windows

Sync windows membatasi kapan auto-sync boleh berjalan — misalnya jendela maintenance atau freeze periode:

Sync windows di Project
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: default
spec:
  syncWindows:
    - kind: deny
      schedule: "0 22 * * *"
      duration: "8h"
      applications:
        - "*-prod"

Kode di atas melarang auto-sync untuk semua aplikasi berakhiran -prod mulai jam 22.00 selama 8 jam. Sync manual tetap bisa dijalankan oleh yang punya izin.

Sync Options

Sync options adalah penyesuaian detail pada cara resource diterapkan. Beberapa yang paling sering dipakai:

OptionEfek
Prune=trueHapus resource yang tidak ada di Git
Replace=trueGanti resource dengan DELETE + CREATE (bukan update)
ApplyOutOfSyncOnly=trueApply hanya resource yang berbeda
ServerSideApply=truePakai server-side apply (field ownership)
RespectIgnoreDifferences=trueHormati daftar ignore differences saat meng-apply
Force=trueBypass resource conflict (misal immutability)

Contoh penggunaan:

ArgoCDMenerapkan sync options via CLI
argocd app set api \
  --sync-option ServerSideApply=true \
  --sync-option Force=true

Tip

ApplyOutOfSyncOnly=true mempercepat sync besar karena ArgoCD hanya menyentuh resource yang berbeda, bukan seluruh daftar manifest.

Sync Phases dan Hooks

Setiap sync melewati fase berurutan, dan di sela fasenya ArgoCD menjalankan resource hooks (misal Job). Fase utamanya:

FaseUrutanKegunaan
PreSync1Migrasi database, backup, validasi
Sync2Penerapan resource utama
PostSync3Smoke test, notifikasi sukses
SyncFail3 (jika gagal)Rollback, notifikasi gagal
Skip-Melewatkan fase tertentu

Hook ditandai lewat anotasi pada resource:

Hook PreSync untuk migrasi database
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
  namespace: production
  annotations:
    argocd.argoproj.io/hook: PreSync
spec:
  template:
    spec:
      restartPolicy: Never
      containers:
        - name: migrate
          image: ghcr.io/arman/api:v1.0.0
          command: ["node", "migrate.js"]

ArgoCD menahan fase berikutnya sampai hook selesai dengan sukses.

Sync Waves: Mengatur Urutan

Fase menata tahapan, sync waves menata urutan dalam satu fase. Semua resource diberi bobot anotasi (default 0), dieksekusi dari nilai terkecil ke terbesar:

Mengatur urutan dengan sync-wave
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "0"   # namespace, config
---
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "1"   # ConfigMap, Secret, database
---
metadata:
  annotations:
    argocd.argoproj.io/sync-wave: "2"   # Deployment, Service

Resource dalam wave yang sama diterapkan paralel; antar wave diterapkan berurutan. Pola umum: 0 untuk Namespace/ConfigMap, 1 untuk database/stateful, 2 untuk aplikasi.

Health Assessment

Setelah sync, ArgoCD menilai kesehatan resource:

  • Healthy — berjalan sesuai harapan; Deployment semua replika Ready.
  • Progressing — masih dalam proses (misal rollout belum selesai).
  • Degraded — ada yang salah: pod CrashLoopBackOff, replica tidak siap.
  • Suspended — resource sengaja diskalakan ke nol.
Membaca status aplikasi
argocd app get api
Project: default, Server: https://kubernetes.default.svc
Health Status: Healthy
Sync Status:   Synced

Note

Health check ArgoCD mengikuti aturan bawaan per resource (Deployment, StatefulSet, dsb) dan bisa dikustomisasi lewat argocd.argoproj.io/health-check annotations untuk CRD milik sendiri.

Penutup

Kalian kini mengendalikan bagaimana dan kapan perubahan diterapkan:

  • Pilih manual (persetujuan) atau automated (otomatis) untuk setiap aplikasi.
  • prune dan self-heal membuat cluster selalu mengikuti Git, dengan risiko yang harus dipahami.
  • Sync windows membatasi auto-sync pada jendela waktu tertentu.
  • Sync options seperti Prune, ServerSideApply, Force mengubah cara apply.
  • Fase PreSync/Sync/PostSync/SyncFail dengan hooks; sync waves mengatur urutan.
  • Health: Healthy, Progressing, Degraded, Suspended.

Semua contoh sejauh ini memakai manifest polos. Di episode 8 kita akan mengelola konfigurasi yang jauh lebih realistis: menggunakan Helm dan Kustomize sebagai sumber Application — chart, values files, hooks Helm, base dan overlays Kustomize, hingga kombinasi keduanya. Sampai jumpa!

Belajar GitOps dengan ArgoCD - Sync Strategies & Policies | Belajar GitOps dengan ArgoCD