Overview
With EKS clusters deployed and cluster access configured, the next step is to bootstrap ArgoCD and deploy the Kubernetes baseline components. ArgoCD uses an app-of-apps pattern to manage all cluster resources declaratively.Before proceeding, ensure you have
kubectl access to the cluster. See Cluster Access for setup instructions.Architecture
The kit uses a three-tier app-of-apps pattern:kubernetes/rendered/{cluster}/.
Update Repository URLs
Before deploying, update the Git repository URLs to point to your fork:1
Update ArgoCD application sources
The Application manifests reference the Git repository. Update the Update this URL in all Application templates:
repoURL in the source templates:kubernetes/src/argocd/argocd/templates/Application.argocd-app-of-apps.yaml:kubernetes/src/argocd/argocd/templates/Application.*.yamlkubernetes/src/argocd/infrastructure/templates/Application.GENERATOR.yamlkubernetes/src/argocd/services/templates/Application.GENERATOR.yaml
2
Render updated manifests
After updating the source files, render the manifests for your cluster:Replace
staging with production for production clusters.3
Commit the changes
Create Deploy Key
ArgoCD needs SSH access to clone your private repository. Run the bootstrap task to generate a deploy key and create the Kubernetes secret:1
Generate deploy key and create secret
2
Add the public key to GitHub
The command outputs the public key. Add it to your repository:
- Go to your repository Settings → Deploy keys
- Click Add deploy key
- Title:
ArgoCD Deploy Key - Paste the public key from the command output
- Leave Allow write access unchecked (read-only is sufficient for GitOps)
- Click Add key
The private key is stored as a Kubernetes Secret (
repo-kube-starter-kit) in the argocd namespace. ArgoCD automatically discovers it via the argocd.argoproj.io/secret-type=repository label.Configure GitHub OAuth (Optional)
If you want to enable GitHub OAuth for ArgoCD login (recommended for production), you need to store the OAuth app secret in AWS Secrets Manager.1
Create a GitHub OAuth App
- Go to your GitHub organization Settings → Developer settings → OAuth Apps
- Click New OAuth App
- Fill in the details:
- Application name:
ArgoCD Staging - Homepage URL:
https://argocd.staging.<YOUR_DOMAIN> - Authorization callback URL:
https://argocd.staging.<YOUR_DOMAIN>/api/dex/callback
- Application name:
- Click Register application
- Generate a new client secret and save both the Client ID and Client Secret
2
Store the secret in AWS Secrets Manager
See the ArgoCD Dex documentation for more details on SSO configuration.
Bootstrap ArgoCD
Only ArgoCD itself needs to be manually deployed. Once running, ArgoCD will deploy and manage all other infrastructure components automatically.- Applies ArgoCD manifests (handles CRD ordering automatically)
- Waits for ArgoCD deployments to be ready
- Applies AppProjects
- Applies Applications
Verify Bootstrap
1
Verify deploy key secret exists
The deploy key secret should have been created by the bootstrap task:
2
Verify ArgoCD can sync
Check the ArgoCD Applications:You should see:
argocd-app-of-apps- Syncedinfrastructure-app-of-apps- Syncedservices-app-of-apps- Synced
It may take several minutes for all applications to become healthy as reconciliation loops complete. During this time:
- Infrastructure components are deployed and start up
- External Secrets syncs secrets from AWS Secrets Manager
- Pods restart to pick up new secrets/configurations
- External DNS creates DNS records
- Cert Manager issues TLS certificates
kubectl get applications -n argocd.Access ArgoCD UI
Once external-dns creates the DNS records, ArgoCD is accessible athttps://argocd.<environment>.<YOUR_DOMAIN> (e.g., https://argocd.staging.example.com).
Alternatively, use port-forwarding for immediate access:
Login
If you configured GitHub OAuth, use the Log in via GitHub button. Otherwise, use the admin password:admin and the retrieved password.
Infrastructure Components
The following components are included in the Kubernetes baseline:| Component | Bootstrap | Purpose |
|---|---|---|
| argocd | Manual | GitOps continuous delivery |
| cert-manager | ArgoCD | TLS certificate automation with Let’s Encrypt |
| external-secrets | ArgoCD | Syncs secrets from AWS Secrets Manager |
| external-dns | ArgoCD | Automatic DNS record management in Route53 |
| traefik | ArgoCD | Ingress controller for routing external traffic |
| karpenter | ArgoCD | Dynamic node provisioning and autoscaling |
| cloudnative-pg | ArgoCD | PostgreSQL operator for in-cluster databases |
| signoz-k8s-infra | ArgoCD | OpenTelemetry collectors for observability |
| reloader | ArgoCD | Restarts pods when ConfigMaps/Secrets change |
| ebs-csi-driver-resources | ArgoCD | StorageClass for encrypted EBS volumes |
Verify Deployment
1
Check all Applications are synced
Synced and Healthy status.2
Verify infrastructure pods
Running.3
Check ingress is working
4
Verify DNS records
Once external-dns is running, check Route53 for new records:
Enable/Disable Components
To enable or disable infrastructure components, editkubernetes/src/argocd/infrastructure/values.yaml: