一、概述

在Kubernetes中,字段选择器(Field Selectors)和标签选择器(Label Selectors)是两种不同的查询机制,用于过滤和选择特定的资源。字段选择器允许用户根据资源的内部字段来过滤资源,这些字段可以是资源的状态、元数据等。通过字段选择器,用户可以精确地选择出满足特定条件的资源,进而对这些资源执行进一步的操作,如查看、删除等。

二、基本语法

kubectl get --field-selector <key>([<operator>][<value>])
  • 使用 kubectl get 命令加上 --field-selector 选项来指定字段选择器。

  • 字段选择器的格式为 =,其中 是资源的字段名, 是要匹配的值。

  • 可以使用多个字段选择器,用逗号分隔。

三、支持的字段

不同的 Kubernetes 资源类型支持不同的字段选择器。 所有资源类型都支持 metadata.namemetadata.namespace 字段。 使用不被支持的字段选择器会产生错误。

1、错误示例

kubectl get ingress --field-selector foo.bar=baz

image-20240713215233430

2、支持的字段列表

类别字段
Podspec.nodeName spec.restartPolicy spec.schedulerName spec.serviceAccountName spec.hostNetwork status.phase status.podIP status.nominatedNodeName
EventinvolvedObject.kind involvedObject.namespace involvedObject.name involvedObject.uid involvedObject.apiVersion involvedObject.resourceVersion involvedObject.fieldPath reason reportingComponent source type
Secrettype
Namespacestatus.phase
ReplicaSetstatus.replicas
ReplicationControllerstatus.replicas
Jobstatus.successful
Nodespec.unschedulable
CertificateSigningRequestspec.signerName

四、支持的操作符

  • 等于(= 或 ==):选择字段值等于指定值的资源。
  • 不等于(!=):选择字段值不等于指定值的资源。
  • 基于集合的操作符 (in、notin、exists)不支持字段选择算符。

1、示例

kubectl get pods -A --field-selector=status.phase!=Running
#查询集群中所有非运行状态的Pods

image-20240713220455588

kubectl get pods -A --field-selector=status.phase=Running,spec.restartPolicy=Always
#查询集群中所有处于运行状态(Running)并且重启策略设置为Always的Pods

image-20240713221657491

多个字段选择器可以通过使用逗号分隔的列表组成一个选择链

五、跨多种资源类型使用字段选择器

kubectl get statefulsets,services --all-namespaces --field-selector metadata.namespace!=default
#查询集群中除default命名空间之外的所有命名空间内的StatefulSets和Services资源。

image-20240713222110941

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐