欄位選擇器

欄位選擇器允許你根據一個或多個資源欄位的值來選擇 Kubernetes 物件。以下是一些欄位選擇器查詢示例:

  • metadata.name=my-service
  • metadata.namespace!=default
  • status.phase=Pending

kubectl 命令選擇所有 status.phase 欄位值為 Running 的 Pod:

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

支援的欄位

支援的欄位選擇器因 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"

支援的欄位列表

型別欄位
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
副本集status.replicas
複製控制器status.replicas
作業status.successful
Nodespec.unschedulable
CertificateSigningRequestspec.signerName

自定義資源欄位

所有自定義資源型別都支援 metadata.namemetadata.namespace 欄位。

此外,CustomResourceDefinitionspec.versions[*].selectableFields 欄位聲明瞭自定義資源中哪些其他欄位可以用於欄位選擇器。有關如何將欄位選擇器與 CustomResourceDefinitions 一起使用的更多資訊,請參閱自定義資源的可選欄位

支援的運算子

你可以使用 ===!= 運算子與欄位選擇器(=== 含義相同)。例如,此 kubectl 命令選擇所有不在 default 名稱空間中的 Kubernetes Service:

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

鏈式選擇器

標籤和其他選擇器一樣,欄位選擇器可以作為逗號分隔列表進行連結。此 kubectl 命令選擇所有 status.phase 不等於 Runningspec.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
上次修改時間:2024 年 10 月 31 日太平洋標準時間上午 10:47:刪除穩定功能的欄位門資訊,向欄位選擇器文件新增詳細資訊 (2b996e4434)