A production-style GitOps platform deploying a 12-service microservices application on Kubernetes using ArgoCD, Kustomize, and automated sync policies — demonstrating real-world GitOps workflows.
Manual kubectl apply deployments are error-prone, untracked, and hard to audit. This platform implements a GitOps workflow where Git is the single source of truth — every deployment is driven by a git commit, ArgoCD continuously reconciles cluster state with the declared state in the repo, and any configuration drift is automatically self-healed.
┌─────────────────────────────────────────────────────────────────┐
│ GitOps Workflow │
│ │
│ Developer │
│ pushes YAML ──▶ GitHub Repo ──▶ ArgoCD watches repo │
│ (source of │ │
│ truth) ▼ │
│ ArgoCD syncs ──▶ Kubernetes │
│ (automated Cluster │
│ prune + │
│ selfHeal) │
└─────────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────────┐
│ 12-Service Microservices on Kubernetes │
│ │
│ Frontend Adservice Cartservice │
│ Checkoutservice Currencyservice Emailservice │
│ Loadgenerator Paymentservice Productcatalogservice │
│ Recommendationservice Shippingservice │
│ ShoppingAssistantservice VectorDB │
│ │
│ Base manifests (Kustomize) + Overlays (env-specific configs) │
└─────────────────────────────────────────────────────────────────┘
- 12 ArgoCD Application objects — each microservice has its own ArgoCD
Applicationmanifest with automated sync, pruning, and self-healing enabled - Kustomize-based config management —
base/holds default manifests;overlays/holds environment-specific patches (staging, production) - Automated sync policy —
prune: trueremoves stale resources;selfHeal: trueautomatically corrects manual changes made to the cluster - HTTPS + TLS security — documented in
HTTPS-SECURITY.md; ingress configured with TLS termination - PostgreSQL included as a backing service with persistent volume configuration
- VectorDB service included for AI/ML-ready workloads (shopping assistant with vector search)
- Namespace auto-creation via
CreateNamespace=truesyncOption — no manual namespace setup needed - GitOps architecture documented —
GITOPS-ARCHITECTURE.mdandARCHITECTURE.mdexplain the full design
argocd-gitops-kubernetes-platform/
├── base/ # Kustomize base manifests
│ ├── adservice/
│ ├── authservice/
│ ├── cartservice/
│ ├── checkoutservice/
│ ├── currencyservice/
│ ├── emailservice/
│ ├── frontend/
│ ├── loadgenerator/
│ ├── paymentservice/
│ ├── productcatalogservice/
│ ├── recommendationservice/
│ ├── shippingservice/
│ ├── shoppingassistantservice/
│ └── vectordb/
├── overlays/ # Environment-specific patches
├── postgres/ # PostgreSQL deployment manifests
├── argocd-app.yaml # All 12 ArgoCD Application definitions
├── kustomization.yaml # Root Kustomize config
├── ARCHITECTURE.md # System architecture overview
├── GITOPS-ARCHITECTURE.md # GitOps workflow documentation
├── HTTPS-SECURITY.md # TLS/HTTPS setup guide
└── README.md
- Kubernetes cluster running (local: kind/minikube, or cloud: EKS/GKE/AKS)
kubectlconfigured- ArgoCD installed in the cluster
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
# Access ArgoCD UI
kubectl port-forward svc/argocd-server -n argocd 8080:443# Clone this repo
git clone https://github.com/pavangm196-devops/argocd-gitops-kubernetes-platform.git
cd argocd-gitops-kubernetes-platform
# Apply all ArgoCD Application manifests
kubectl apply -f argocd-app.yaml
# Verify all apps are synced
kubectl get applications -n argocd# Check all services are running
kubectl get pods -n default
# Watch ArgoCD sync status
argocd app list# Preview what will be deployed for a specific environment
kubectl kustomize overlays/production/
# Apply a specific overlay
kubectl apply -k overlays/production/Each ArgoCD Application in argocd-app.yaml is configured with:
syncPolicy:
automated:
prune: true # Deletes resources removed from Git
selfHeal: true # Reverts manual changes made directly to cluster
syncOptions:
- CreateNamespace=true # Auto-creates namespace if missingThis means: the cluster always matches Git. No manual kubectl apply needed after initial setup.
| Skill | How it's shown |
|---|---|
| GitOps | ArgoCD-driven deployments, Git as single source of truth |
| ArgoCD | Application CRDs, automated sync, prune, self-heal |
| Kustomize | Base + overlays pattern for multi-environment config |
| Kubernetes | 12-service microservices deployment, namespaces, services |
| Security | HTTPS/TLS ingress configuration |
| Platform Engineering | Scalable GitOps setup any team can operate |
Pavan G M — DevOps Engineer | AWS Certified Solutions Architect (SAA-C03) | CKA Certified