ArgoCD dan GitOps untuk Kubernetes: Panduan Lengkap serta Pertanyaan Interview 2026

Pelajari cara mengimplementasikan GitOps dengan ArgoCD untuk continuous deployment di Kubernetes. Dilengkapi contoh konfigurasi, perbandingan dengan Flux, dan pertanyaan interview yang sering muncul.

Diagram arsitektur ArgoCD dan GitOps untuk deployment Kubernetes

Dalam era cloud-native modern, pengelolaan deployment aplikasi di Kubernetes memerlukan pendekatan yang terstruktur dan dapat diandalkan. ArgoCD hadir sebagai solusi GitOps yang memungkinkan tim DevOps untuk mendeklarasikan seluruh state infrastruktur dalam repository Git, kemudian secara otomatis menyinkronkan perubahan tersebut ke cluster Kubernetes. Pendekatan ini tidak hanya meningkatkan keandalan deployment, tetapi juga memberikan audit trail yang lengkap untuk setiap perubahan yang dilakukan.

Artikel ini membahas secara mendalam tentang implementasi GitOps menggunakan ArgoCD, mulai dari konsep dasar hingga fitur-fitur lanjutan seperti sync waves dan ApplicationSet. Pembahasan juga mencakup perbandingan dengan Flux serta pertanyaan-pertanyaan yang sering muncul dalam interview DevOps.

Memahami Konsep GitOps

GitOps merupakan paradigma operasional yang menjadikan Git sebagai single source of truth untuk konfigurasi infrastruktur dan aplikasi. Setiap perubahan pada sistem produksi harus melalui pull request, sehingga memberikan mekanisme review yang transparan dan history yang lengkap. Operator GitOps seperti ArgoCD bertugas untuk terus memantau repository Git dan memastikan state cluster selalu sesuai dengan yang dideklarasikan dalam repository tersebut.

Mengapa ArgoCD Menjadi Pilihan Utama untuk GitOps?

ArgoCD telah menjadi standar de facto untuk implementasi GitOps di ekosistem Kubernetes. Beberapa keunggulan yang menjadikan ArgoCD pilihan utama antara lain kemampuan visualisasi yang komprehensif melalui web UI bawaan, dukungan multi-cluster yang solid, serta integrasi yang baik dengan berbagai tools dalam ekosistem CNCF.

Arsitektur ArgoCD terdiri dari beberapa komponen utama: API Server yang menangani request dari UI dan CLI, Repository Server yang melakukan cloning dan parsing konfigurasi dari Git, serta Application Controller yang melakukan reconciliation antara desired state dan actual state di cluster. Pemisahan komponen ini memungkinkan skalabilitas yang baik untuk mengelola ratusan aplikasi dan multiple cluster.

Konfigurasi Dasar ArgoCD Application

Untuk memulai penggunaan ArgoCD, langkah pertama adalah mendefinisikan Application resource yang mendeskripsikan aplikasi yang akan di-deploy. Berikut contoh konfigurasi dasar yang dapat dijadikan template:

yaml
# argocd-application.yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-web-app
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/acme/my-web-app-config
    targetRevision: main
    path: 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 the cluster
    syncOptions:
      - CreateNamespace=true

Konfigurasi di atas mendemonstrasikan beberapa fitur penting ArgoCD. Field syncPolicy.automated mengaktifkan auto-sync sehingga setiap perubahan di Git akan otomatis diterapkan ke cluster. Opsi prune: true memastikan resource yang sudah dihapus dari Git juga akan dihapus dari cluster, sementara selfHeal: true akan mengembalikan perubahan manual yang dilakukan langsung di cluster ke state yang didefinisikan di Git.

Mengelola Database Migration dengan Sync Waves

Salah satu tantangan dalam deployment aplikasi adalah koordinasi urutan eksekusi berbagai resource. Misalnya, database migration harus selesai sebelum deployment aplikasi baru dimulai. ArgoCD menyediakan fitur sync waves dan hooks untuk mengatasi hal ini.

yaml
# migration-job.yaml
apiVersion: batch/v1
kind: Job
metadata:
  name: db-migrate
  annotations:
    argocd.argoproj.io/sync-wave: "-1"   # Runs before wave 0
    argocd.argoproj.io/hook: PreSync      # Executes before main sync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
  template:
    spec:
      containers:
        - name: migrate
          image: acme/my-web-app:latest
          command: ["python", "manage.py", "migrate"]
      restartPolicy: Never

Dalam contoh di atas, annotation sync-wave: "-1" menentukan bahwa Job ini akan dieksekusi sebelum resource dengan wave 0 atau lebih tinggi. Hook PreSync memastikan migration berjalan sebelum proses sync utama dimulai. Kombinasi kedua annotation ini menjamin database schema selalu diperbarui sebelum aplikasi baru di-deploy.

Siap menguasai wawancara DevOps Anda?

Berlatih dengan simulator interaktif, flashcards, dan tes teknis kami.

Multi-Cluster Deployment dengan ApplicationSet

Untuk organisasi yang mengelola multiple cluster, mendefinisikan Application satu per satu untuk setiap cluster menjadi tidak praktis. ArgoCD menyediakan ApplicationSet controller yang memungkinkan pembuatan Application secara dinamis berdasarkan berbagai generator.

yaml
# applicationset-clusters.yaml
apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: my-web-app-all-clusters
  namespace: argocd
spec:
  generators:
    - clusters:
        selector:
          matchLabels:
            env: production
  template:
    metadata:
      name: 'my-web-app-{{name}}'
    spec:
      project: default
      source:
        repoURL: https://github.com/acme/my-web-app-config
        targetRevision: main
        path: 'overlays/{{metadata.labels.region}}'
      destination:
        server: '{{server}}'
        namespace: production
      syncPolicy:
        automated:
          prune: true
          selfHeal: true

Konfigurasi ApplicationSet di atas menggunakan cluster generator yang akan membuat Application untuk setiap cluster dengan label env: production. Template variables seperti {{name}}, {{server}}, dan {{metadata.labels.region}} akan digantikan dengan nilai aktual dari masing-masing cluster. Pendekatan ini sangat efektif untuk deployment ke puluhan atau bahkan ratusan cluster dengan konfigurasi yang konsisten.

Struktur Repository yang Direkomendasikan

Organisasi repository konfigurasi yang baik sangat penting untuk maintainability jangka panjang. Berikut struktur yang direkomendasikan menggunakan Kustomize:

text
# Recommended repository structure
my-web-app-config/
  base/
    deployment.yaml
    service.yaml
    kustomization.yaml
  overlays/
    staging/
      kustomization.yaml       # Patches for staging
      replica-count.yaml
    production/
      kustomization.yaml       # Patches for production
      replica-count.yaml
      hpa.yaml

Struktur ini memisahkan konfigurasi dasar di folder base/ dengan konfigurasi spesifik environment di folder overlays/. Pendekatan ini memudahkan pengelolaan perbedaan konfigurasi antar environment tanpa duplikasi yang berlebihan.

Perbandingan ArgoCD vs Flux

Dalam ekosistem GitOps untuk Kubernetes, ArgoCD dan Flux merupakan dua pilihan utama. Masing-masing memiliki karakteristik yang berbeda dan cocok untuk use case tertentu. Berikut perbandingan komprehensif antara keduanya:

| Fitur | ArgoCD 3.4 | Flux 2.8 | |-------|-----------|----------| | Arsitektur | Server terpusat dengan UI | Controller terdistribusi per cluster | | Web UI | Dashboard bawaan yang lengkap | Tidak ada UI bawaan (tersedia opsi pihak ketiga) | | Dukungan Helm | Render template di sisi server | Integrasi native dengan Helm SDK | | Multi-cluster | Hub-and-spoke dari satu instance | Instalasi independen per cluster | | RBAC | Level aplikasi dengan SSO | Kubernetes-native RBAC saja | | Automasi image | Komponen Image Updater terpisah | Image reflector/automation bawaan | | Progressive delivery | Integrasi dengan Argo Rollouts | Integrasi dengan Flagger | | Resource footprint | Lebih tinggi (API server, repo server, Redis) | Lebih rendah (hanya controller yang diperlukan) |

Pemilihan antara ArgoCD dan Flux sebaiknya didasarkan pada kebutuhan spesifik organisasi. ArgoCD lebih cocok untuk tim yang membutuhkan visualisasi komprehensif dan manajemen terpusat, sementara Flux lebih sesuai untuk organisasi yang mengutamakan arsitektur terdistribusi dan resource footprint minimal.

Optimasi dengan Webhook

Secara default, ArgoCD melakukan polling ke repository Git setiap 3 menit untuk mendeteksi perubahan. Untuk deployment yang lebih responsif, disarankan untuk mengkonfigurasi webhook dari Git provider (GitHub, GitLab, Bitbucket) ke ArgoCD. Dengan webhook, ArgoCD akan segera memulai proses sync begitu ada push ke repository, mengurangi delay deployment secara signifikan.

Fitur Baru di ArgoCD 3.4

Rilis ArgoCD 3.4 membawa beberapa peningkatan signifikan. Salah satu fitur yang paling dinantikan adalah kemampuan untuk pause reconciliation pada cluster tertentu, sangat berguna saat melakukan maintenance:

yaml
# Pause reconciliation on a specific cluster
apiVersion: v1
kind: Secret
metadata:
  name: prod-cluster
  namespace: argocd
  labels:
    argocd.argoproj.io/secret-type: cluster
  annotations:
    argocd.argoproj.io/pause-reconciliation: "true"
stringData:
  server: https://prod-cluster.example.com
  config: |
    { "tlsClientConfig": { "insecure": false } }

Fitur lain yang sangat membantu adalah dukungan glob pattern untuk Helm value files, menyederhanakan konfigurasi yang sebelumnya memerlukan pendefinisian eksplisit setiap file:

yaml
# Before ArgoCD 3.4
source:
  helm:
    valueFiles:
      - values.yaml
      - values-production.yaml
      - values-production-eu.yaml
      - values-production-eu-secrets.yaml

# With ArgoCD 3.4 value globs
source:
  helm:
    valueFiles:
      - values.yaml
      - values-production*.yaml

Pertanyaan Interview yang Sering Muncul

Bagi profesional DevOps yang mempersiapkan interview, pemahaman mendalam tentang ArgoCD dan GitOps sangat penting. Berikut beberapa pertanyaan yang sering diajukan beserta poin-poin jawaban yang diharapkan.

Tips Interview

Dalam menjawab pertanyaan interview tentang ArgoCD, penting untuk tidak hanya menjelaskan fitur secara teknis, tetapi juga mendemonstrasikan pemahaman tentang trade-off dan best practices. Interviewer biasanya mencari kandidat yang dapat mengartikulasikan kapan menggunakan fitur tertentu dan mengapa, bukan sekadar bagaimana cara menggunakannya.

Bagaimana ArgoCD menangani secret management?

ArgoCD tidak menyediakan solusi secret management bawaan karena menyimpan secret dalam Git repository (meskipun terenkripsi) dianggap sebagai anti-pattern. Pendekatan yang direkomendasikan meliputi integrasi dengan external secret management seperti HashiCorp Vault menggunakan ArgoCD Vault Plugin, penggunaan Sealed Secrets dari Bitnami yang memungkinkan enkripsi secret untuk disimpan di Git, atau pemanfaatan External Secrets Operator yang mensinkronkan secret dari berbagai backend seperti AWS Secrets Manager atau GCP Secret Manager.

Jelaskan perbedaan antara sync dan refresh di ArgoCD?

Refresh merupakan proses membandingkan desired state dari Git dengan actual state di cluster tanpa melakukan perubahan apapun. Operasi ini dilakukan secara periodik atau dapat dipicu manual untuk melihat apakah ada drift. Sync adalah proses aktual untuk menerapkan perubahan ke cluster agar sesuai dengan desired state. Sync dapat dilakukan secara otomatis (dengan automated sync policy) atau manual melalui UI/CLI.

Bagaimana strategi rollback di ArgoCD?

ArgoCD menyimpan history dari setiap deployment yang berhasil. Rollback dapat dilakukan dengan beberapa cara: melalui UI dengan memilih revision sebelumnya dan melakukan sync, menggunakan CLI dengan perintah argocd app rollback, atau yang lebih sesuai dengan prinsip GitOps yaitu melakukan git revert pada commit yang bermasalah dan membiarkan ArgoCD sync ke state sebelumnya. Pendekatan terakhir lebih direkomendasikan karena memastikan Git tetap menjadi source of truth.

Apa itu App of Apps pattern dan kapan menggunakannya?

App of Apps adalah pattern di mana sebuah ArgoCD Application mengelola Application lainnya. Root Application menunjuk ke repository yang berisi manifest Application lainnya. Pattern ini berguna untuk bootstrapping cluster baru dengan seluruh stack aplikasi, mengelola dependencies antar aplikasi, dan memberikan struktur hierarkis untuk organisasi dengan banyak tim. Namun perlu diperhatikan bahwa pattern ini dapat meningkatkan kompleksitas dan sebaiknya digunakan hanya ketika benar-benar diperlukan.

Bagaimana ArgoCD menangani resource yang memiliki dependency?

Selain sync waves yang sudah dibahas, ArgoCD juga mendukung resource hooks (PreSync, Sync, PostSync, SyncFail) untuk operasi yang perlu dijalankan pada fase tertentu, dan sync options seperti SkipDryRunOnMissingResource untuk kasus di mana CRD harus di-deploy sebelum resource yang menggunakannya.

Mulai berlatih!

Uji pengetahuan Anda dengan simulator wawancara dan tes teknis kami.

Kesimpulan

ArgoCD telah membuktikan diri sebagai solusi GitOps yang matang dan dapat diandalkan untuk deployment Kubernetes. Dengan fitur-fitur seperti automated sync, sync waves, dan ApplicationSet, ArgoCD mampu menangani berbagai skenario deployment dari yang sederhana hingga yang kompleks.

Poin-poin utama yang perlu diingat:

  • GitOps menjadikan Git sebagai single source of truth untuk seluruh konfigurasi infrastruktur dan aplikasi
  • ArgoCD menyediakan reconciliation loop yang terus memastikan cluster state sesuai dengan Git
  • Sync waves dan hooks memungkinkan koordinasi urutan deployment yang kompleks
  • ApplicationSet menyederhanakan manajemen deployment ke multiple cluster
  • Pemilihan antara ArgoCD dan Flux harus didasarkan pada kebutuhan spesifik organisasi
  • Secret management sebaiknya menggunakan solusi eksternal seperti Vault atau External Secrets Operator

Dengan pemahaman yang solid tentang konsep-konsep ini, profesional DevOps dapat mengimplementasikan pipeline deployment yang robust, auditable, dan mudah di-maintain. Praktik GitOps dengan ArgoCD tidak hanya meningkatkan reliability deployment, tetapi juga mempermudah kolaborasi tim melalui mekanisme pull request yang familiar.

Mulai berlatih!

Uji pengetahuan Anda dengan simulator wawancara dan tes teknis kami.

Tag

#argocd
#gitops
#kubernetes
#continuous-deployment
#devops
#interview

Bagikan

Artikel terkait