KubeDiagrams

license python version pypi version PyPI Downloads Docker Stars Docker Image Version Docker Pulls contributors

Generate Kubernetes architecture diagrams from Kubernetes manifest files, kustomization files, Helm charts, and actual cluster state.

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.

Examples

Architecture diagram for official Kubernetes WordPress tutorial manifests: WordPress Manifests

Architecture diagram for official Kubernetes ZooKeeper tutorial manifests: ZooKeeper Manifest

Architecture diagram of a deployed Cassandra instance: Deployed Cassandra Instance

Architecture diagram for Train TicketA Benchmark Microservice System: train-ticket.png

Architecture diagram of the Minikube Ingress Addon: Minikube Ingress Addon

Architecture diagram for the Kube Prometheus Stack chart: kube-prometheus-stack.png

Architecture diagram for free5gc-k8s manifests: free5gc-k8s-diagram.png

Architecture diagram for open5gs-k8s manifests: open5gs-k8s-diagram.png

Architecture diagram for the Towards5GS-helm chart: towards5gs_free5gc.png

Architecture diagram for a deployed CronJob instance: cronjob-deployed.png

Architecture diagram for NetworkPolicy resources: network_policies.png

Many other architecture diagrams are available into examples/.

All the examples are

  1. official Kubernetes WordPress tutorial
  2. official Kubernetes ZooKeeper tutorial
  3. official Kubernetes Cassandra tutorial
  4. Train Ticket
  5. minikube architecture diagrams
  6. k0s architecture diagrams
  7. Kube Prometheus Stack
  8. free5gc-k8s
  9. open5gs-k8s
  10. Towards5GS-helm
  11. OpenAirInterface 5G Core Network
  12. docker-open5gs
  13. Miscellaneous examples
  14. Some Helm charts

Prerequisites

Following software must be installed:

Getting Started

Following command installs KubeDiagrams and all its Python dependencies, i.e., PyYAML and Diagrams.

# using pip (pip3)
pip install KubeDiagrams

Usage

KubeDiagrams provides two commands: kube-diagrams and helm-diagrams.

kube-diagrams

kube-diagrams generates a Kubernetes architecture diagram from one or several Kubernetes manifest files.

kube-diagrams -h
usage: kube-diagrams [-h] [-o OUTPUT] [-f FORMAT] [-c CONFIG] [-v] [--without-namespace] 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
  --without-namespace   disable namespace cluster generation

Examples:

# generate a diagram from a manifest
kube-diagrams -o cassandra.png examples/cassandra/cassandra.yml

# generate a diagram from the actual cluster state
kubectl get all -o yaml | kube-diagrams -o default-namespace.png -

helm-diagrams

helm-diagrams generates a Kubernetes architecture diagram from an Helm chart.

helm-diagrams takes only one argument - the URL of the Helm chart - but requires that the helm command was installed.

Examples:

# generate a diagram for the Helm chart 'cert-manager' available in HTTP repository 'charts.jetstack.io'
helm-diagrams https://charts.jetstack.io/cert-manager

# generate a diagram for the Helm chart 'argo-cd' available in OCI repository 'ghcr.io'
helm-diagrams oci://ghcr.io/argoproj/argo-helm/argo-cd

With Docker/Podman

KubeDiagrams images are available in Docker Hub.

# For usage with Podman, replace 'docker' by 'podman' in the following lines.

# generate a diagram from a manifest
docker run -v "$(pwd)":/work philippemerle/kubediagrams kube-diagrams -o cassandra.png examples/cassandra/cassandra.yml

# generate a diagram from the actual cluster state
kubectl get all -o yaml | docker run -v "$(pwd)":/work -i philippemerle/kubediagrams kube-diagrams -o default-namespace.png -

# generate a diagram for the Helm chart 'cert-manager' available in HTTP repository 'charts.jetstack.io'
docker run -v "$(pwd)":/work philippemerle/kubediagrams helm-diagrams https://charts.jetstack.io/cert-manager

# generate a diagram for the Helm chart 'argo-cd' available in OCI repository 'ghcr.io'
docker run -v "$(pwd)":/work philippemerle/kubediagrams helm-diagrams oci://ghcr.io/argoproj/argo-helm/argo-cd

Features

Kubernetes resources

KubeDiagrams supported the following 47 Kubernetes resource types:

Kind ApiGroup Versions
APIService apiregistration.k8s.io v1beta1 v1
ClusterRole rbac.authorization.k8s.io v1beta1 v1
ClusterRoleBinding rbac.authorization.k8s.io v1beta1 v1
ConfigMap v1
CronJob batch v1beta1 v1
CSIDriver storage.k8s.io v1beta1 v1
CSINode storage.k8s.io v1
CSIStorageCapacity storage.k8s.io v1
CustomResourceDefinition apiextensions.k8s.io v1beta1 v1
DaemonSet apps v1beta2 v1
Deployment apps v1beta1 v1beta2 v1
Endpoints v1
EndpointSlice discovery.k8s.io v1
Group rbac.authorization.k8s.io v1
HorizontalPodAutoscaler autoscaling v1 v2beta1 v2beta2 v2
Ingress networking.k8s.io v1beta1 v1
IngressClass networking.k8s.io v1beta1 v1
Job batch v1beta1 v1
Lease coordination.k8s.io v1
LimitRange v1
MutatingWebhookConfiguration admissionregistration.k8s.io v1beta1 v1
Namespace v1
NetworkAttachmentDefinition k8s.cni.cncf.io v1
NetworkPolicy networking.k8s.io v1
Node v1
PersistentVolume v1
PersistentVolumeClaim v1
Pod v1
PodDisruptionBudget policy v1beta1 v1
PodSecurityPolicy policy v1beta1 v1
PodTemplate v1
PriorityClass scheduling.k8s.io v1beta1 v1
ReplicaSet apps v1
ReplicationController v1
ResourceQuota v1
Role rbac.authorization.k8s.io v1beta1 v1
RoleBinding rbac.authorization.k8s.io v1beta1 v1
RuntimeClass node.k8s.io v1
Secret v1
Service v1
ServiceAccount v1
StatefulSet apps v1beta1 v1beta2 v1
StorageClass storage.k8s.io v1beta1 v1
User rbac.authorization.k8s.io v1
ValidatingWebhookConfiguration admissionregistration.k8s.io v1beta1 v1
VerticalPodAutoscaler autoscaling.k8s.io v1
VolumeAttachment storage.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/kube-prometheus-stack/KubeDiagrams.yml.

Currently, there are 15 unsupported Kubernetes resource types:

Kind ApiGroup
Binding
ComponentStatus
Event
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
Event events.k8s.io
FlowSchema flowcontrol.apiserver.k8s.io
PriorityLevelConfiguration flowcontrol.apiserver.k8s.io
NodeMetrics metrics.k8s.io
PodMetrics metrics.k8s.io

Kubernetes resources clustering

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.kubernetes.io/instance K8s Instance
release Release
helm.sh/chart Helm Chart
chart Chart
app.kubernetes.io/name K8s Application
app Application
app.kubernetes.io/component K8s Component
service Microservice
tier Tier

New mappings can be easily defined in custom configuration files (see examples/minikube/KubeDiagrams.yml, examples/k0s/KubeDiagrams.yml, examples/free5gc-k8s/KubeDiagrams.yml, examples/open5gs-k8s/KubeDiagrams.yml, and examples/towards5gs-helm/KubeDiagrams.yml) and provided to KubeDiagrams via the --config command-line option.

Talks

What do they say about it?

Posts and blogs about KubeDiagrams:

Star History

Star History Chart

License

This project is licensed under the GPL-3.0 license - see the LICENSE file for details.

FOSSA Status

Description
Generate Kubernetes architecture diagrams from Kubernetes manifest files, kustomization files, Helm charts, helmfiles, and actual cluster state
Readme Apache-2.0 450 MiB
Languages
JavaScript 53.7%
Python 38.9%
Shell 2.7%
HTML 1.8%
Dockerfile 1.3%
Other 1.6%