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

举报
山河已无恙 发表于 2023/03/03 14:46:47 2023/03/03
【摘要】 1写在前面分享一个小工具 kubectl-tree,用于查看 k8s API 对象层级关系比如对于有状态应用来讲,可以看到Deployment --> ReplicaSet --> Pod 的构成关系博文内容涉及:tree 插件的安装以及使用。理解不足小伙伴帮忙指正 岂其食鱼,必河之鲤?岂其取妻,必宋之子?——《陈风·衡门》有时候我们希望可以看到,k8s 中 有状态应用、无状态应用和 pod...

1写在前面


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

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


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

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

下载安装

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

kubectl krew install tree
kubectl 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.gz
LICENSE
kubectl-tree
┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]
└─$mv kubectl-tree /usr/local/bin
┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]
└─$kubectl tree  --version
kubectl version v0.4.3

查看依赖关系

无状态应用关系查看

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]
└─$kubectl get deployments.apps  -n awx
NAME                              READY   UP-TO-DATE   AVAILABLE   AGE
awx-demo                          1/1     1            1           85d
awx-operator-controller-manager   1/1     1            1           85d
┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]
└─$kubectl tree deployments  awx-demo -n awx
NAMESPACE  NAME                                 READY  REASON  AGE
awx        Deployment/awx-demo                  -              85d
awx        └─ReplicaSet/awx-demo-65d9bf775b   -              85d
awx          └─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 awx
NAMESPACE  NAME                                                        READY  REASON  AGE
awx        Deployment/awx-operator-controller-manager                  -              85d
awx        └─ReplicaSet/awx-operator-controller-manager-79ff9599d8   -              85d
awx          └─Pod/awx-operator-controller-manager-79ff9599d8-m7t8k  True           85d

多副本的情况

┌──[root@vms81.liruilongs.github.io]-[~/ansible/krew]
└─$kubectl tree deployments liruilong
NAMESPACE                 NAME                                  READY  REASON  AGE
liruilong-topo-namespace  Deployment/liruilong                  -              12d
liruilong-topo-namespace  └─ReplicaSet/liruilong-744498fcbd   -              12d
liruilong-topo-namespace    ├─Pod/liruilong-744498fcbd-48t6z  False          7d10h
liruilong-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 awx
NAME                                              TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
awx-demo-postgres-13                              ClusterIP   None             <none>        5432/TCP       85d
awx-demo-service                                  NodePort    10.104.176.210   <none>        80:30066/TCP   85d
awx-operator-controller-manager-metrics-service   ClusterIP   10.108.71.67     <none>        8443/TCP       85d

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

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

有状态应用关系查看

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

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

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

2博文参考


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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。