原文:https://kubernetes.io/docs/concepts/overview/working-with-objects/field-selectors/

字段选择器允许你根据一个或多个资源字段的值 选择 Kubernetes 资源

以下是一些字段选择器查询的示例:

  • metadata.name=my-service

  • metadata.namespace!=default

  • status.phase=Pending

下面 kubectl 命令可以选择所有 status.phase 字段值为 Running 的 Pods:

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

字段选择器本质上是资源过滤器。默认情况下,不使用选择器/过滤器意味着将选择指定类型的所有资源。这使得下面的 kubectl 查询语句是等效的:

  1. $ kubectl get pods
  2. $ kubectl get pods --field-selector ""

支持的字段

选择器支持的字段因 Kubernetes 资源类型而异。所有的资源类型都支持 metadata.namemetadata.namespace 字段。使用不受支持的字段,选择器会产生错误。例如:

  1. $ kubectl get ingress --field-selector foo.bar=baz
  2. 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"

支持的操作

标签 和其他选择器一样,字段选择器的条件可以链接成一个逗号列表。用下面命令可以选择所有 status.phase 不等于 Runningspec.restartPolicy 等于 Always 的 Pods:

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

多种资源类型

你可以跨多种资源类型使用字段选择器。用下面 kubectl 命令可以选择所有不在 default 命名空间的 Statefulsets 和 Services 对象:

  1. $ kubectl get statefulsets,services --field-selector metadata.namespace!=default