🚀
CI/CD & GitOps

Argo CD

GitOps continuous delivery for Kubernetes

🐧 Linux🍎 Mac🪟 Windows📋 Quick reference →
Reviewed: Tested on: Kubernetes 1.29 · Terraform 1.8 · Ubuntu 22.04

If you're on Kubernetes 1.27 or older

  • Ingress: networking.k8s.io/v1 is required — v1beta1 removed in 1.22+
  • Pod Security: PodSecurityPolicy removed in 1.25 — use Pod Security Admission (PSA) labels
  • HPA v2 autoscaling/v2 is stable — check API version in manifests

If you're on Kubernetes 1.28

  • Sidecar containers (1.29+) change init-container ordering — review sidecar docs before upgrade
  • Verify metrics-server and HPA after control plane bump

What is this?

Argo CD watches your Git repo and automatically deploys changes to Kubernetes — no manual kubectl needed.

📁

Config files for Argo CD

Where to create or edit the main configuration — paths below match the setup steps.

  • application.yaml

    Location: Git repo watched by Argo CD

    App source, destination cluster, sync policy

📥

Step 01

Install Argo CD

(01)Install Argo CD

Linux
1# Install Argo CD CLI
2curl -sSL -o argocd https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
3chmod +x argocd && sudo mv argocd /usr/local/bin/
4
5# Install Argo CD on cluster
6kubectl create namespace argocd
7kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
⚙️

Step 02

Configure Argo CD

(01)Configure Argo CD

Linux
1kubectl port-forward svc/argocd-server -n argocd 8080:443
2argocd login localhost:8080
3argocd app create myapp --repo https://github.com/user/repo --path k8s --dest-server https://kubernetes.default.svc --dest-namespace default

Step 03

Verify

(01)Verify installation

Linux
1kubectl get pods -n argocd
2argocd app list

Step 04

Manage Argo CD

(01)Common tasks

Linux
1argocd app sync myapp
2argocd app get myapp

📋Config templates

3 YAML templates for Argo CD. Copy and deploy after setup.

3 ready-to-copy templates. Expand one, copy the YAML, then run the deploy commands.

deployment.yml

Deployment with resource requests/limits and local image

yaml
1apiVersion: apps/v1
2kind: Deployment
3metadata:
4 labels:
5 app: api-deploy
6 name: api-deploy
7spec:
8 replicas: 1
9 selector:
10 matchLabels:
11 app: api-deploy
12 template:
13 metadata:
14 labels:
15 app: api-deploy
16 spec:
17 containers:
18 - image: api:local
19 name: api
20 imagePullPolicy: IfNotPresent
21 ports:
22 - containerPort: 3000
23 resources:
24 limits:
25 memory: "512Mi"
26 cpu: "500m"
27 requests:
28 memory: "256Mi"
29 cpu: "250m"

services.yml

NodePort Service exposing the API on port 32000

yaml
1apiVersion: v1
2kind: Service
3metadata:
4 labels:
5 app: api-deploy
6 name: api-deploy-service
7spec:
8 type: NodePort
9 selector:
10 app: api-deploy
11 ports:
12 - port: 3000
13 protocol: TCP
14 targetPort: 3000
15 nodePort: 32000
📄

Step 01

Apply to Kubernetes

(01)Build image and load into cluster

Linux
1# Build local image
2docker build -t api:local .
3
4# For Minikube / Kind — load image into cluster
5minikube image load api:local
6# OR: kind load docker-image api:local

(02)Apply manifests

Linux
1kubectl apply -f deployment.yml
2kubectl apply -f services.yml
3kubectl get pods,svc
4curl http://localhost:32000 # or minikube service api-deploy-service