k8s字段选择器

一、概述

在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、支持的字段列表

类别 字段
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

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

posted @ 2024-07-13 23:08  misakivv  阅读(8)  评论(0编辑  收藏  举报