Skip to main content

ArgoCD

Purpose: GitOps continuous delivery platform

Version: Helm chart 9.4.10

Namespace: argocd

Description

ArgoCD watches your Git repository and automatically syncs the desired application state to your Kubernetes cluster. It eliminates the need for manual kubectl apply commands.

This is the core component of my home Kubernetes lab, managing all system applications and user workloads through GitOps principles.

Installation

Installed via the system-apps chart using multi-source Helm:

sources:
- repoURL: https://argoproj.github.io/argo-helm
chart: argo-cd
targetRevision: 9.4.10
- repoURL: https://github.com/simran2491/k8s-playground-cluster
ref: values

Configuration

Configuration file: cluster/dev/argocd-values.yaml

The ArgoCD configuration includes:

  • LoadBalancer service for external access
  • Metrics enabled for Prometheus scraping
  • Increased repo-server resources to prevent OOM errors
  • Ingress with TLS via cert-manager

Access

Credentials

Username: admin

Password:

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d

Components

ComponentServicePortMetrics
argocd-serverargocd-server80, 4438083
argocd-repo-serverargocd-repo-server80818084
argocd-application-controllerargocd-application-controller (statefulset)-8082
argocd-applicationset-controllerargocd-applicationset-controller70008080
argocd-dex-serverargocd-dex-server5556, 55575558
argocd-redisargocd-redis6379-

Metrics

ArgoCD exposes Prometheus metrics via ServiceMonitors:

  • Server: argocd-server-metrics:8083/metrics
  • Repo Server: argocd-repo-server-metrics:8084/metrics
  • Application Controller: argocd-application-controller-metrics:8082/metrics
  • ApplicationSet Controller: argocd-applicationset-controller:8080/metrics

Prometheus scrapes these automatically via ServiceMonitor with label release: kube-prometheus-stack

GitOps Workflow

  1. Changes are committed to Git repository
  2. Release tag is created via make prepare-release
  3. ArgoCD syncs the changes automatically
  4. Application state matches Git desired state

All system applications are managed through ArgoCD with sync waves to ensure proper deployment order.

AppProject

All applications are deployed under the playground project which allows:

  • Source repos: This GitHub repository (https://github.com/simran2491/k8s-playground-cluster)
  • Destinations: Any namespace on the local cluster
  • Cluster resources: Whitelisted kinds (Namespaces, PersistentVolumes, etc.)

The AppProject is defined in charts/argocd-project/values.yaml and is self-managed by ArgoCD.