Cluster & ArgoCD Bootstrap Runbook
1. Pre-Flight Verification
Section titled “1. Pre-Flight Verification”Before triggering the Ansible bootstrap playbook, ensure the following requirements are fulfilled:
- SSH connectivity to Hetzner CX33:
Terminal window ssh hetzner-cx33-nbg "uname -a" - The AGE private key exists locally at
~/.config/sops/age/keys.txt:Terminal window test -f ~/.config/sops/age/keys.txt && echo "Key exists" - Encrypt any plaintext bootstrap variables if updated:
Terminal window make sops-encrypt
2. Executing the Bootstrap Pipeline
Section titled “2. Executing the Bootstrap Pipeline”Run the pre-flight syntax and schema validation, then execute the full idempotency-safe Ansible playbook:
# 1. Validate Kustomize manifests and Ansible playbook syntaxmake validate
# 2. Run the master bootstrap playbookmake bootstrap
# 3. Verify node readiness from your local machinemake nodesExpected node output:
NAME STATUS ROLES AGE VERSIONdocker-ce-ubuntu-8gb-nbg1-1 Ready control-plane,master 2m v1.37.0+k3s13. Kubeconfig Management
Section titled “3. Kubeconfig Management”The Ansible playbook fetches the cluster kubeconfig to a dedicated local file: ~/.kube/hetzner-cx33-nbg.yaml rather than overwriting your default configuration.
To interact with the cluster:
# Option A: Export environment variable for the current terminal sessionexport KUBECONFIG=~/.kube/hetzner-cx33-nbg.yaml
# Option B: Backup existing ~/.kube/config and install this cluster as defaultmake kubeconfig4. Validating the ArgoCD Platform
Section titled “4. Validating the ArgoCD Platform”After make bootstrap finishes, verify that all ArgoCD pods are running and KSOPS is ready:
kubectl get pods -n argocdExpected output:
NAME READY STATUS RESTARTS AGEargocd-application-controller-0 1/1 Running 0 3margocd-applicationset-controller-... 1/1 Running 0 3margocd-dex-server-... 1/1 Running 0 3margocd-redis-... 1/1 Running 0 3margocd-repo-server-... 1/1 Running 0 3margocd-server-... 1/1 Running 0 3mIngress & TLS Verification
Section titled “Ingress & TLS Verification”Query the public ArgoCD endpoint over HTTPS:
curl -sI https://argocd.timi.io.vnExpected response headers:
HTTP/2 200server: Cowboy / Traefikstrict-transport-security: max-age=63072000; includeSubDomains; preloadInitial Administrator Login
Section titled “Initial Administrator Login”- URL:
https://argocd.timi.io.vn - Username:
admin - Password: Retrieved from the encrypted secret in
ansible/inventory/group_vars/all.sops.yml(argocd_admin_password).