Kubernetes 字段选择器(Field Selectors)

Table of Contents

字段选择器 允许用户根据一个或者多个资源字段值选择 Kubernetes 资源。比如:

kubectl 命令通过 --field-selector 筛选资源,比如:

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

注意: 字段选择器本质上资源过滤器。默认情况下,没有应用选择器/过滤器,意味着选择指定类型的所有资源。 kubectl 查询 kubectl get podskubectl get pods --field-selector "" 是等价的。

1. 支持的字段

支持的字段视不同的 Kubernetes 资源而定。但是所有的资源类型都支持 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"

2. 支持的运算符

  • 相等: === 两者意义相同
  • 不相等: !=

比如,下面的 kubectl 命令,选择 Kubernetes 中所有的 Services 但不在 default 空间中:

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

3. 链式选择器

通过逗号分隔组成一个选择链,逗号表示 。比如:

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

4. 多种资源类型

多种资源类型中逗号分隔,可以 同时 筛选。比如:

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

First created: 2021-02-20 16:49:05
Last updated: 2021-11-15 Mon 10:18
Power by Emacs 27.2 (Org mode 9.4.6)