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

This branch is 7 commits ahead of tohjustin/kube-lineage:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Sep 19, 2023
72f2d17 · Sep 19, 2023
Sep 19, 2023
Oct 3, 2021
Sep 19, 2023
Sep 19, 2023
Sep 19, 2023
Sep 20, 2021
Sep 19, 2023
Sep 18, 2023
Oct 23, 2021
Aug 17, 2021
Sep 19, 2023
Aug 22, 2023
Aug 21, 2023
Aug 21, 2023

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 git@github.com: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%