This Proof of Concept demonstrates a complete GitOps workflow using Helm, ArgoCD, GitHub Actions, and Renovate Bot for managing application lifecycle in Kubernetes.
This PoC establishes a practical demonstration of managing the lifecycle of applications embedded with Helm charts using GitOps principles. The outcome serves as a complement and validation for technical documentation focusing on best practices for application deployment, versioning, and dependency management.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ GitHub Repo │ │ ArgoCD │ │ Kubernetes │
│ (GitOps) │◄──►│ (GitOps CD) │◄──►│ Cluster │
│ │ │ │ │ │
│ • App Manifests │ │ • Sync Status │ │ • Applications │
│ • Helm Values │ │ • Health Check │ │ • Services │
│ • Renovate │ │ • Auto-Sync │ │ • Ingress │
└─────────────────┘ └─────────────────┘ └─────────────────┘
▲
│
┌─────────────────┐
│ GitHub Actions │
│ (CI/CD) │
│ │
│ • Validation │
│ • Testing │
│ • Auto-merge │
└─────────────────┘
- Local Cluster: kind/k3d for easy setup and teardown
- ArgoCD: GitOps continuous delivery tool
- PostgreSQL: Database with persistence
- MongoDB: Document database
- Redis: In-memory data store
Note: This PoC uses OCI (Open Container Initiative) Helm charts from Bitnami, which provide better security, faster downloads, and improved reliability compared to traditional Helm repositories.
- ArgoCD Applications: Declarative application definitions
- App-of-Apps: Pattern for managing multiple applications
- Renovate Bot: Automated dependency updates
- GitHub Actions: CI/CD pipeline with validation and auto-merge
-
Prerequisites
# Install required tools brew install kind helm kubectl argocd -
Setup Kubernetes Cluster
# Create kind cluster kind create cluster --name gitops-poc # Install ArgoCD kubectl create namespace argocd kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
-
Access ArgoCD
# Port forward to access UI kubectl port-forward svc/argocd-server -n argocd 8080:443 # Access at https://localhost:8080 # Default username: admin # Get password: kubectl -n argocd get secret argocd-initial-admin-secret \\ # -o jsonpath="{.data.password}" | base64 -d
-
Deploy Applications
# Apply ArgoCD applications kubectl apply -f argocd-applications/
├── README.md # This file
├── kind-config.yaml # Kind cluster configuration
├── argocd-applications/ # ArgoCD application manifests
│ ├── app-of-apps.yaml # Root application
│ ├── postgresql.yaml # PostgreSQL application
│ ├── mongodb.yaml # MongoDB application
│ └── redis.yaml # Redis application
├── .github/ # GitHub configuration
│ ├── workflows/ # GitHub Actions workflows
│ │ ├── renovate-pr.yml # Renovate PR validation
│ │ └── ci.yml # General CI workflow
│ └── renovate.json # Renovate Bot configuration
└── docs/ # Documentation
├── setup.md # Detailed setup instructions
└── architecture.md # Detailed architecture overview
- ✅ ArgoCD applications remain synchronized and healthy
- ✅ Renovate Bot consistently proposes chart updates via PRs
- ✅ GitHub Actions pipeline validates Renovate PRs without errors
- ✅ Complete setup is easily reproducible and well-documented
- Follow the detailed setup instructions in
docs/setup.md - Deploy the applications using ArgoCD
- Configure Renovate Bot for automated updates
- Test the complete GitOps workflow
This is a PoC project. For production use, consider:
- Security hardening (RBAC, network policies)
- Monitoring and observability
- Backup and disaster recovery
- Multi-environment support