The Challenge
Ever pushed an update to your Kubernetes app and suddenly… Downtime!
Users frustrated, services unavailable, and rollback becomes a nightmare. Sounds familiar?
The Solution: GitOps + ArgoCD
With ArgoCD, we eliminate downtime, automate rollbacks, and ensure seamless deployments directly from Git. Here’s how:
- Push your code → ArgoCD auto-syncs and deploys!
- Rolling updates ensure no downtime – users always get a running instance
- Health checks prevent broken deployments – if something fails, ArgoCD rolls back instantly
- Version-controlled deployments – every change is trackable and reversible
Step 1: Start Minikube and Install ArgoCD
Ensure you have Minikube and kubectl installed.
# Start Minikube
minikube start
# Create the ArgoCD namespace
kubectl create namespace argocd
# Install ArgoCD
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
Wait for the ArgoCD pods to be ready:
kubectl get pods -n argocd
Step 2: Expose and Access ArgoCD UI
Expose the ArgoCD API server:
kubectl port-forward svc/argocd-server -n argocd 8080:443
Retrieve the admin password:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 --decode; echo
Login to ArgoCD:
argocd login localhost:8080 --username admin --password <your-password>
Step 3: Connect ArgoCD to Your GitHub Repo
Use SSH authentication since GitHub removed password-based authentication.
argocd repo add git@github.com:ArvindRaja45/rep.git --ssh-private-key-path ~/.ssh/id_rsa
Step 4: Define Kubernetes Manifests
Deployment.yaml (Zero-Downtime Strategy)
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app
labels:
app: my-app
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: my-app
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app
image: myrepo/my-app:latest
ports:
- containerPort: 80
livenessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
Service.yaml (Expose the Application)
apiVersion: v1
kind: Service
metadata:
name: my-app-service
spec:
selector:
app: my-app
ports:
- protocol: TCP
port: 80
targetPort: 80
type: ClusterIP
Ingress.yaml (External Access)
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: my-app-ingress
spec:
rules:
- host: my-app.local
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: my-app-service
port:
number: 80
Step 5: Deploy Application with ArgoCD
argocd app create my-app \
--repo git@github.com:ArvindRaja45/rep.git \
--path minikube \
--dest-server https://kubernetes.default.svc \
--dest-namespace default
Sync the application:
argocd app sync my-app
Monitor the deployment:
kubectl get pods -n default
Step 6: Enable Auto-Rollback on Failure
Edit Deployment.yaml to add readiness probe:
readinessProbe:
httpGet:
path: /
port: 80
initialDelaySeconds: 5
periodSeconds: 10
Apply the changes:
kubectl apply -f deployment.yaml
If a deployment fails due to misconfiguration, ArgoCD will automatically rollback to the last successful version.
Why This is a Game-Changer
- No more downtime – deployments are seamless and controlled
- Fully automated – Git becomes your single source of truth
- Faster rollbacks – mistakes are fixed in seconds, not hours
- Scalable & production-ready – ArgoCD grows with your infrastructure
Conclusion
By integrating ArgoCD into your Kubernetes workflow, you can achieve zero-downtime deployments, automated rollbacks, and seamless application updates—all while ensuring stability and scalability. With Git as the single source of truth, your deployments become more reliable, repeatable, and transparent.
In today’s fast-paced DevOps world, automation is key to maintaining high availability and minimizing risk. Whether you’re running Minikube for development or scaling across multi-cluster production environments, ArgoCD is a game-changer for Kubernetes deployments.
How are you handling deployments in Kubernetes? Have you implemented ArgoCD yet? Share your thoughts!