Kubernetes 字段選擇器

2022-04-28 14:34 更新

字段選擇器

“字段選擇器(Field selectors)”允許你根據(jù)一個或多個資源字段的值 篩選 Kubernetes 資源。 下面是一些使用字段選擇器查詢的例子:

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

下面這個 ?kubectl ?命令將篩選出 ?status.phase? 字段值為 ?Running ?的所有 Pod:

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

字段選擇器本質(zhì)上是資源過濾器(Filters)。默認(rèn)情況下,字段選擇器/過濾器是未被應(yīng)用的, 這意味著指定類型的所有資源都會被篩選出來。 這使得以下的兩個 ?kubectl ?查詢是等價的:

kubectl get pods
kubectl get pods --field-selector ""

支持的字段 

不同的 Kubernetes 資源類型支持不同的字段選擇器。 所有資源類型都支持 ?metadata.name? 和 ?metadata.namespace? 字段。 使用不被支持的字段選擇器會產(chǎn)生錯誤。例如:

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"

支持的操作符 

你可在字段選擇器中使用 ?=?、?==?和 ?!=? (?=? 和 ?==? 的意義是相同的)操作符。 例如,下面這個 ?kubectl? 命令將篩選所有不屬于 ?default ?命名空間的 Kubernetes 服務(wù):

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

鏈?zhǔn)竭x擇器 

同標(biāo)簽和其他選擇器一樣, 字段選擇器可以通過使用逗號分隔的列表組成一個選擇鏈。 下面這個 ?kubectl ?命令將篩選 ?status.phase? 字段不等于 ?Running ?同時 ?spec.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


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號