Cloud VPC
Kubernetes cluster
Delivery · git is the desired state
connections HTTPS service SQL events sync push image new tag promql provisions You browser NGINX Ingress tls / routing Go API deployment ×3 Apache Kafka Kafka event log PostgreSQL managed instance Vault secrets Prometheus scrapes /metrics GitHub Actions build / test / push Harbor signed images Argo CD gitops sync Grafana dashboards / alerts Terraform vpc / nodes / rds request path out of bandhover to isolate · click to pin · esc to release
Pick a box to read why it is in the stack.
The pipeline builds an image and opens a pull request. It holds no cluster credentials at all — the arrow that reaches into the cluster comes from Argo CD, which compares Git against reality on a loop and closes the gap. That inversion is worth the setup cost twice over: a deploy is a reviewed commit, a rollback is a revert, and a hand-edited resource is corrected without anyone noticing it had been edited.
Everything inside the dashed box can be deleted mid-request and rescheduled somewhere else — which is exactly why the database is drawn outside it. You can run Postgres in Kubernetes, and then the operator, the volumes, the failover drill and the 3am restore are yours. The line between the two boxes is the line between what the platform may kill freely and what it must never be allowed to.
Terraform creates the network, the nodes and the managed database; Argo CD creates the workloads. Keeping them separate is what makes a bad manifest a rolled-back Deployment instead of a destroyed VPC — and it is why the cluster itself is never defined inside the cluster. The cost of this model is not the YAML: it is that both planes are now systems you own, upgrade and are paged for.