【问题标题】:Get names of all deployment configs with no running pods获取没有正在运行的 pod 的所有部署配置的名称
【发布时间】:2020-05-24 18:47:05
【问题描述】:

是否有一种简单的方法(每次使用都不需要谷歌搜索)来获取 Kubernetes / Openshift 中没有运行 pod(缩放到 0)的所有部署配置的名称?请使用没有 JSON 令牌和 awk 的方法。

oc get dc --help 的文档太长,无法根据偶尔需要破译。

【问题讨论】:

  • 你能澄清你的问题,你到底想展示什么?没有健康 pod 的部署配置?扩展为 0 的部署配置?为了提供一个好的答案,我也有兴趣听听您的用例吗?
  • 添加了此信息(零副本)。我们的一些数据科学家将他们的 pod 缩小到零副本,而不是正确删除部署配置,因此我们需要偶尔为他们清理那些停止的 pod,...仅删除停止 pod 的 dc。
  • 为什么没有 awk?
  • 在 kubernetes 世界中,没有办法避免冗长的复杂命令。为自己编写一个易于使用且名称令人难忘的 bash 或 python 脚本,它可以满足您的需求,并将其保存在您的 ~/bin 目录中。在脚本的顶部放置一些 cmets,解释它的作用以及您从何处获取信息。以后你会感谢自己,当你与他们分享时,你的同事也会感谢你。

标签: kubernetes openshift kubectl openshift-origin openshift-client-tools


【解决方案1】:

在不使用 JSON 的情况下进行高级过滤的唯一 CLI 参数是 --field-selector,但它有一个 limited scope,其中不包括 spec.replicas 字段。

因此,带有其他标志的 JSON 周围会有一些魔力 - jsonpath。

这是一个过滤和打印所有缩放到 0 的部署名称的命令:

kubectl get deployments --all-namespaces -o=jsonpath='{range .items[?(@.spec.replicas==0)]}{.metadata.name}{"\n"}{end}'

Jsonpath 引用是here。

【讨论】:

  • 它确实有效,所以我投了赞成票,但接受后我将等待 API 更改,以消除不必要的复杂性和脆弱性(在 SO 上获得一些牵引力也将有助于功能请求Github)
  • Openshift 用户请注意,deployments 仅存在于正在运行的 Pod,因此如果我们寻找零副本 Pod,此方法将始终找不到任何东西,直到我们切换到部署配置 (oc get dc)
  • 还要注意--all-namespaces 需要集群管理员权限,因此如果您遇到 RBAC 错误,只需删除它并一次处理一个命名空间。
猜你喜欢
  • 1970-01-01
  • 2019-04-24
  • 2022-08-23
  • 1970-01-01
  • 2021-03-21
  • 2016-08-20
  • 2022-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多