Convert

Convert Kubernetes YAML into an architecture diagram.

The whole topology is in the YAML, expressed as label matches spread across forty files.

Download for macOS
v0.1.33 · .dmg · Apple Silicon & Intel
Signed & notarized by Apple · opens without a Gatekeeper warning
sha256 698955a0187bc039f4c74f5d05a9f10fbb27376a45788a0a241d1326b73873c7
Download for Windows instead
$curl -fsSL https://lucidtrain.com/install.sh | sh

Selectors resolved into edges

The link between a Service and its pods is a label match, and label matches are exactly what humans misread: a selector matching nothing looks identical to one matching correctly. Resolving them and drawing the result makes an orphaned Service obvious immediately, which turns this from documentation into debugging.

Stateful separated from stateless

StatefulSets with volume claims land in the data tier rather than beside Deployments. That single distinction answers the question people most often bring to a cluster diagram, which is what can be restarted freely and what cannot.

Render templates first

A Helm chart full of unresolved values produces a diagram of the template rather than of the deployment. Rendering with your values first is the difference between a picture of the chart and a picture of the environment.

Fidelity

Comes throughDoes not
Deployments, StatefulSets, DaemonSetsComponents
ServicesEdges, resolved through selectors
Ingress and GatewayEdge tier entry points
PVCsData tier attachment
ConfigMap and Secret refsDependency edgesSecret values, obviously
NamespacesSections
NetworkPolicyNotedDoes not constrain drawn edges
Live cluster stateIt reads files, not a cluster

The prompt

shell
$ Read the Kubernetes manifests here and diagram the workloads, the services connecting them, what holds state, and how traffic enters.
FAQ

Questions

Does it need cluster access?

No kubeconfig and no credentials. It reads YAML, so it works against clusters you cannot reach.

Helm?

Yes, from rendered output.

Should I include system namespaces?

Usually not. The result is dominated by components you did not write and nobody reads it twice.

Related