岂其食鱼,必河之鲤?岂其取妻,必宋之子?——《陈风·衡门》
写在前面
- 分享一个小工具
kubectl-tree
,用于查看 k8s API 对象层级关系
- 比如对于有状态应用来讲,可以看到
Deployment --> ReplicaSet --> Pod
的构成关系
- 博文内容涉及:
tree
插件的安装以及使用。
- 理解不足小伙伴帮忙指正
岂其食鱼,必河之鲤?岂其取妻,必宋之子?——《陈风·衡门》
有时候我们希望可以看到,k8s 中 有状态应用、无状态应用和 pod 的所有关系,但是往往需要多条命名才可以实现,其实通过 kubectl-tree
插件,可以很轻松的做到。
kubectl-tree
一个 kubectl 插件,它用于探索 Kubernetes 对象之间的所有权利关系。
下载安装
如果安装了 krew
插件管理器,可以通过下面的方式,前提是你有科学上网
1 2
| kubectl krew install tree kubectl tree --help
|
如果没有,那可以通过 浏览器下载下面的二进制安装包
1 2
| ┌──[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
插件
1 2 3 4 5 6 7 8 9
| ┌──[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
|
查看依赖关系
无状态应用关系查看
1 2 3 4 5
| ┌──[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
|
1 2 3 4 5 6
| ┌──[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
三个资源对象构成
1 2 3 4 5 6
| ┌──[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
|
多副本的情况
1 2 3 4 5 6 7 8 9
| ┌──[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 关系查看
1 2 3 4 5 6
| ┌──[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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| ┌──[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
|
有状态应用关系查看
1 2 3 4 5
| ┌──[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
构成
1 2 3 4 5 6 7 8 9
| ┌──[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] └─$
|
博文参考
https://github.com/ahmetb/kubectl-tree