如何仅列出由部署控制的所有 pod?

时间:2021-03-22 13:52:39

标签: kubernetes kubectl kubernetes-pod

我想列出特定命名空间的所有 pod,但只列出那些受部署控制的 pod 我试过这个,但没有成功: kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.ownerReferences == deployment ) | .metadata.name) | .[]'

我使用这个命令: kubectl get pods -o=jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.spec.containers[*].name}{"\n"}{end}' --all-namespaces |sed 's/\t/\'$'\\/g' | sort | uniq 列出所有容器及其命名空间,所以我想要相同但过滤掉所有非部署类型

2 个答案:

答案 0 :(得分:1)

您可以使用 --custom-columns 找出哪些 Pod 受到控制,以及哪种控制器是所有者。示例:

$ kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace
NAME                                        CONTROLLER   NAMESPACE
nginx-858dbf7665-8t9vv                      ReplicaSet   default
coredns-74ff55c5b-xpgnq                     ReplicaSet   kube-system
etcd-minikube                               Node         kube-system
ingress-nginx-admission-create-n6j7k        Job          kube-system
ingress-nginx-admission-patch-45xvw         Job          kube-system
ingress-nginx-controller-65cf89dc4f-g7lwm   ReplicaSet   kube-system
kindnet-44pq8                               DaemonSet    kube-system
kindnet-nqhg9                               DaemonSet    kube-system
kube-apiserver-minikube                     Node         kube-system
kube-controller-manager-minikube            Node         kube-system
kube-proxy-nmzbn                            DaemonSet    kube-system
kube-proxy-wlmdz                            DaemonSet    kube-system
kube-scheduler-minikube                     Node         kube-system
metrics-server-58966dd6b9-schjr             ReplicaSet   kube-system
storage-provisioner                         <none>       kube-system

请记住,Deployments 会自动创建 ReplicaSets 并依靠它们来管理一组 Pod 及其所需的状态/副本。所以你可以过滤它们:

$ kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.ownerReferences[]?.kind == "ReplicaSet" ) | .metadata.name) | .[]'
nginx-858dbf7665-8t9vv
coredns-74ff55c5b-xpgnq
ingress-nginx-controller-65cf89dc4f-g7lwm
metrics-server-58966dd6b9-schjr

答案 1 :(得分:0)

出于某种原因,kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace 对我不起作用,出现以下错误

zsh:未找到匹配项:custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace

相反,这很好用 - kubectl get pods -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,Component:.metadata.ownerReferences\[\].kind