Kubernetes 按年龄对 Pod 进行排序

Posted

技术标签:

【中文标题】Kubernetes 按年龄对 Pod 进行排序【英文标题】:Kubernetes sort pods by age 【发布时间】:2017-12-31 19:01:12 【问题描述】:

我可以使用以下方法按名称对我的 Kubernetes pod 进行排序:

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

如何使用kubectl按年龄对它们(或其他资源)进行排序?

【问题讨论】:

【参考方案1】:

Pod 有状态,您可以使用它来找出 startTime。

我想像kubectl get po --sort-by=.status.startTime 这样的东西应该可以工作。

你也可以试试:

    kubectl get po --sort-by='.firstTimestamp'kubectl get pods --sort-by=.metadata.creationTimestamp 谢谢@chris

同样显然在 Kubernetes 1.7 版本中,排序方式被破坏了。

https://github.com/kubernetes/kubectl/issues/43

这是错误报告:https://github.com/kubernetes/kubernetes/issues/48602

这是公关:https://github.com/kubernetes/kubernetes/pull/48659/files

【讨论】:

@vjdhama 有没有办法获取可以通过这种方式排序的完整列表? 完整列表是什么意思?您的意思是所有类型的资源。 有没有办法反向排序?因此,例如,您可以执行一次 watch kubectl 并在顶部获取最新的 pod? 这仅在我还包含 -o json-o wide 标志时才有效。在 1.7.x 和 1.9.x 上测试 @JoeJ kubectl 文档没有相反的顺序,但您可以使用 tail 命令来实现。 kubectl get pods --sort-by=.metadata.creationTimestamp | tail -r | head -n 1 我使用 tail -r 来恢复输出。然后head -n 1打印最新的pod【参考方案2】:
kubectl get pods --sort-by=.metadata.creationTimestamp

【讨论】:

我收到了error: unknown type *api.Pod, expected unstructured in map[reflect.Type]*printers.handlerEntry 的回复 这对于排序 ConfigMaps 很有用:kubectl get cm --sort-by=.metadata.creationTimestamp【参考方案3】:

如果你想根据年龄倒序排列:

kubectl get po --sort-by=.metadata.creationTimestamp -n <<namespace>> | tac

【讨论】:

【参考方案4】:

我创建 KUBESORT 正是为了这些排序目的。 请试一试,

https://github.com/AATHITH/kubesort

【讨论】:

【参考方案5】:

如果您尝试获取最近创建的 pod,您可以执行以下操作

kubectl get pods --sort-by=.metadata.creationTimestamp -o jsonpath='.items[-1:].metadata.name'

注意-1: 获取列表中的最后一项,然后我们返回 pod 名称

【讨论】:

【参考方案6】:

如果您只想要最近创建的 pod 的名称;

POD_NAME=$(kubectl get pod --sort-by=.metadata.creationTimestamp -o name | cut -d/ -f2 | tail -n 1)
echo "$POD_NAME"

【讨论】:

以上是关于Kubernetes 按年龄对 Pod 进行排序的主要内容,如果未能解决你的问题,请参考以下文章

Excel怎么根据出生日期按年龄大小进行排序

请问怎么在EXCEL表格里按年龄排序?

对列表里的字典按年龄从小到大排序

对一个 n 元素数组进行排序,使前 k 个元素按升序排列最低(就地算法)

c语言通讯录排序按年龄从小到大输出

这个c#程序,那行list.sort(),怎么就对他们的年龄进行排序了呢,也没说明根据啥排啊