我如何列出不是由控制器创建的所有Pod

时间:2019-10-29 18:45:52

标签: kubernetes kubectl

我需要获取未由控制器创建的所有Pod的列表,以便在进行节点消耗之前可以决定如何处理它们。

否则我会收到消息:

error: cannot delete Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet (use --force to override) while running the drain.

我可以通过运行kubectl describe <pod>并查看“ Controlled By:”是否丢失来找到信息,但是我想以编程方式搜索节点上的所有Pod,因为kubectl describe不是为此而设计的。我需要找到一种替代方法。

1 个答案:

答案 0 :(得分:2)

您可以依靠ownerReferences API对象来找到它:

  

$ kubectl解释pod.metadata.ownerReferences

     

种类:豆荚

     

版本:v1

     

资源:ownerReferences <[] Object>

     

说明:        该对象所依赖的对象列表。如果列表中的所有对象都具有        被删除后,该对象将被垃圾回收。如果这个对象是        由控制器管理,则此列表中的条目将指向此        控制器,控制器字段设置为true。不能有更多        多于一个总经理。

裸豆荚(即没有控制器/所有者的豆荚)将不包含ownerReferences字段,因此您可以使用--custom-columns来找出哪些豆荚受到控制:

$ kubectl get pods --all-namespaces -o custom-columns=NAME:.metadata.name,CONTROLLER:.metadata.ownerReferences[].kind,NAMESPACE:.metadata.namespace
NAME                               CONTROLLER   NAMESPACE
nginx-85ff79dd56-tvpts             ReplicaSet   default
static-pod1                        <none>       default
static-pod2                        <none>       default
coredns-5644d7b6d9-6hg82           ReplicaSet   kube-system
coredns-5644d7b6d9-wtph7           ReplicaSet   kube-system
etcd-minikube                      <none>       kube-system
kube-addon-manager-minikube        <none>       kube-system
kube-apiserver-minikube            <none>       kube-system
kube-controller-manager-minikube   <none>       kube-system
kube-proxy-fff5c                   DaemonSet    kube-system
kube-scheduler-minikube            <none>       kube-system
storage-provisioner                <none>       kube-system
tiller-deploy-55c9c4b4df-hgzwm     ReplicaSet   kube-system

如果只希望控制器管理员不拥有的Pod名称,则可以使用vertx command line处理kubectl get -o json的输出(对于后脚本处理非常有用):

$ kubectl get pods --all-namespaces -o json | jq -r '.items | map(select(.metadata.ownerReferences == null ) | .metadata.name) | .[]'
static-pod1
static-pod1
etcd-minikube
kube-addon-manager-minikube
kube-apiserver-minikube
kube-controller-manager-minikube
kube-scheduler-minikube
storage-provisioner