> 文档中心 > Kubernetes:通过 kubectl 插件 kubectl-tree 查看API对象层级关系

Kubernetes:通过 kubectl 插件 kubectl-tree 查看API对象层级关系


写在前面


  • 分享一个小工具 kubectl-tree,用于查看 k8s API 对象层级关系
  • 比如对于有状态应用来讲,可以看到Deployment --> ReplicaSet --> Pod 的构成关系
  • 博文内容涉及:tree 插件的安装以及使用。
  • 理解不足小伙伴帮忙指正

岂其食鱼,必河之鲤?岂其取妻,必宋之子?——《陈风·衡门》


有时候我们希望可以看到,k8s 中 有状态应用、无状态应用和 pod 的所有关系,但是往往需要多条命名才可以实现,其实通过 kubectl-tree 插件,可以很轻松的做到。

kubectl-tree 一个 kubectl 插件,它用于探索 Kubernetes 对象之间的所有权利关系。

Kubernetes:通过 kubectl 插件 kubectl-tree 查看API对象层级关系

下载安装

如果安装了 krew插件管理器,可以通过下面的方式,前提是你有科学上网

kubectl krew install treekubectl tree --help

如果没有,那可以通过 浏览器下载下面的二进制安装包

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$wget https://github.com/ahmetb/kubectl-tree/releases/download/v0.4.3/kubectl-tree_v0.4.3_linux_amd64.tar.gz

然后配置为 kubectl 插件

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$tar -zxvf kubectl-tree_v0.4.3_linux_amd64.tar.gzLICENSEkubectl-tree┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$mv kubectl-tree /usr/local/bin┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree  --versionkubectl version v0.4.3

查看依赖关系

Kubernetes:通过 kubectl 插件 kubectl-tree 查看API对象层级关系

无状态应用关系查看

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl get deployments.apps  -n awxNAME  READY   UP-TO-DATE   AVAILABLE   AGEawx-demo     1/1     1     1    85dawx-operator-controller-manager   1/1     1     1    85d
┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree deployments  awx-demo -n awxNAMESPACE  NAME     READY  REASON  AGEawx Deployment/awx-demo    -85dawx └─ReplicaSet/awx-demo-65d9bf775b   -85dawx   └─Pod/awx-demo-65d9bf775b-hc58x  True    85d

可以看到,无状态应用由 Deployment、 ReplicaSet,Pod 三个资源对象构成

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree deployments  awx-operator-controller-manager  -n awxNAMESPACE  NAMEREADY  REASON  AGEawx Deployment/awx-operator-controller-manager    -85dawx └─ReplicaSet/awx-operator-controller-manager-79ff9599d8   -85dawx   └─Pod/awx-operator-controller-manager-79ff9599d8-m7t8k  True    85d

多副本的情况

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree deployments liruilongNAMESPACE   NAME      READY  REASON  AGEliruilong-topo-namespace  Deployment/liruilong    -12dliruilong-topo-namespace  └─ReplicaSet/liruilong-744498fcbd   -12dliruilong-topo-namespace    ├─Pod/liruilong-744498fcbd-48t6z  False   7d10hliruilong-topo-namespace    └─Pod/liruilong-744498fcbd-4bmf4  True    6d1h┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$

Service 关系查看

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl get services -n awxNAME    TYPE CLUSTER-IPEXTERNAL-IP   PORT(S) AGEawx-demo-postgres-13  ClusterIP   None      <none> 5432/TCP85dawx-demo-service      NodePort    10.104.176.210   <none> 80:30066/TCP   85dawx-operator-controller-manager-metrics-service   ClusterIP   10.108.71.67     <none> 8443/TCP85d

Service 由 Service、EndpointSlice 构成,这里如果是 1.21 之前的版本,看到的应该是 Endpoints,而不是 EndpointSlice

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree svc awx-demo-service  -n awxNAMESPACE  NAME   READY  REASON  AGEawx Service/awx-demo-service    -85dawx └─EndpointSlice/awx-demo-service-6gs4d  -85d┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree svc awx-demo-postgres-13 -n awxNAMESPACE  NAMEREADY  REASON  AGEawx Service/awx-demo-postgres-13    -85dawx └─EndpointSlice/awx-demo-postgres-13-4tc87  -85d┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree svc awx-operator-controller-manager-metrics-service -n awxNAMESPACE  NAME      READY  REASON  AGEawx Service/awx-operator-controller-manager-metrics-service    -85dawx └─EndpointSlice/awx-operator-controller-manager-metrics-service-7wtml  -85d

有状态应用关系查看

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl get -n awx statefulsets.appsNAME     READY   AGEawx-demo-postgres-13   1/1     85dweb      0/3     30d

有状态应用由 statefulsets、ControllerRevision、Pod 构成

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$kubectl tree statefulsets awx-demo-postgres-13  -n awxNAMESPACE  NAME   READY  REASON  AGEawx StatefulSet/awx-demo-postgres-13   -85dawx ├─ControllerRevision/awx-demo-postgres-13-85958bcbcd  -85dawx └─Pod/awx-demo-postgres-13-0     True    85d┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]└─$

博文参考


https://github.com/ahmetb/kubectl-tree