Dalam pengembangan aplikasi modern, Kubernetes banyak digunakan untuk menjalankan aplikasi dalam lingkungan container. Namun, semakin kompleks sebuah cluster, semakin sulit memastikan konfigurasi dan deployment tetap konsisten.
Di sinilah konsep GitOps menjadi menarik.
GitOps menggunakan repository Git sebagai source of truth untuk konfigurasi dan deployment. Salah satu tools yang populer untuk menerapkan konsep tersebut pada Kubernetes adalah ArgoCD.
Dengan ArgoCD, perubahan konfigurasi yang sudah disimpan di Git dapat disinkronkan ke cluster Kubernetes secara otomatis atau berdasarkan approval yang ditentukan.
Apa Itu GitOps?
GitOps adalah pendekatan pengelolaan infrastruktur dan deployment yang menjadikan Git sebagai sumber kebenaran utama.
Jika menggunakan cara tradisional, developer atau administrator dapat melakukan perubahan langsung pada server atau cluster.
Contohnya:
Developer
↓
kubectl apply
↓
Kubernetes Cluster
Dengan GitOps, alurnya berubah:
Developer
↓
Git Repository
↓
ArgoCD
↓
Kubernetes Cluster
Konfigurasi aplikasi disimpan dalam repository Git. ArgoCD kemudian memantau repository tersebut dan memastikan kondisi cluster mengikuti konfigurasi yang telah didefinisikan.
Apa Itu ArgoCD?
ArgoCD adalah tool continuous delivery untuk Kubernetes yang menerapkan prinsip GitOps.
ArgoCD bekerja dengan membandingkan dua kondisi:
Desired State
Kondisi yang didefinisikan dalam repository Git.
Live State
Kondisi aktual yang sedang berjalan di Kubernetes.
Secara sederhana:
Git Repository
Desired State
|
↓
ArgoCD
|
Compare State
↙ ↘
Desired State Live State
↘ ↙
Kubernetes
Jika keduanya berbeda, ArgoCD dapat mendeteksi adanya drift.
Declarative Deployment pada Kubernetes
GitOps sangat erat kaitannya dengan konsep declarative configuration.
Dalam pendekatan deklaratif, kita mendefinisikan kondisi akhir yang diinginkan, bukan memberikan instruksi satu per satu mengenai bagaimana kondisi tersebut harus dicapai.
Contoh sederhana Deployment Kubernetes:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: nginx:1.27
ports:
- containerPort: 80
Konfigurasi tersebut menyatakan bahwa aplikasi diharapkan memiliki 3 replica dengan image tertentu.
File tersebut dapat disimpan di Git.
Ketika konfigurasi berubah, misalnya:
replicas: 5
perubahan dapat dilakukan melalui Git dan kemudian disinkronkan oleh ArgoCD ke Kubernetes.
Bagaimana ArgoCD Bekerja?
Secara umum, workflow ArgoCD dapat digambarkan seperti berikut:
Developer
|
| git push
↓
Git Repository
|
↓
ArgoCD
|
| compare
↓
Kubernetes Cluster
|
↓
Application Running
ArgoCD secara berkala memeriksa repository dan kondisi cluster.
Jika konfigurasi Git berubah, ArgoCD dapat mendeteksi perubahan tersebut.
1. Developer Mengubah Konfigurasi
Misalnya developer ingin mengubah versi aplikasi:
image: myapp:v1.0
menjadi:
image: myapp:v1.1
Perubahan kemudian di-commit:
git add .
git commit -m "Update application to v1.1"
git push
2. ArgoCD Mendeteksi Perubahan
ArgoCD melihat bahwa konfigurasi di Git sudah berbeda dengan konfigurasi yang sedang berjalan di cluster.
Status aplikasi dapat menunjukkan bahwa terdapat perbedaan antara desired state dan live state.
3. ArgoCD Melakukan Synchronization
Jika konfigurasi aplikasi menggunakan automatic sync, ArgoCD dapat menerapkan perubahan tersebut ke Kubernetes.
Git v1.1
↓
ArgoCD
↓
Sync
↓
Kubernetes
↓
Application v1.1
Jika menggunakan manual sync, administrator dapat melakukan approval terlebih dahulu.
4. Cluster Kembali Sesuai Desired State
Setelah synchronization berhasil:
Git State = Cluster State
Status aplikasi kembali menjadi synchronized.
Apa Itu Drift?
Drift terjadi ketika kondisi aktual Kubernetes berbeda dari konfigurasi yang didefinisikan di Git.
Misalnya Git mendefinisikan:
replicas: 3
Tetapi seseorang mengubah cluster secara langsung:
kubectl scale deployment web-app --replicas=5
Sekarang terjadi:
Git Kubernetes
replicas: 3 replicas: 5
↓ ↓
DIFFERENT
ArgoCD dapat mendeteksi kondisi tersebut.
Hal ini merupakan salah satu keuntungan GitOps karena perubahan pada cluster dapat dibandingkan dengan konfigurasi yang menjadi source of truth.
Automatic Sync
ArgoCD dapat dikonfigurasi untuk melakukan synchronization secara otomatis.
Contohnya:
Git Change
↓
ArgoCD Detect
↓
Automatic Sync
↓
Kubernetes Updated
Dengan pendekatan ini, developer tidak harus menjalankan kubectl apply setiap kali konfigurasi deployment berubah.
Namun, automatic sync tetap perlu dirancang dengan baik. Untuk lingkungan production, organisasi dapat menerapkan approval, testing, policy, dan kontrol deployment sesuai kebutuhan.
Rollback dengan Git
Salah satu keuntungan GitOps adalah perubahan deployment tercatat dalam Git.
Misalnya deployment sebelumnya:
v1.0
Kemudian berubah menjadi:
v1.1
Tetapi versi baru ternyata menyebabkan masalah.
Dengan Git, perubahan dapat ditelusuri melalui commit history.
Contohnya:
Commit A → v1.0
Commit B → v1.1
Jika perlu kembali ke konfigurasi sebelumnya, repository dapat dikembalikan ke commit yang sesuai.
Kemudian ArgoCD akan melihat perubahan desired state tersebut dan melakukan synchronization.
Git
↓
Rollback Commit
↓
ArgoCD
↓
Sync
↓
Kubernetes
Pendekatan ini membuat rollback menjadi lebih terstruktur karena perubahan konfigurasi memiliki histori yang jelas.
Apakah Rollback ArgoCD Benar-Benar Otomatis?
Perlu dibedakan antara automatic synchronization dan automatic rollback.
ArgoCD dapat melakukan synchronization otomatis jika fitur tersebut diaktifkan. Namun, mekanisme rollback bergantung pada strategi deployment dan konfigurasi yang digunakan.
Dalam praktik GitOps, rollback sering dilakukan dengan mengembalikan perubahan pada repository Git sehingga Git kembali menjadi sumber kebenaran.
Untuk kebutuhan deployment yang lebih kompleks, strategi seperti Argo Rollouts dapat digunakan untuk mendukung progressive delivery seperti canary dan blue-green deployment.
Struktur Repository GitOps
Repository GitOps dapat memiliki struktur sederhana seperti:
gitops/
├── apps/
│ └── web-app/
│ ├── deployment.yaml
│ └── service.yaml
│
└── environments/
├── development/
├── staging/
└── production/
Struktur sebenarnya dapat disesuaikan dengan kebutuhan organisasi.
Untuk deployment yang lebih besar, tools seperti Helm atau Kustomize juga sering digunakan untuk mengelola konfigurasi Kubernetes.
GitOps dengan Beberapa Environment
GitOps juga cocok untuk organisasi yang memiliki beberapa environment.
Contohnya:
Development
↓
Staging
↓
Production
Konfigurasi masing-masing environment dapat dikelola melalui Git.
Misalnya:
environment/
├── dev
├── staging
└── production
Developer dapat menguji perubahan di development terlebih dahulu sebelum perubahan diterapkan ke production.
Keuntungan Menggunakan GitOps dan ArgoCD
1. Git Menjadi Source of Truth
Konfigurasi deployment tersimpan secara terpusat di Git.
2. Audit Trail Lebih Jelas
Perubahan dapat dilihat melalui commit history.
Kita dapat mengetahui:
- Apa yang berubah
- Kapan perubahan dilakukan
- Siapa yang melakukan perubahan
- Commit yang terkait
3. Mengurangi Perubahan Manual
Deployment dapat dilakukan tanpa harus selalu menjalankan perintah secara manual pada cluster.
4. Deteksi Configuration Drift
ArgoCD dapat membandingkan desired state dengan live state.
5. Rollback Lebih Terstruktur
Konfigurasi sebelumnya dapat ditelusuri melalui Git history.
6. Konsistensi Environment
Konfigurasi deployment dapat dikelola menggunakan pola yang konsisten di berbagai environment.
Kekurangan dan Tantangan GitOps
GitOps bukan berarti tanpa tantangan.
Beberapa hal yang perlu diperhatikan:
Repository Menjadi Sangat Penting
Jika Git menjadi source of truth, repository harus diamankan dengan baik.
Secret Management
Password, API key, token, dan credential sebaiknya tidak disimpan sebagai plaintext di repository.
Solusi seperti secret manager atau mekanisme encryption dapat digunakan sesuai kebutuhan.
Kurva Pembelajaran
Tim perlu memahami:
- Git
- Kubernetes
- YAML
- ArgoCD
- CI/CD
- Container
- Infrastructure as Code
Struktur Repository
Pada skala besar, repository dapat menjadi kompleks jika struktur konfigurasi tidak dirancang dengan baik.
GitOps vs CI/CD Tradisional
Keduanya sebenarnya tidak harus dianggap sebagai kompetitor.
CI/CD dapat digunakan untuk membangun dan menguji aplikasi.
GitOps kemudian dapat digunakan untuk mengelola deployment ke Kubernetes.
Contohnya:
Developer
↓
Git Push
↓
CI Pipeline
↓
Build & Test
↓
Container Image
↓
Update GitOps Repository
↓
ArgoCD
↓
Kubernetes
Dalam arsitektur seperti ini, CI bertanggung jawab terhadap proses build dan testing, sedangkan ArgoCD bertanggung jawab terhadap deployment berdasarkan desired state.
Contoh Sederhana Arsitektur GitOps
Developer
|
↓
Git Repository
|
┌─────────┴─────────┐
↓ ↓
Application GitOps Config
| |
↓ ↓
Container Image ArgoCD
|
↓
Kubernetes Cluster
|
┌─────────────┼─────────────┐
↓ ↓ ↓
Pod/App Service Ingress
Arsitektur tersebut membuat proses deployment lebih terstruktur dan mudah ditelusuri.
Apakah ArgoCD Cocok untuk Semua Proyek?
Tidak selalu.
Untuk aplikasi kecil yang hanya berjalan pada satu server, menggunakan Kubernetes dan ArgoCD mungkin justru terlalu kompleks.
ArgoCD lebih menarik ketika organisasi sudah menggunakan Kubernetes dan membutuhkan:
- Continuous delivery
- Declarative deployment
- Multi-environment management
- Configuration drift detection
- Auditability
- Automated synchronization
- Git-based deployment workflow
Jadi, teknologi sebaiknya dipilih berdasarkan kebutuhan, bukan hanya karena sedang populer.
Kesimpulan
GitOps menggunakan ArgoCD merupakan pendekatan untuk mengelola deployment Kubernetes secara deklaratif dengan Git sebagai source of truth.
Konsep dasarnya cukup sederhana:
Git
↓
Desired State
↓
ArgoCD
↓
Synchronization
↓
Kubernetes
Ketika konfigurasi di Git berubah, ArgoCD dapat mendeteksi perbedaan dan menyinkronkan cluster sesuai konfigurasi yang telah ditentukan.
Keuntungan utamanya meliputi deployment yang lebih konsisten, audit trail melalui Git, deteksi drift, pengurangan perubahan manual, serta rollback yang lebih terstruktur.
Namun, penerapan GitOps tetap membutuhkan desain repository, pengelolaan secret, security, workflow CI/CD, dan governance yang baik.
SIBRA dan Solusi Teknologi untuk Bisnis
SIBRA membantu bisnis dan organisasi membangun solusi teknologi yang disesuaikan dengan kebutuhan, mulai dari pengembangan website hingga automation dan security.
Layanan SIBRA meliputi:
- Jasa pembuatan website
- Web application
- Software POS
- Sistem informasi custom
- Data scraping dan automation
- SEO dan GEO optimization
- Website monitoring 24/7
- Security hardening
- Penetration testing
- Deployment dan maintenance
Jika bisnis Anda ingin melakukan modernisasi deployment, automation, membangun web application, atau meningkatkan keamanan sistem, kebutuhan tersebut dapat dikonsultasikan terlebih dahulu agar solusi yang dipilih benar-benar sesuai dengan skala dan kebutuhan bisnis.
Konsultasikan kebutuhan teknologi Anda bersama SIBRA secara gratis. Klik tombol di bawah untuk mulai konsultasi.
Diskusi & Komentar