This project bootstraps a local Kubernetes cluster using Minikube and provisions ArgoCD via Helm. It also deploys a Python Flask app using Helm and manages everything through GitOps.
project-gitops/
├── .github/workflows/ # GitHub Actions workflow
│ └── gitops.yml # CI/CD: Docker image build + Helm chart update
├── helm-python-app/ # Helm chart for Python Flask app
│ ├── Chart.yaml
│ ├── values.yaml
│ └── templates/
│ ├── deployment.yaml
│ └── service.yaml
├── argocd-app.yaml # ArgoCD Application manifest
├── app.py # Minimal Flask app
├── Dockerfile # Dockerfile for the app
└── terraform-config/ # Infrastructure-as-code
├── main.tf
├── provider.tf
├── argocd.tf
├── variables.tf- Terraform ≥ 1.3
- Minikube + Docker
- Helm
- kubectl
- ArgoCD CLI (
brew install argocd) - GitHub PAT (for repo push via CI)
-
Terraform provisions:
- Minikube cluster
- ArgoCD via Helm in
argocdnamespace
-
ArgoCD watches the Git repo for Helm chart updates
-
GitHub Actions automates image build, tagging, and GitOps sync
cd terraform-config
terraform initterraform applykubectl port-forward svc/argocd-server -n argocd 8081:443Then visit: https://localhost:8081
kubectl -n argocd get secret argocd-initial-admin-secret \
-o jsonpath="{.data.password}" | base64 -d && echoargocd login localhost:8081 --username admin --password <pwd> --insecurekubectl port-forward service/project-gitops-helm-python-app 8082:8080 -n defaultThen visit: http://localhost:8082
terraform destroyOR
minikube delete