文章目录
- 一、概述
- 二、基本语法
- 三、支持的字段
- 1、错误示例
- 2、支持的字段列表
- 四、支持的操作符
- 1、示例
- 五、跨多种资源类型使用字段选择器
一、概述
在Kubernetes中,字段选择器(Field Selectors)和标签选择器(Label Selectors)是两种不同的查询机制,用于过滤和选择特定的资源。字段选择器允许用户根据资源的内部字段来过滤资源,这些字段可以是资源的状态、元数据等。通过字段选择器,用户可以精确地选择出满足特定条件的资源,进而对这些资源执行进一步的操作,如查看、删除等。
二、基本语法
kubectl get --field-selector <key>([<operator>][<value>])
-
使用 kubectl get 命令加上 --field-selector 选项来指定字段选择器。
-
字段选择器的格式为 =,其中 是资源的字段名, 是要匹配的值。
-
可以使用多个字段选择器,用逗号分隔。
三、支持的字段
不同的 Kubernetes 资源类型支持不同的字段选择器。 所有资源类型都支持
metadata.name
和metadata.namespace
字段。 使用不被支持的字段选择器会产生错误。
1、错误示例
kubectl get ingress --field-selector foo.bar=baz
2、支持的字段列表
类别 | 字段 |
---|---|
Pod |
spec.nodeName spec.restartPolicy spec.schedulerName spec.serviceAccountName spec.hostNetwork status.phase status.podIP status.nominatedNodeName
|
Event |
involvedObject.kind involvedObject.namespace involvedObject.name involvedObject.uid involvedObject.apiVersion involvedObject.resourceVersion involvedObject.fieldPath reason reportingComponent source type
|
Secret | type |
Namespace | status.phase |
ReplicaSet | status.replicas |
ReplicationController | status.replicas |
Job | status.successful |
Node | spec.unschedulable |
CertificateSigningRequest | spec.signerName |
四、支持的操作符
- 等于(= 或 ==):选择字段值等于指定值的资源。
- 不等于(!=):选择字段值不等于指定值的资源。
- 基于集合的操作符 (in、notin、exists)不支持字段选择算符。
1、示例
kubectl get pods -A --field-selector=status.phase!=Running
#查询集群中所有非运行状态的Pods
kubectl get pods -A --field-selector=status.phase=Running,spec.restartPolicy=Always
#查询集群中所有处于运行状态(Running)并且重启策略设置为Always的Pods
多个字段选择器可以通过使用逗号分隔的列表组成一个选择链
五、跨多种资源类型使用字段选择器
kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
#查询集群中除default命名空间之外的所有命名空间内的StatefulSets和Services资源。