«

K8S字段选择算符

一个摆子 发布于 阅读:82 K8S


“字段选择算符(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"
支持字段列表 类别 字段
Pod spec.nodeName
Pod spec.restartPolicy
Pod spec.schedulerName
Pod spec.serviceAccountName
Pod spec.hostNetwork
Pod status.phase
Pod status.podIP
Pod status.nominatedNodeName
Event involvedObject.kind
Event involvedObject.namespace
Event involvedObject.name
Event involvedObject.uid
Event involvedObject.apiVersion
Event involvedObject.resourceVersion
Event involvedObject.fieldPath
Event reason
Event reportingComponent
Event source
Event type
Secret type
Namespace status.phase
ReplicaSet status.replicas
ReplicationController status.replicas
Job status.successful
Node spec.unschedulable
CertificateSigningRequest spec.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

交流群:

请先 登录 再评论