Skip to content

A CLI tool to display all dependencies or dependents of an object in a Kubernetes cluster.

License

Notifications You must be signed in to change notification settings

futuretea/kube-lineage

 
 

Repository files navigation

kube-lineage

build release kubernetes compatibility helm compatibility license

A CLI tool to display all dependencies or dependents of an object in a Kubernetes cluster.

Usage

$ kube-lineage vm bar-new1 -A -owide
NAMESPACE         NAME                                                                              READY   STATUS             AGE     RELATIONSHIPS
default           VirtualMachine/bar-new1                                                           True                       2d17h   []
default           ├── ControllerRevision/revision-start-vm-3860e1b8-074e-4621-8a1b-9fe5f44c17a5-2   -                          41h     [ControllerReference OwnerReference]
default           ├── PersistentVolumeClaim/bar-new1-rootdisk-lskq0                                 -                          2d17h   [VMPersistentVolumeClaim]
default           │   ├── Pod/virt-launcher-bar-new1-4r7f7                                          1/1     Running            95m     [PodVolume]
default           │   │   ├── PodDisruptionBudget/kubevirt-disruption-budget-sxnlc                  -       InsufficientPods   95m     [PodDisruptionBudget]
default           │   │   └── Service/kubernetes                                                    -                          16d     [Service]
longhorn-system   │   └── Volume/pvc-797e1f58-22ad-4e6f-8073-c4227ba3db56                           -                          2d17h   [LonghornVolumePersistentVolumeClaim]
longhorn-system   │       ├── Engine/pvc-797e1f58-22ad-4e6f-8073-c4227ba3db56-e-30773d88            -                          95m     [OwnerReference]
longhorn-system   │       └── Replica/pvc-797e1f58-22ad-4e6f-8073-c4227ba3db56-r-93555ca9           -                          95m     [OwnerReference]
default           ├── Secret/bar-new1-fqguk                                                         -                          2d17h   [OwnerReference VMCloudInitSecret]
default           │   └── Pod/virt-launcher-bar-new1-4r7f7                                          1/1     Running            95m     [PodVolume]
default           └── VirtualMachineInstance/bar-new1                                               True                       95m     [ControllerReference OwnerReference]
default               ├── PersistentVolumeClaim/bar-new1-rootdisk-lskq0                             -                          2d17h   [VMPersistentVolumeClaim]
default               ├── Pod/virt-launcher-bar-new1-4r7f7                                          1/1     Running            95m     [ControllerReference OwnerReference]
default               ├── PodDisruptionBudget/kubevirt-disruption-budget-sxnlc                      -       InsufficientPods   95m     [ControllerReference OwnerReference]
default               └── Secret/bar-new1-fqguk                                                     -                          2d17h   [VMCloudInitSecret]
$ kube-lineage clusterrole system:metrics-server --output=wide
NAMESPACE     NAME                                                               READY   STATUS    AGE   RELATIONSHIPS
              ClusterRole/system:metrics-server                                  -                 30m   []
              └── ClusterRoleBinding/system:metrics-server                       -                 30m   [ClusterRoleBindingRole]
kube-system       └── ServiceAccount/metrics-server                              -                 30m   [ClusterRoleBindingSubject]
kube-system           ├── Pod/metrics-server-7b4f8b595-8m7rz                     1/1     Running   30m   [PodServiceAccount]
kube-system           │   └── Service/metrics-server                             -                 30m   [Service]
                      │       ├── APIService/v1beta1.metrics.k8s.io              True              30m   [APIService]
kube-system           │       └── EndpointSlice.discovery/metrics-server-wb2cm   -                 30m   [ControllerReference OwnerReference]
kube-system           └── Secret/metrics-server-token-nqw85                      -                 30m   [ServiceAccountSecret]
kube-system               └── Pod/metrics-server-7b4f8b595-8m7rz                 1/1     Running   30m   [PodVolume]

Use either the --dependencies or -D flag to show dependencies instead of dependents

$ kube-lineage pod coredns-5cc79d4bf5-xgvkc --dependencies
NAMESPACE     NAME                                                                   READY   STATUS         AGE
kube-system   Pod/coredns-5cc79d4bf5-xgvkc                                           1/1     Running        30m
              ├── Node/k3d-server                                                    True    KubeletReady   30m
              ├── PodSecurityPolicy/system-unrestricted-psp                          -                      30m
kube-system   ├── ConfigMap/coredns                                                  -                      30m
kube-system   ├── ReplicaSet/coredns-5cc79d4bf5                                      1/1                    30m
kube-system   │   └── Deployment/coredns                                             1/1                    30m
kube-system   ├── Secret/coredns-token-6vsx4                                         -                      30m
kube-system   │   └── ServiceAccount/coredns                                         -                      30m
              │       ├── ClusterRoleBinding/system:basic-user                       -                      30m
              │       │   └── ClusterRole/system:basic-user                          -                      30m
              │       ├── ClusterRoleBinding/system:coredns                          -                      30m
              │       │   └── ClusterRole/system:coredns                             -                      30m
              │       ├── ClusterRoleBinding/system:discovery                        -                      30m
              │       │   └── ClusterRole/system:discovery                           -                      30m
              │       ├── ClusterRoleBinding/system:public-info-viewer               -                      30m
              │       │   └── ClusterRole/system:public-info-viewer                  -                      30m
kube-system   │       └── RoleBinding/system-unrestricted-svc-acct-psp-rolebinding   -                      30m
              │           └── ClusterRole/system-unrestricted-psp-role               -                      30m
              │               └── PodSecurityPolicy/system-unrestricted-psp          -                      30m
kube-system   └── ServiceAccount/coredns                                             -                      30m

Use the helm subcommand to display Helm release resources & optionally their respective dependents in a Kubernetes cluster.

$ kube-lineage helm kube-state-metrics -n monitoring-system
helm kube-state-metrics -n monitoring-system
NAMESPACE           NAME                                                             READY   STATUS     AGE
monitoring-system   kube-state-metrics                                               True    Deployed   25m
                    ├── ClusterRole/kube-state-metrics                               -                  25m
                    │   └── ClusterRoleBinding/kube-state-metrics                    -                  25m
monitoring-system   │       └── ServiceAccount/kube-state-metrics                    -                  25m
monitoring-system   │           ├── Pod/kube-state-metrics-7dff544777-jb2q2          1/1     Running    25m
monitoring-system   │           │   └── Service/kube-state-metrics                   -                  25m
monitoring-system   │           │       └── EndpointSlice/kube-state-metrics-rq8wk   -                  25m
monitoring-system   │           └── Secret/kube-state-metrics-token-bsr4q            -                  25m
monitoring-system   │               └── Pod/kube-state-metrics-7dff544777-jb2q2      1/1     Running    25m
                    ├── ClusterRoleBinding/kube-state-metrics                        -                  25m
monitoring-system   ├── Deployment/kube-state-metrics                                1/1                25m
monitoring-system   │   └── ReplicaSet/kube-state-metrics-7dff544777                 1/1                25m
monitoring-system   │       └── Pod/kube-state-metrics-7dff544777-jb2q2              1/1     Running    25m
monitoring-system   ├── Secret/sh.helm.release.v1.kube-state-metrics.v1              -                  25m
monitoring-system   ├── Service/kube-state-metrics                                   -                  25m
monitoring-system   └── ServiceAccount/kube-state-metrics

$ kube-lineage helm traefik --depth 1 --label-columns app.kubernetes.io/managed-by --label-columns owner
NAMESPACE     NAME                                       READY   STATUS     AGE   MANAGED-BY   OWNER
kube-system   traefik                                    True    Deployed   30m
              ├── ClusterRole/traefik                    -                  30m   Helm
              ├── ClusterRoleBinding/traefik             -                  30m   Helm
kube-system   ├── ConfigMap/traefik                      -                  30m   Helm
kube-system   ├── ConfigMap/traefik-test                 -                  30m   Helm
kube-system   ├── Deployment/traefik                     1/1                30m   Helm
kube-system   ├── Secret/sh.helm.release.v1.traefik.v1   -                  30m                helm
kube-system   ├── Secret/traefik-default-cert            -                  30m   Helm
kube-system   ├── Service/traefik                        -                  30m   Helm
kube-system   ├── Service/traefik-prometheus             -                  30m   Helm
kube-system   └── ServiceAccount/traefik                 -                  30m   Helm

Use either the split or split-wide output format to display resources grouped by their type.

$ kube-lineage deploy/coredns --output=split --show-group
NAME                      READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/coredns   3/3     3            3           30m

NAME                                            ADDRESSTYPE   PORTS        ENDPOINTS                          AGE
endpointslice.discovery.k8s.io/kube-dns-mz9bw   IPv4          53,9153,53   10.42.0.24,10.42.0.26,10.42.0.27   30m

NAME                           READY   STATUS    RESTARTS   AGE
pod/coredns-5cc79d4bf5-xgvkc   1/1     Running   0          30m
pod/coredns-5cc79d4bf5-rjc7d   1/1     Running   0          30m
pod/coredns-5cc79d4bf5-tt2zl   1/1     Running   0          30m

NAME                                 DESIRED   CURRENT   READY   AGE
replicaset.apps/coredns-5cc79d4bf5   3         3         3       30m

NAME               TYPE        CLUSTER-IP   EXTERNAL-IP   PORT(S)                  AGE
service/kube-dns   ClusterIP   10.43.0.10   <none>        53/UDP,53/TCP,9153/TCP   30m

Flags

Flags for configuring relationship discovery parameters

Flag Description
--all-namespaces, -A If present, list object relationships across all namespaces
--dependencies, -D If present, list object dependencies instead of dependents.
Not supported in helm subcommand
--depth, -d Maximum depth to find relationships
--exclude-types Accepts a comma separated list of resource types to exclude from relationship discovery.
You can also use multiple flag options like --exclude-types type1 --exclude-types type2...
--include-types Accepts a comma separated list of resource types to only include in relationship discovery.
You can also use multiple flag options like --include-types type1 --include-types type2...
--scopes, -S Accepts a comma separated list of additional namespaces to find relationships.
You can also use multiple flag options like -S namespace1 -S namespace2...

Flags for configuring output format

Flag Description
--output, -o Output format. One of: wide | split | split-wide
--label-columns, -L Accepts a comma separated list of labels that are going to be presented as columns.
You can also use multiple flag options like -L label1 -L label2...
--no-headers When using the default output format, don't print headers
--show-group If present, include the resource group for the requested object(s)
--show-label When printing, show all labels as the last column
--show-namespace When printing, show namespace as the first column

Use the following commands to view the full list of supported flags

$ kube-lineage --help
$ kube-lineage helm --help

Supported Relationships

List of supported relationships used for discovering dependent objects:

Installation

Install via krew

$ kubectl krew install lineage

$ kubectl lineage --version

Install from Source

$ git clone [email protected]:tohjustin/kube-lineage.git && cd kube-lineage
$ make install

$ kube-lineage --version

Prior Art

kube-lineage has been inspired by the following projects:

About

A CLI tool to display all dependencies or dependents of an object in a Kubernetes cluster.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 92.9%
  • Shell 5.9%
  • Makefile 1.2%