# GitOps dengan ArgoCD dan Flux CD

> Implementasi GitOps untuk Kubernetes menggunakan ArgoCD dan Flux CD — di mana Git menjadi satu-satunya sumber kebenaran. Bandingkan kedua tool dengan contoh manifest nyata dan otomatisasi image update.

URL: https://www.matthewswong.com/id/blog/gitops-argocd-flux/

- Author: Matthews Wong (https://www.matthewswong.com/id/about/)
- Published: 2024-10-30
- Updated: 2024-10-30
- Category: DevOps

GitOps dengan ArgoCD dan Flux CD merupakan salah satu perubahan paling signifikan dalam praktik delivery Kubernetes. Ide utamanya elegan: repository Git Anda adalah satu-satunya sumber kebenaran untuk kondisi cluster yang diinginkan. Setiap perubahan — baik deployment baru, pembaruan config map, maupun bump versi Helm chart — melalui pull request, direview, dan secara otomatis diterapkan ke cluster. Tidak ada lagi kubectl apply dari mesin lokal.

## Apa itu GitOps dan Mengapa Penting

GitOps adalah sekumpulan praktik di mana seluruh kondisi sistem di-versioning di Git dan operator otomatis terus merekonsiliasi cluster agar sesuai. Empat prinsip yang didefinisikan oleh OpenGitOps adalah: konfigurasi deklaratif, state yang di-versioning dan bersifat immutable, ditarik secara otomatis (cluster menarik dari Git, bukan CI yang push ke cluster), dan direkonsiliasi secara berkelanjutan. Pendekatan ini menghilangkan configuration drift, membuat rollback semudah me-revert commit, dan menciptakan audit trail lengkap untuk setiap perubahan infrastruktur.

### ArgoCD: GitOps Berbasis UI untuk Kubernetes

ArgoCD adalah tool continuous delivery berbasis pull yang berjalan di dalam cluster Kubernetes dan memantau repository Git untuk perubahan. ArgoCD dilengkapi dengan web UI yang kaya dan CLI yang menampilkan secara tepat resource mana yang sinkron dan mana yang telah menyimpang dari kondisi yang diinginkan. ArgoCD mendukung Helm, Kustomize, jsonnet, dan YAML biasa — sehingga mudah beradaptasi dengan struktur repo apa pun.

## Flux CD: Alternatif yang Telah Lulus CNCF

Flux CD mengambil pendekatan yang lebih native terhadap GitOps: alih-alih operator monolitik, Flux adalah kumpulan controller Kubernetes — source controller, kustomize controller, helm controller, notification controller, dan image automation controller. Setiap controller memantau custom resource-nya sendiri dan merekonsiliasi secara independen. Flux terintegrasi erat dengan Kustomize dan mendukung multi-tenancy melalui isolasi namespace.

### Resource GitRepository dan Kustomization di Flux

Di Flux, Anda mendefinisikan resource GitRepository yang menunjuk ke repo konfigurasi Anda dan menentukan interval polling. Resource Kustomization kemudian mereferensikan GitRepository tersebut, menentukan path yang akan diterapkan, dan mendeklarasikan health check. Flux akan terus menyinkronkan cluster agar sesuai dengan manifest di path tersebut, sekaligus menghapus (prune) resource yang dihilangkan dari Git.

## Pembaruan Image Otomatis

Baik ArgoCD maupun Flux mendukung pembaruan tag image secara otomatis — fitur penting bagi tim yang menginginkan delivery sepenuhnya otomatis. Saat container image baru di-push ke registry, image automation controller memperbarui tag image di config repo Git, yang memicu sinkronisasi dan men-deploy versi baru. Ini menciptakan siklus delivery yang lengkap dan berbasis Git tanpa langkah manual.

### Konfigurasi Flux Image Updater

Controller image automation Flux menggunakan dua resource: ImageRepository yang melakukan polling ke container registry secara berkala, dan ImagePolicy yang memilih tag mana yang akan dipromosikan berdasarkan rentang semver, urutan alfabetis, atau pola regex. Resource ketiga, ImageUpdateAutomation, melakukan commit tag yang diperbarui kembali ke Git — melengkapi siklus tersebut.

> Gunakan repository Git terpisah untuk kode aplikasi dan konfigurasi Kubernetes (pola 'app-of-apps' di ArgoCD, atau repo sumber terpisah di Flux). Ini mencegah sistem CD Anda memicu dirinya sendiri saat melakukan commit pembaruan tag image kembali ke config repo.

> **Hati-hati dengan Auto-Sync di Cluster Production**

> Mengaktifkan auto-sync dengan selfHeal dan prune di production sangat kuat namun berisiko. Commit Git yang tidak disengaja (file salah, resolusi merge conflict, merge PR otomatis) akan langsung mengubah production. Banyak tim mengaktifkan auto-sync hanya untuk staging dan memerlukan langkah persetujuan sinkronisasi manual untuk production menggunakan sync windows ArgoCD atau fitur suspend Kustomization Flux.

## ArgoCD vs Flux: Mana yang Harus Dipilih?

ArgoCD adalah pilihan lebih baik jika Anda menginginkan UI yang kaya, manajemen multi-cluster yang dikontrol RBAC, dan tampilan terpadu dari semua aplikasi. Flux adalah pilihan lebih baik jika Anda lebih menyukai pendekatan berbasis controller yang ringan dan cocok secara alami dengan tooling Kubernetes yang ada, atau jika Anda membutuhkan multi-tenancy yang kuat dan otomatisasi GitOps dalam skala besar. Keduanya adalah proyek CNCF dengan komunitas yang kuat — pilihan terbaik bergantung pada preferensi tim Anda.

## Terminologi GitOps yang Perlu Diketahui

Untuk memulai GitOps di production: mulai dengan satu aplikasi yang tidak kritis, gunakan Kustomize overlay untuk mengelola perbedaan environment, siapkan notifikasi Slack untuk event sinkronisasi dan perubahan status health, dan terapkan branch protection pada config repo Anda agar semua perubahan memerlukan review PR. Secara bertahap perluas GitOps untuk mencakup seluruh cluster saat tim Anda semakin percaya diri dengan alur kerjanya.

## Source links

- https://argo-cd.readthedocs.io/en/stable/
- https://fluxcd.io/docs/
- https://opengitops.dev/

## FAQ

### Apa prinsip utama GitOps, dan bagaimana ArgoCD serta Flux menerapkannya?

GitOps menjadikan repository Git sebagai satu-satunya sumber kebenaran untuk kondisi cluster yang diinginkan. Baik ArgoCD maupun Flux menggunakan model berbasis pull — cluster menarik perubahan dari Git, bukan CI yang push ke cluster — dan secara terus-menerus merekonsiliasi kondisi live agar sesuai dengan yang dideklarasikan di Git, sehingga menghilangkan configuration drift.

### Apa perbedaan arsitektur utama antara ArgoCD dan Flux CD?

ArgoCD adalah operator monolitik dengan web UI yang kaya dan CLI yang memberikan tampilan terpadu untuk semua aplikasi. Flux adalah kumpulan controller Kubernetes yang independen (source, kustomize, helm, notification, dan image automation controller), masing-masing mengelola custom resource-nya sendiri, sehingga lebih ringan dan mudah dikombinasikan dengan tooling Kubernetes yang sudah ada.

### Bagaimana pembaruan tag image otomatis bekerja di Flux, dan mengapa repo konfigurasi terpisah direkomendasikan?

Flux menggunakan tiga resource: ImageRepository yang melakukan polling ke container registry secara berkala, ImagePolicy yang memilih tag mana yang dipromosikan berdasarkan semver, urutan alfabetis, atau regex, dan ImageUpdateAutomation yang melakukan commit tag yang diperbarui kembali ke Git untuk memicu sinkronisasi. Repository Git terpisah untuk kode aplikasi dan konfigurasi Kubernetes direkomendasikan agar sistem CD tidak memicu dirinya sendiri saat melakukan commit pembaruan tag image kembali ke config repo.

### Mengapa tim harus berhati-hati dalam mengaktifkan auto-sync dengan selfHeal dan prune di cluster production?

Dengan selfHeal dan prune diaktifkan, commit Git yang tidak disengaja — file salah, resolusi merge conflict, atau merge PR otomatis — akan langsung mengubah production. Post ini merekomendasikan mengaktifkan auto-sync hanya untuk staging dan memerlukan persetujuan sinkronisasi manual untuk production menggunakan sync windows ArgoCD atau fitur suspend Kustomization Flux.

### Kapan sebaiknya memilih ArgoCD dibandingkan Flux, dan sebaliknya?

ArgoCD lebih cocok jika tim Anda menginginkan UI yang kaya, manajemen multi-cluster yang dikontrol RBAC, dan tampilan terpadu dari semua aplikasi. Flux lebih tepat jika Anda membutuhkan pendekatan berbasis controller yang ringan dan terintegrasi secara alami dengan tooling Kubernetes yang ada, atau jika multi-tenancy yang kuat melalui isolasi namespace menjadi prioritas. Keduanya adalah proyek CNCF dengan komunitas yang kuat, sehingga pilihan akhir bergantung pada preferensi tim.

---

- HTML version: https://www.matthewswong.com/id/blog/gitops-argocd-flux/
- English: https://www.matthewswong.com/en/blog/gitops-argocd-flux/
- Site index for agents: https://www.matthewswong.com/llms.txt
- Sitemap: https://www.matthewswong.com/sitemap.xml
- API description (OpenAPI): https://www.matthewswong.com/openapi.json
