字段选择算符
字段选择算符(Field selectors) 允许你根据一个或多个资源字段的值筛选 Kubernetes 对象。下面是一些字段选择算符查询的例子:
metadata.name=my-servicemetadata.namespace!=defaultstatus.phase=Pending
下面这条 kubectl 命令会选择所有 status.phase 字段值为 Running 的 Pod:
kubectl get pods --field-selector status.phase=Running
字段选择算符本质是"资源过滤器"
默认情况下不应用任何选择算符/过滤器,意味着选定指定类型的全部资源。因此 kubectl get pods 与 kubectl get pods --field-selector "" 是等价的。
官方文档参考
支持的字段
字段选择算符的支持情况因 Kubernetes 资源类型而异。所有资源类型都支持 metadata.name 和 metadata.namespace 字段。使用不支持的字段选择算符会产生错误,例如:
kubectl get ingress --field-selector foo.bar=baz
Error from server (BadRequest): Unable to find "ingresses" that match label selector "", field selector "foo.bar=baz": "foo.bar" is not a known field selector: only "metadata.name", "metadata.namespace"
支持字段的完整列表
| 资源类型 | 支持的字段 |
|---|---|
| Pod | spec.nodeName、spec.restartPolicy、spec.schedulerName、spec.serviceAccountName、spec.hostNetwork、status.phase、status.podIP、status.podIPs、status.nominatedNodeName |
| Event | involvedObject.kind、involvedObject.namespace、involvedObject.name、involvedObject.uid、involvedObject.apiVersion、involvedObject.resourceVersion、involvedObject.fieldPath、reason、reportingComponent、source、type |
| Secret | type |
| Service | spec.clusterIP、spec.type |
| Namespace | status.phase |
| ReplicaSet | status.replicas |
| ReplicationController | status.replicas |
| Job | status.successful |
| Node | spec.unschedulable |
| CertificateSigningRequest | spec.signerName |