【问题标题】:How to search by arbitrary fields using field selector with kubectl?如何使用带有 kubectl 的字段选择器按任意字段进行搜索?
【发布时间】:2019-09-03 03:42:42
【问题描述】:

在此doc 中未列出支持的字段,我无法正确找到它们。通过一些试验和实验,我注意到以下几点:

这很好用并且可以找到一些 pod:

kubectl get pods --field-selector=spec.restartPolicy=Never

但这会产生错误:

kubectl get pods --field-selector=spec.serviceAccount=default

No resources found.
Error from server (BadRequest): Unable to find {"" "v1" "pods"} that match label selector "", field selector "spec.serviceAccount=default": field label not supported: spec.serviceAccount

那么这是如何决定的呢?我知道我可以用 JSONPath 找到,但它是客户端过滤 AFAIK。

【问题讨论】:

  • 很多人使用 Kubernetes、Docker 等进行开发,这里有成千上万的 Docker 和 Kubernetes 问题,在 StackExchange 网络中没有另一个适合他们的地方,这两个服务器都不是一个好的候选者而且这里的人显然更多。对已经回答的问题投票结束只不过是一种敌对行动。 StackOverfow 中问题的微观管理让许多人感到沮丧,并导致了这里提到的精英行为stackoverflow.blog/2018/04/26/…
  • 您应该向Meta.SO 投诉。结束题外话是 Stack Overflow 上的标准工作流程。没有什么敌意的。此外,“精英行为”涉及与缺乏经验的程序员和少数群体的社区互动。跟跑题无关。

标签: linux shell docker kubernetes kubectl


【解决方案1】:

您可以使用以下查询选择serviceAccount

kubectl get pods --field-selector=spec.serviceAccountName="default"

--field-selector 当前仅选择基于相等的值,因此它对基于字段选择 pod 的支持也非常有限。 --field-selector支持以下字段:

metadata.name
metadata.namespace
spec.nodeName
spec.restartPolicy
spec.schedulerName
spec.serviceAccountName
status.phase
status.podIP
status.nominatedNodeName

如您所知,您需要依赖 jsonpath 来选择上述字段以外的任何其他字段。

您可以访问以下链接了解更多信息:

https://github.com/kubernetes/kubernetes/blob/master/pkg/apis/core/v1/conversion.go#L160-L167]1

【讨论】:

    猜你喜欢
    • 2022-06-27
    • 2017-10-14
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 2022-10-19
    • 2018-07-13
    • 1970-01-01
    • 2014-10-10
    相关资源
    最近更新 更多