Quick Start
Prerequisites
- Kubernetes cluster (kubeadm, v1.33+)
- kubectl configured
- GitHub personal access token (with repo access)
- Cloudflare API token (for DNS-01 challenges)
- At least 2 nodes (3+ recommended for storage quorum)
Bootstrap the Cluster
Step 1: Install ArgoCD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/v3.3.3/manifests/install.yaml
Step 2: Run Bootstrap Script
export GITHUB_TOKEN=your_github_token
export CLOUDFLARE_TOKEN=your_cloudflare_token
./build/scripts/bootstrap.sh --env dev
What Bootstrap Does
- Validates required environment variables
- Checks ArgoCD is installed
- Waits for ArgoCD to be ready
- Configures repo-server resources (prevents OOM)
- Logs into ArgoCD
- Adds GitHub repo to ArgoCD
- Creates AppProject
- Installs cert-manager with Cloudflare DNS-01
- Installs MetalLB
- Installs Calico networking (replaces Flannel)
- Installs NGINX Ingress
- Installs Local Path Provisioner
- Installs kube-prometheus-stack (Prometheus + Grafana)
- Creates ArgoCD Ingress with TLS
- Installs system applications
- Waits for sync to complete
Environment Variables
| Variable | Required | Description |
|---|---|---|
GITHUB_TOKEN | Yes | GitHub personal access token for repo access |
CLOUDFLARE_TOKEN | Yes | Cloudflare API token for DNS-01 challenge |
Common Tasks
Render templates locally
helm template charts/system-apps --values cluster/dev/config.yaml --set clusterEnv=dev
Deploy manually (bypass ArgoCD)
make deploy-app ENV=dev APP=namespace-manager
Check cluster status
kubectl get nodes -o wide
kubectl get pods -A