Generate Kubernetes architecture diagrams from Kubernetes manifest files.
There are several tools to generate Kubernetes architecture diagrams (see here). The main originality of KubeDiagrams is its configurability allowing for instance to deal with custom Kubernetes resources.
Architecture diagram for official Kubernetes WordPress tutorial manifests:
Architecture diagram for official Kubernetes ZooKeeper tutorial manifests:
Architecture diagram of a deployed Cassandra instance:
Architecture diagram of the Minikube Ingress Addon:
Architecture diagram for free5gc-k8s manifests:
All the examples are
- official Kubernetes WordPress tutorial
- official Kubernetes ZooKeeper tutorial
- official Kubernetes Cassandra tutorial
- minikube architecture diagrams
- k0s architecture diagrams
- Train Ticket
- free5gc-k8s
- Python 3.x with
dot
command (Graphviz)
$ kube-diagrams -h
usage: kube-diagrams [-h] [-o OUTPUT] [-f FORMAT] [-c CONFIG] [-v] filename [filename ...]
Generate Kubernetes architecture diagrams from Kubernetes manifest files
positional arguments:
filename the Kubernetes manifest filename to process
options:
-h, --help show this help message and exit
-o OUTPUT, --output OUTPUT
output diagram filename
-f FORMAT, --format FORMAT
output format, allowed formats are png (default), jpg, svg, pdf, and dot
-c CONFIG, --config CONFIG
custom kube-diagrams configuration file
-v, --verbose verbosity, set to false by default
Supported kind
/apiVersion
resource types are 32 ones:
- ClusterRole/rbac.authorization.k8s.io/v1
- ClusterRoleBinding/rbac.authorization.k8s.io/v1
- ConfigMap/v1
- CronJob/batch/v1
- CustomResourceDefinition/apiextensions.k8s.io/v1
- DaemonSet/apps/v1
- Deployment/apps/v1
- Endpoints/v1
- EndpointSlice/discovery.k8s.io/v1
- Group/rbac.authorization.k8s.io/v1
- HorizontalPodAutoscaler/autoscaling/v2
- Ingress/networking.k8s.io/v1
- IngressClass/networking.k8s.io/v1
- Job/batch/v1
- LimitRange/v1
- Namespace/v1
- NetworkPolicy/networking.k8s.io/v1
- Node/v1
- PersistentVolume/v1
- PersistentVolumeClaim/v1
- Pod/v1
- PodDisruptionBudget/policy/v1
- ReplicaSet/apps/v1
- ResourceQuota/v1
- Role/rbac.authorization.k8s.io/v1
- RoleBinding/rbac.authorization.k8s.io/v1
- Secret/v1
- Service/v1
- ServiceAccount/v1
- StatefulSet/apps/v1
- StorageClass/storage.k8s.io/v1
- User/rbac.authorization.k8s.io/v1
Note: The mapping between these supported Kubernetes resources and architecture diagrams is defined into bin/kube-diagrams.yml.
Note: The mapping for any Kubernetes custom resources can be also defined into KubeDiagrams configuration files as illustrated in examples/k0s/KubeDiagrams.yml and examples/free5gc-k8s/KubeDiagrams.yml.
Currently, unsupported kind
/apiGroup
resource types are 27 ones:
- Binding/
- ComponentStatus/
- Event/
- PodTemplate/
- ReplicationController/
- MutatingWebhookConfiguration/
- ValidatingWebhookConfiguration/admissionregistration.k8s.io
- APIService/apiregistration.k8s.io
- ControllerRevision/apps
- TokenReview/authentication.k8s.io
- LocalSubjectAccessReview/authorization.k8s.io
- SelfSubjectAccessReview/authorization.k8s.io
- SelfSubjectRulesReview/authorization.k8s.io
- SubjectAccessReview/authorization.k8s.io
- CertificateSigningRequest/certificates.k8s.io
- Lease/coordination.k8s.io
- Event/events.k8s.io
- FlowSchema/flowcontrol.apiserver.k8s.io
- PriorityLevelConfiguration/flowcontrol.apiserver.k8s.io
- NodeMetrics/metrics.k8s.io
- PodMetrics/metrics.k8s.io
- RuntimeClass/node.k8s.io
- PriorityClass/scheduling.k8s.io
- CSIDriver/storage.k8s.io
- CSINode/storage.k8s.io
- CSIStorageCapacity/storage.k8s.io
- VolumeAttachment/storage.k8s.io
With KubeDiagrams, Kubernetes resources can be clustered within the architecture diagrams automatically. KubeDiagrams uses the metadata.namespace
resource field as first clustering criteria. Then, the metadata.labels
keys can be used to define subclusters. Following table lists the predefined mappings between label keys and cluster titles as defined in the bin/kube-diagrams.yml file (see the clusters
list).
Label | Cluster Title |
---|---|
app |
Application |
service |
Microservice |
app.kubernetes.io/instance |
K8s Application |
app.kubernetes.io/component |
K8s Component |
tier |
Tier |
New mappings can be easily defined in custom configuration files (see examples/minikube/KubeDiagrams.yml and examples/k0s/KubeDiagrams.yml) and provided to KubeDiagrams via the --config
command-line option.
This project is licensed under the GPL-3.0 license - see the LICENSE file for details.
- Add more examples
- Add missed Kubernetes resource types
- Make
nodes/*/edges
more declarative