skip to content
Adiatma Blog's

Mengenal ArgoCD

/ 3 min read

Overview

ArgoCD adalah sebuah alat open-source yang digunakan untuk continuous delivery (CD) dalam DevOps, yang memungkinkan otomatisasi, manajemen, dan monitoring aplikasi Kubernetes.

Dikembangkan oleh Argo Project dan disponsori oleh CNCF (Cloud Native Computing Foundation), ArgoCD berfokus pada pendekatan GitOps, di mana Git digunakan sebagai sumber kebenaran utama untuk mendefinisikan dan mengelola infrastruktur serta aplikasi.

Berikut adalah beberapa fitur dan fungsi utama dari ArgoCD:

  • GitOps: ArgoCD mengimplementasikan pendekatan GitOps, di mana konfigurasi aplikasi disimpan dalam repository Git.

  • Deployment Otomatis: ArgoCD secara otomatis mendeteksi perubahan yang dilakukan pada repository Git dan mengaplikasikan perubahan tersebut ke cluster Kubernetes. Hal ini mengurangi intervensi manual dan meningkatkan efisiensi deployment.

  • Sinkronisasi dan Penyimpangan: ArgoCD memantau cluster Kubernetes untuk memastikan bahwa keadaan saat ini konsisten dengan definisi yang ada di repository Git. Jika ditemukan penyimpangan (drift), ArgoCD dapat memberikan notifikasi atau secara otomatis menyinkronkan kembali ke keadaan yang diinginkan.

  • Manajemen Aplikasi: ArgoCD menyediakan antarmuka pengguna yang intuitif, baik berbasis web maupun CLI.

  • Keamanan dan Kontrol Akses: ArgoCD mendukung kontrol akses RBAC.

  • Integrasi dengan CI/CD: ArgoCD dapat diintegrasikan dengan alat continuous integration (CI) lainnya.

  • Multi-Cluster Management: ArgoCD mendukung manajemen aplikasi di beberapa cluster Kubernetes.

Hal - hal yang akan di bahas di artikel ini adalah:

  • Cara setup ArgoCD di cluster Kubernetes.
  • Cara expose ArgoCD ke public DNS dengan menggunakan ingress.
  • Cara setup repository untuk ter-integrasi dengan ArgoCD.
  • Automate deployment dengan ArgoCD.

Pre-requisites

  • ArgoCD CLI
  • kubectl

Getting Started

Install ArgoCD

Terminal window
kubectl create ns argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

Install ArgoCD CLI

Terminal window
brew install argocd

Opsi install dengan OS lainnya https://argo-cd.readthedocs.io/en/stable/cli_installation/

Expose ArgoCD via port-forwarding

Terminal window
kubectl port-forward svc/argocd-server -n argocd 8080:443

Perintah diatas adalah cara untuk meng-expose service argocd-server dari port 443 ke luar port 8080 di komputer lokal kita.

Untuk url nya bisa di akses di http://localhost:8080.

Setup Auth

Login via CLI

Terminal window
argocd admin initial-password -n argocd

Update password

Terminal window
argocd login localhost:8080

Hapus initial password untuk keamanan.

Terminal window
argocd account update-password

Hapus secret intial password

Terminal window
kubectl delete secret/argocd-initial-admin-secret

Expose ArgoCD via Ingress Network

Sekedar informasi argocd default nya ter-expose di port :443 yaitu port HTTPS, untuk di case ini, kita akan merubah configurasi nya.

Plan-nya kita akan expose via ingress traefik, untuk https cukup serahkan ke traefik, di level service cukup expose port 80 saja.

Terminal window
kubectl edit deployment/argocd-server

tambahkan flag —insecure di command entrypoint argocd-server.

Kemudian lanjut edit service svc/argocd-server dan hapus port :443.

Create Ingress

ingress.yaml

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
cert-manager.io/cluster-issuer: letsencrypt-production
name: argocd-server
namespace: argocd
spec:
ingressClassName: traefik
rules:
- host: <example.com>
http:
paths:
- backend:
service:
name: argocd-server
port:
number: 80
path: /
pathType: Prefix
tls:
- hosts:
- <example.com>
secretName: <example.com>
Terminal window
kubectl apply -f ingress.yaml

Tunggu sekitar 30 menit, argocd sudah bisa di akses melalui public DNS.

Create automate deployment with ArgoCD

Selanjutnya kita akan coba deployment dengan menggunakan argcd, untuk manifest nya silahkan lihat di bawah.

application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: nginx
spec:
destination:
namespace: default
server: 'https://kubernetes.default.svc'
source:
path: example/nginx
repoURL: 'https://github.com/ak9024/argocd.git'
targetRevision: HEAD
sources: []
project: default
syncPolicy:
automated:
prune: false
selfHeal: false

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80

service.yaml

apiVersion: v1
kind: Service
metadata:
name: nginx
spec:
ports:
- port: 80
targetPort: 80
selector:
app: nginx

Referensi bisa di cek disini https://github.com/ak9024/argocd/tree/main/example/nginx

Terminal window
kubectl apply -f example/nginx/application.yaml -n argocd

Yup sampai disini harusnya service nginx sudah ter-deploy, dan setiap ada perubahan yang masuk di git repository kita, akan otomatis ter-deploy oleh argocd.