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.