【问题标题】:Get name of most recently created pod获取最近创建的 pod 的名称
【发布时间】:2019-01-20 14:32:10
【问题描述】:

在 OpenShift 中,有没有比这个更优雅的方法来获取应用程序 my_app 中最近创建的 pod 的名称?

name=$(oc get pods -l app=my_app -o=jsonpath='{range.items[*]}{.status.startTime}{"\t"}{.metadata.name}{"\n"}{end}' | sort -r | head -1 | awk '{print $2}')

这个想法是按.status.startTime 排序并输出一个.metadata.name。到目前为止,我还没有成功地同时使用oc get--sort-by-o jsonpath 这两个选项,所以我在这个版本中退回到了Unix管道。

我正在使用 OpenShift v3.9。我也为 Kubernetes 标记了这个问题,因为它可能以类似的方式(没有-l app=my_app)适用于kubectl(而不是oc)。

【问题讨论】:

  • FWIW,您可能还想根据身份获得资格。 oc get pods -o jsonpath='{.items[?(@.status.phase=="Running")].metadata.name}' 这种方式只显示 pod 实际运行的时间,而不显示其他状态的 pod。

标签: kubernetes openshift jsonpath


【解决方案1】:

试试这个:

kubectl get pods --sort-by=.metadata.creationTimestamp -o jsonpath="{.items[0].metadata.name}"

【讨论】:

  • 谢谢。也适用于oc
  • 这会以相反的顺序返回结果,如何获取最新的 pod,而不是最旧的 pod?
  • 可以使用jsonpath获取结果数组的最后一个元素。而不是 0,使用 '-1:' kubectl get pods --sort-by=.metadata.creationTimestamp -o jsonpath="{.items[-1:].metadata.name}"
【解决方案2】:

在 Kubernetes 前端,kubectl get po --sort-by=.status.startTime 应该可以工作,但在 K8s 1.7 中除外:it was fixed for 1.8

Kubernetes sort pods by age”也提到了

kubectl get pods --sort-by=.metadata.creationTimestamp

由于 Openshift 3.9(2018 年 3 月)是相当新的,即使 oc 不完全兼容,那些 kubectl 命令也应该可以工作。

【讨论】:

  • 是的,但是kubectl 可以只返回它最后排序的一个 pod 的名称吗?对于oc get pods --sort-by=.metadata.creationTimestamp,我得到一个行列表,其中列有NAMEREADYSTATUSRESTARTSAGE,按年龄排序。
猜你喜欢
  • 1970-01-01
  • 2022-06-15
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 2022-12-21
  • 1970-01-01
  • 2019-02-12
相关资源
最近更新 更多