How to Draw a Kubernetes Architecture Diagram (with Free Template)

A Kubernetes architecture diagram should show traffic, boundaries and state, not every Pod. What to include, mistakes to avoid, and a free template.

10/16/2026

How to Draw a Kubernetes Architecture Diagram (with Free Template)

Most Kubernetes diagrams fail in one of two ways: they are a wall of Pod icons nobody can read, or a three-box sketch that says "cluster" and little else. A useful Kubernetes architecture diagram sits in between. It shows where traffic enters, which objects route it, where state lives and which boundaries matter, at a level of detail that fits the person reading it.

This guide covers what to include, how to choose detail by audience, the mistakes that make diagrams useless, and how to build one step by step in Archboard. The free template opens as a new diagram in your own workspace in one click.

What a useful Kubernetes architecture diagram shows

The Kubernetes docs describe the cluster components: control plane, kubelet, kube-proxy and so on. That is the platform view. Most teams need the workload view: how your application runs on the cluster. Five things carry most of the value.

1. Cluster and namespace boundaries

Draw the cluster as the outer boundary and namespaces as frames inside it. Namespaces are where RBAC, resource quotas and most NetworkPolicies apply, so they are the boundaries people ask about first ("is payments in its own namespace?"). If you run several clusters (prod and staging, or one per region), give each its own boundary and label it with name and environment.

2. North-south traffic

Show the request path from outside the cluster inward:

Client → Ingress → Service → Deployment → Pods

Make the direction explicit with arrows. Note the Ingress host and path rules and the Service type and port. This one path answers most "where does this request go?" questions during an incident.

East-west traffic (service to service inside the cluster) matters too, but draw it selectively: the calls that cross namespaces or sit on the critical path.

3. Config and storage

Attach ConfigMaps, Secrets and PersistentVolumeClaims to the workloads that use them. A Deployment with a Secret and a PVC tells the reader two things: this workload holds credentials, and it has state that outlives a Pod. Draw external state, such as a managed Postgres, outside the cluster boundary so it is clear what the cluster owns and what it doesn't.

4. Scaling

Put a HorizontalPodAutoscaler next to the Deployment it targets, with min/max replicas and the metric in its name or a note ("2–10, CPU 70%"). That says more than ten drawn Pods.

5. NetworkPolicy

If you use NetworkPolicies, show which ones apply and what they allow. A security reviewer wants to see "only the api namespace can reach Postgres", not infer it.

How manifests map to diagram nodes

Take three ordinary objects:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: orders-api
  namespace: shop
spec:
  replicas: 3
  selector:
    matchLabels: { app: orders-api }
  template:
    metadata:
      labels: { app: orders-api }
    spec:
      containers:
        - name: api
          image: registry.example.com/orders-api:1.4.2
          ports: [{ containerPort: 8080 }]
          envFrom: [{ secretRef: { name: orders-db } }]
---
apiVersion: v1
kind: Service
metadata:
  name: orders-api
  namespace: shop
spec:
  selector: { app: orders-api }
  ports: [{ port: 80, targetPort: 8080 }]
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: shop
  namespace: shop
spec:
  rules:
    - host: shop.example.com
      http:
        paths:
          - path: /orders
            pathType: Prefix
            backend:
              service: { name: orders-api, port: { number: 80 } }

On the diagram they become:

Manifest Diagram node Name or note
namespace: shop Namespace frame shop
Ingress shop Ingress shop.example.com/orders
Service orders-api Service ClusterIP :80 → 8080
Deployment orders-api Deployment orders-api ×3, v1.4.2
secretRef: orders-db Secret orders-db

Three replicas become one Deployment node with "×3", not three Pod boxes. The edges follow the references in the YAML: Ingress backend → Service, Service selector → Deployment, envFrom → Secret.

Choose the level of detail by audience

One diagram rarely serves everyone. Decide who it is for before you draw.

Audience Needs Include Leave out
On-call engineer Fast path from symptom to component Ingress → Service → Deployment chain, external dependencies, HPA limits, namespace names Labels, annotations, every ConfigMap
New hire A mental model of the system Namespaces, main services, data stores, a short note per area Replica counts, NetworkPolicy details
Security review Trust boundaries and data flows Namespaces, NetworkPolicies, Secrets, Ingress and TLS, egress to external systems Scaling details

If two audiences need different things, draw two views rather than one diagram that tries to do everything.

Common mistakes

  • Drawing every Pod replica. Replicas are a number, not architecture. One Deployment node with a replica count, plus an HPA if it scales, reads better than a grid of identical boxes.
  • Mixing logical and physical. Worker nodes, zones and Pod placement are a physical view; Ingress → Service → Deployment is a logical view. Put both on one canvas and neither is readable. If you need the physical view, make it a separate diagram.
  • No traffic direction. Lines without arrows don't say who calls whom. Use directed edges and keep the main request flow moving one way, left to right or top to bottom.
  • Stale diagrams. A diagram showing last year's services does more harm than none. Put an owner and a "last checked" date on the canvas, and update it when a change adds or removes a box.
  • Unexplained edges. "Service → Deployment" is obvious; "orders-api → payments-api" deserves a protocol and port.

How to draw it in Archboard, step by step

Archboard's Kubernetes pack has 33 first-class node types with ports, from Namespace (drawn as a frame), Node, Pod, Deployment, StatefulSet, Job and CronJob to Service, Ingress, Gateway API routes, ConfigMap, Secret, PersistentVolumeClaim, HPA, NetworkPolicy and RBAC. You connect ports instead of drawing loose lines between generic shapes. You can start from your manifests with Import from YAML… or place each node by hand; either way, the "what matters here?" decision this guide is about stays yours.

  1. Study the examples. Open the Kubernetes microservices example (Ingress → Service → Deployment/Pod → PVC → Postgres) and the Ingress flow example. Note the layout: traffic flows one way and state sits at the end.
  2. Create a diagram in your workspace and add a Frame for the cluster, named after the cluster and environment.
  3. Add a Namespace for each namespace that matters, inside the cluster frame.
  4. Place the request path: Ingress, then Service, then Deployment, left to right. Connect port to port and add short Text labels for host/path and ports.
  5. Attach config and state: ConfigMap and Secret next to the Deployment that reads them, a PVC for persistent storage, and a database node outside the cluster frame for a managed Postgres.
  6. Add scaling and policy: an HPA beside its Deployment with min/max and metric, and NetworkPolicy nodes at the namespace boundaries they protect.
  7. Add context on the canvas: a Markdown block with owner, last-checked date and links to the repo or runbook. Code blocks work on the canvas too, so the key manifest excerpt can sit next to its nodes.
  8. Share it: export SVG or PNG for a design doc, or share a public link. Autosave and revision snapshots let you step back if a rework goes wrong.
Kubernetes cluster diagram: users reach an Ingress that routes to the web and api Services and Deployments; an HPA scales web; api reads a ConfigMap and a Secret, queries a search StatefulSet with a PVC and connects to managed Postgres outside the cluster; a NetworkPolicy restricts access to api.

15 components · 12 connections

Open in Archboard
Diagram contents
  • prod-cluster
  • storefront
  • Users
  • web-hpa
  • web
  • api
  • api-config
  • api-secrets
  • api-allow-web
  • search
  • search-data
  • Managed Postgres
  • HTTPS
  • /
  • /api
  • CPU 70%
  • envFrom
  • SQL :5432
  • allow from web
  • queries :9200
  • volumeClaim
A Kubernetes architecture diagram that shows traffic, boundaries and state: namespace, workloads, config, storage, policy and the managed database outside the cluster.

For a multi-account view of several clusters, the Cloud pack has a Kubernetes Cluster node.

The Free plan includes every built-in pack and allows 15 diagram nodes per diagram, plus 150 notes and text, which fits one service's request path. A full multi-service map will likely need Pro.

The free template

The free template is /templates/kubernetes-architecture: Use this template opens it as a new diagram in your workspace. For a fuller layout, /examples/kubernetes-microservices has Use this example, which copies it so you can rename the nodes to your services. For the traffic path alone, /examples/kubernetes-ingress-flow is a smaller starting point. More patterns are on the Kubernetes use-case page.

FAQ

Should I draw the control plane? Only if the diagram is about the platform itself, for example for a platform team or an upgrade plan. In application diagrams the control plane is noise; readers assume it exists.

Pods or Deployments? Deployments, with a replica count. Draw individual Pods only when a specific Pod matters: a sidecar layout, a debugging session, or a Job or CronJob run.

How do I keep it current? Give it an owner, put a last-checked date on the canvas, and review it alongside the pull requests that change the services it shows. A JSON export of the diagram can live in the repo next to the manifests.

Can one diagram cover several clusters? Yes, at a higher level: one boundary per cluster, with only cross-cluster traffic drawn. Keep per-cluster detail in separate diagrams.

Start free — one seat, no credit card

Related posts

← Back to blog

Open a canvas in a minute

Sign in with Google or GitHub. Free for a single seat. Upgrade when the team joins.