GitOps dengan ArgoCD dan Flux CD

Foto oleh Unsplash

Foto oleh Unsplash
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.
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 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.
# ArgoCD Application manifest
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: my-app
namespace: argocd
spec:
project: default
source:
repoURL: https://github.com/myorg/my-app-config.git
targetRevision: HEAD
path: k8s/overlays/production
destination:
server: https://kubernetes.default.svc
namespace: production
syncPolicy:
automated:
prune: true # Remove resources deleted from Git
selfHeal: true # Revert manual changes in cluster
syncOptions:
- CreateNamespace=trueFlux 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.
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.
# Flux CD — GitRepository + Kustomization
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
name: my-app
namespace: flux-system
spec:
interval: 1m
url: https://github.com/myorg/my-app-config
ref:
branch: main
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: my-app
namespace: flux-system
spec:
interval: 10m
path: ./k8s/production
prune: true
sourceRef:
kind: GitRepository
name: my-app
healthChecks:
- apiVersion: apps/v1
kind: Deployment
name: my-app
namespace: productionGunakan 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.
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.
blog.posts.gitOpsArgoCdFlux.content.subsection3Content
# Image Updater — auto-update image tags from a registry
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImageRepository
metadata:
name: my-app
namespace: flux-system
spec:
image: ghcr.io/myorg/my-app
interval: 5m
---
apiVersion: image.toolkit.fluxcd.io/v1beta2
kind: ImagePolicy
metadata:
name: my-app
namespace: flux-system
spec:
imageRepositoryRef:
name: my-app
policy:
semver:
range: ">=1.0.0" # Only promote semver releasesMengaktifkan 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 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.
GitOps memperkenalkan beberapa kosakata baru di samping istilah Kubernetes yang sudah familiar: GitOps, ArgoCD, Flux CD, Kustomize, and Helm.
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.
Sumber & Bacaan Lanjutan