k8sviz is a tool to generate Kubernetes architecture diagrams from the actual state in a namespace. Currently, this only generates a diagram similar to https://github.com/kubernetes/community/tree/master/icons#usage-example by using graphviz. For examples of the generated diagrams, see Examples below.
There are two implementations, bash script version and go version. Bash script version is just a wrapper to run go version inside container.
k8sviz.sh
requires:
- bash
- getopt
- docker
To build a container image (optional), it requires:
- make
k8sviz
requires:
- dot (graphviz) command
To build binary, it requires:
- make
- go
k8sviz version | k8s 1.20 or earlier | k8s 1.21 or later |
---|---|---|
k8sviz 0.3.2 or earlier | Yes | No |
k8sviz 0.3.3 or later | No | Yes |
Just download k8sviz.sh
file and add execute permission.
$ curl -LO https://raw.githubusercontent.com/mkimuram/k8sviz/master/k8sviz.sh
$ chmod u+x k8sviz.sh
Build the binary with below commands:
$ git clone https://github.com/mkimuram/k8sviz.git
$ cd k8sviz
$ make build
icons
directory needs to be in the same directory to the k8sviz binary.
So, move them to the proper directory (Replace PATH_TO_INSTALL
as you like).
$ PATH_TO_INSTALL=$HOME/bin
$ cp bin/k8sviz ${PATH_TO_INSTALL}
$ cp -r icons ${PATH_TO_INSTALL}
$ ./k8sviz.sh --help
USAGE: ./k8sviz.sh [flags] args
flags:
-n,--namespace: The namespace to visualize. (default: 'default')
-o,--outfile: The filename to output. (default: 'k8sviz.out')
-t,--type: The type of output. (default: 'dot')
-k,--kubeconfig: Path to kubeconfig file. (default: '/home/user1/.kube/config')
-i,--image: Image name of the container. (default: 'mkimuram/k8sviz:0.3')
-h,--help: show this help (default: false)
-
⚠️ WARNINGIf you are using Mac, only short options can be used. If you would like to use long options, you can install gnu-getopt and enable it by defining
FLAGS_GETOPT_CMD
environment variable.$ brew install gnu-getopt $ export FLAGS_GETOPT_CMD=/usr/local/opt/gnu-getopt/bin/getopt $ ./k8sviz.sh -h
-
📝NOTE
If you can't pull the container image or need to build it by yourself, you can do it by
make image-build
. It would be helpful if you specifyDEVEL_IMAGE
andDEVEL_TAG
to make the image name the same to the default one (Below example will set image name likemkimuram/k8sviz:0.3.4
).$ DEVEL_IMAGE=mkimuram/k8sviz DEVEL_TAG=$(cat version.txt) make image-build
An example use case of creating custom image is to include AWS SDK or Google Cloud SDK. To create a custom image that include AWS SDK, run below command:
$ DEVEL_IMAGE=mkimuram/k8sviz DEVEL_TAG=$(cat version.txt) TARGET=aws make image-build
To create a custom image that include Google Cloud SDK, run below command:
$ DEVEL_IMAGE=mkimuram/k8sviz DEVEL_TAG=$(cat version.txt) TARGET=gcloud make image-build
$ ./k8sviz -h
Usage of ./k8sviz:
-kubeconfig string
absolute path to the kubeconfig file (default "/home/user1/.kube/config")
-n string
namespace to visualize (shorthand) (default "default")
-namespace string
namespace to visualize (default "default")
-o string
output filename (shorthand) (default "k8sviz.out")
-outfile string
output filename (default "k8sviz.out")
-t string
type of output (shorthand) (default "dot")
-type string
type of output (default "dot")
Examples are only shown for old bash script version, but current go version should work in the same way.
- Generate dot file for namespace
default
./k8sviz.sh -n default -o default.dot
- Generate png file for namespace
default
$ ./k8sviz.sh -n default -t png -o default.png
- Output for an example wordpress deployment will be like below:
- Output for an example cassandra deployment with statefulset will be like below:
Examples for more complex deployment (kubeflow case)
-
Generate dot file for namespace
kubeflow
andistio-system
$ ./k8sviz.sh -n kubeflow -o examples/kubeflow/kubeflow.dot $ ./k8sviz.sh -n istio-system -o examples/kubeflow/istio-system.dot
-
Generate png file for namespace
kubeflow
andistio-system
$ ./k8sviz.sh -n kubeflow -t png -o examples/kubeflow/kubeflow.png $ ./k8sviz.sh -n istio-system -t png -o examples/kubeflow/istio-system.png
-
Output:
This project is licensed under the Apache License - see the LICENSE file for details