K8S字段选择算符

K8S   2025-07-08 09:40   14   0  




“字段选择算符(Field selectors)"允许你根据一个或多个资源字段的值筛选K8S对象,如

metadata.name=my-service
metadata.namespace!=default
status.phase=Pending

下面这个kubectl命令将筛选出status.phase字段值为Running的所有Pod:

kubectl get pods --field-selector status.phase=Running

说明: 字段选择算符本质上是资源“过滤器(Filters)”。默认情况下,字段选择算符/过滤器是未被应用的,这意味着指定类型的所有资源都会被筛选出来。这使得kubectl get podskubectl get pods --field-selector""这两个kubectl查询时等价的。支持的字段不同的K8S资源类型支持不同的字段选择算符。所有资源类型都支持metadata.namemetadata.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"

支持字段列表

类别字段
Podspec.nodeName
Podspec.restartPolicy
Podspec.schedulerName
Podspec.serviceAccountName
Podspec.hostNetwork
Podstatus.phase
Podstatus.podIP
Podstatus.nominatedNodeName
EventinvolvedObject.kind
EventinvolvedObject.namespace
EventinvolvedObject.name
EventinvolvedObject.uid
EventinvolvedObject.apiVersion
EventinvolvedObject.resourceVersion
EventinvolvedObject.fieldPath
Eventreason
EventreportingComponent
Eventsource
Eventtype
Secrettype
Namespacestatus.phase
ReplicaSetstatus.replicas
ReplicationControllerstatus.replicas
Jobstatus.successful
Nodespec.unschedulable
CertificateSigningRequestspec.signeerName

自定义资源字段所有自定义资源类型都支持metadata.namemetadata.namespace字段 此外,CustomResourceDefinition的spec.versions[*].selectableFields字段声明了自定义资源中那些其他字段可以用于字段选择算符。支持的操作符可以在字段选择算符中使用=、`==``和!=(===的意义是相同的)操作符。,例如,下面这个kubectl命令将筛选所有不属于default命名空间的K8S服务:

kubectl get services --all-namespaces --field-selector metadata.namespace!=default

说明: 基于集合的操作符(innotinexists)不支持字段选择算符链式选择算符同标签和其他选择算符一样,字段选择算符可以通过使用都好分隔的列表组成一个选择链。下面这个kubectl命令将筛选status.phase字段不等于Running同时spec.restartPolicy字段等于Always的所有Pod:

kubectl get pods --field-selector=status.phase!=Running,spec.restartPolicy=Always

多种资源类型字段选择算符也可以跨多种资源类型来使用,下面这个``kubectl命令将筛选出所有不在default```命名空间中的StatefulSet和Service

kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
             




博客评论
还没有人评论,赶紧抢个沙发~
发表评论
说明:请文明发言,共建和谐网络,您的个人信息不会被公开显示。