欄位選取器

欄位選取器 可讓您根據一或多個資源欄位的值來選取 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
事件involvedObject.kind
involvedObject.namespace
involvedObject.name
involvedObject.uid
involvedObject.apiVersion
involvedObject.resourceVersion
involvedObject.fieldPath
reason
reportingComponent
source
type
密鑰type
命名空間status.phase
ReplicaSetstatus.replicas
ReplicationControllerstatus.replicas
工作status.successful
節點spec.unschedulable
CertificateSigningRequestspec.signerName

自訂資源欄位

所有自訂資源類型都支援 metadata.namemetadata.namespace 欄位。

此外,CustomResourceDefinitionspec.versions[*].selectableFields 欄位宣告自訂資源中的哪些其他欄位可以用於欄位選取器。請參閱 自訂資源的可選欄位,以取得有關如何將欄位選取器與 CustomResourceDefinitions 搭配使用的更多資訊。

支援的運算子

您可以將 ===!= 運算子與欄位選取器搭配使用 (=== 意義相同)。例如,此 kubectl 命令選取不在 default 命名空間中的所有 Kubernetes 服務

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 和服務

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