See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
Render first: the effective manifests are the diagram input
helm template renders a chart with a given values file into plain manifests, exactly what helm install would send to the API server. kubectl kustomize, or kustomize build, does the same for an overlay: base plus patches, resolved. Everything a diagram needs, the Deployments, Services, Ingresses, and their wiring, exists only after this step, because the prod overlay and the dev overlay disagree about it by design.
Render with the same values and overlay your deploy pipeline uses. A diagram built from default values documents the chart author's demo, not your platform.
# Helm: render the chart exactly as the release would run helm template payments ./charts/payments -f values/prod.yaml > effective.yaml # Kustomize: build the overlay that production applies kubectl kustomize overlays/prod > effective.yaml # The running truth, straight from the cluster kubectl get deploy,sts,svc,ingress -n payments -o yaml
Repo or cluster: pick your truth deliberately
With GitOps in place, Argo CD or Flux reconciles the repo into the cluster, and the two are supposed to converge. When sync is green they do, and the rendered repo manifests are the better diagram source: they are versioned, reviewable in a PR, and available to CI without cluster credentials. When someone has been kubectl-editing in production, or an Argo app sits in OutOfSync, the repo lies, and kubectl get -o yaml is the only honest answer, defaults filled in by the API server included.
A workable rule: generate the standing diagram from rendered repo manifests, because that is the state your team reviews and intends. Reach for the cluster query when investigating drift, and treat any difference between the two pictures as a finding in itself.
Namespaces as zones, selectors as edges
Namespaces map naturally onto diagram zones, and a multi-namespace map with zone boundaries answers the first question every reader has: what talks across the boundary. Inside a zone, Deployments and StatefulSets are the workload nodes, with StatefulSets and their PersistentVolumeClaims marking where the state lives.
The subtle edges are the label selectors. A Service does not name its pods; it selects them, and the edge exists because the selector app=api matches the labels in a Deployment's pod template. That indirection is invisible in any single manifest, which is exactly why it belongs on a diagram: it is the wiring a newcomer cannot see by reading files one at a time. Ingress to Service edges, and ConfigMap and Secret mounts into workloads, complete the picture.
The regeneration loop
For the first diagram, paste the rendered manifests into the Kubernetes diagram generator and shape it from there. Keeping it current is a render plus one agent call: Datadef's MCP server, registry name io.datadef/mcp, lets an agent such as Claude Code or Cursor read the freshly rendered output and update the existing diagram rather than draw a new one.
Datadef does not watch the repository, and no GitHub App detects that a chart changed. The trigger is yours: a CI job filtered on charts/** and overlays/** paths that renders and hands the output to the agent, or a request during review when a PR touches the topology. One command, invoked by the pipeline that already knows something changed. The API key the agent needs is created in settings, on paid plans.
What the manifests cannot show
Operators break the repo-only view. A Postgres operator turns one small custom resource into pods, services, and secrets the repo never names, so a rendered-manifest diagram shows the CR and none of its offspring. When operators run your stateful systems, the cluster query is the only source that sees their children; diagram the CR as the node and note what it expands into.
Rendered output is also big. A platform with twelve namespaces renders thousands of lines, and a diagram that draws every resource is as unreadable as the YAML. Scope the diagram to the namespaces a reader cares about and let zones summarize the rest. And if the result is embedded in a wiki through the live image URL, the project must be shared public, which is a real trade-off for private platform topologies.
FAQ
How do I visualize Kubernetes YAML manifests as a diagram?
Should I diagram the repo manifests or the live cluster state?
How does a Service to Deployment relationship show up in a diagram?
Can the diagram update itself when our Helm chart changes?
What about resources created by operators?