我需要获取未由控制器创建的所有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
不是为此而设计的。我需要找到一种替代方法。
答案 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