如何在OpenShift集群中查找使用NodeSelector的项目与Pod?
查找OpenShift集群中使用NodeSelector的资源
一、查找所有使用NodeSelector的Pod
以下命令可遍历集群所有命名空间,筛选出配置了NodeSelector的Pod:
简洁输出(仅命名空间+Pod名)
oc get pods --all-namespaces -o jsonpath='{range .items[?(.spec.nodeSelector)]}{.metadata.namespace}{"\t"}{.metadata.name}{"\n"}{end}'
包含NodeSelector详情的输出
若需同时查看Pod的NodeSelector具体配置,用jq(需提前安装)过滤更直观:
oc get pods --all-namespaces -o json | jq -r '.items[] | select(.spec.nodeSelector != null) | [.metadata.namespace, .metadata.name, .spec.nodeSelector] | @tsv'
二、生成使用NodeSelector的项目(命名空间)列表
分两种场景,按需选择:
1. 查找本身配置了项目级NodeSelector的命名空间
OpenShift中项目级NodeSelector通过openshift.io/node-selector注解配置,会自动应用到该项目下所有未单独设置NodeSelector的Pod:
oc get namespaces -o jsonpath='{range .items[?(.metadata.annotations.openshift\.io/node-selector)]}{.metadata.name}{"\t"}{.metadata.annotations.openshift\.io/node-selector}{"\n"}{end}'
用jq格式化输出:
oc get namespaces -o json | jq -r '.items[] | select(.metadata.annotations."openshift.io/node-selector" != null) | [.metadata.name, .metadata.annotations."openshift.io/node-selector"] | @tsv'
2. 查找存在至少一个使用NodeSelector的Pod的项目
若需统计所有包含配置了NodeSelector的Pod的项目,可通过去重命名空间实现:
oc get pods --all-namespaces -o jsonpath='{range .items[?(.spec.nodeSelector)]}{.metadata.namespace}{"\n"}{end}' | sort | uniq
三、验证具体资源的NodeSelector配置
- 查看单个Pod的NodeSelector详情:
oc describe pod <pod-name> -n <namespace> | grep -A5 "Node Selector"
- 查看单个命名空间的项目级NodeSelector配置:
oc describe namespace <namespace-name> | grep -A2 "Node Selector"
内容的提问来源于stack exchange,提问作者ma9811
相关产品推荐
相关产品推荐

