Kubernetes sort pods by age [closed]
Asked Answered
T

7

160

I can sort my Kubernetes pods by name using:

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

How can I sort them (or other resoures) by age using kubectl?

Teahan answered 25/7, 2017 at 17:43 Comment(0)
A
239

Pods have status, which you can use to find out startTime.

I guess something like kubectl get po --sort-by=.status.startTime should work.

You could also try:

  1. kubectl get po --sort-by='{.firstTimestamp}'.
  2. kubectl get pods --sort-by=.metadata.creationTimestamp Thanks @chris

Also apparently in Kubernetes 1.7 release, sort-by is broken.

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

Here's the bug report : https://github.com/kubernetes/kubernetes/issues/48602

Here's the PR: https://github.com/kubernetes/kubernetes/pull/48659/files

Adhamh answered 25/7, 2017 at 18:59 Comment(8)
@Adhamh is there a way to get a full list of things which can be sorted by in this way?Sadowski
What do you mean by full list of things? You mean all types of resources.Adhamh
Is there a way to reverse sort? So, for example, you can do a watch kubectl and get the newest pods at the top?Jeer
This does not seem to work? error: couldn't find any field with path "{.status.startTime}" in the list of objects - because the pods are still pending perhaps?Eddo
This only works if I also include the -o json or -o wide flags. Tested on 1.7.x and 1.9.xCelle
@JoeJ The kubectl docs don't have a reverse order but you can do that with the tail command. kubectl get pods --sort-by=.metadata.creationTimestamp | tail -r | head -n 1 I used tail -r to revert the output. Then head -n 1 to print the newest podNorthnortheast
The .metadata.creationTimestamp is a better choice as it includes the pending containers which naturally have zero .status.startTime and would therefore appear at the top of the list, not the bottom.Samuelsamuela
@Matthew, you may refer following URL for additional details (hope you already did, but it may help others): kubernetes.io/docs/reference/kubectl/overview/#output-optionsPorous
E
51
kubectl get pods --sort-by=.metadata.creationTimestamp
Eddo answered 20/7, 2018 at 9:41 Comment(2)
I'm getting error: unknown type *api.Pod, expected unstructured in map[reflect.Type]*printers.handlerEntry{} responseCelle
This is useful for sorting the ConfigMaps: kubectl get cm --sort-by=.metadata.creationTimestampRhineland
P
12

If you are trying to get the most recently created pod you can do the following

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

Note the -1: gets the last item in the list, then we return the pod name

Prosaism answered 9/10, 2020 at 11:3 Comment(0)
I
4

If you want to sort them in reverse order based on the age:

kubectl get po --sort-by=.metadata.creationTimestamp -n <<namespace>> | tac
Ipswich answered 28/10, 2019 at 18:24 Comment(0)
C
1

This new command (since Kubernetes 1.23) worked perfectly for me:

kubectl alpha events

In contrast, neither of these worked for me (got unsorted events):

  • kubectl get events --sort-by='.lastTimestamp'
  • kubectl get events --sort-by=.metadata.creationTimestamp

I also saw reports that the above failed due to missing event properties: https://github.com/kubernetes/kubernetes/issues/29838#issuecomment-991070746

Ceil answered 5/9, 2022 at 19:57 Comment(0)
T
0

If you want just the name of most-recently-created pod;

POD_NAME=$(kubectl get pod --sort-by=.metadata.creationTimestamp -o name | cut -d/ -f2 | tail -n 1)
echo "${POD_NAME}"
Tortosa answered 31/1, 2022 at 18:4 Comment(0)
P
0

I wanted to see all pods that were updated in the past 24 hours. This worked perfectly well and doesn't rely on a particular version of Kubernetes or Kubernetes advanced parameters besides get pods:

kubectl get pods | awk '{print $1 " : " $5}' | grep -E ':\s([1-9]|[12][0-4])h$' | sort -k3,3

Pender answered 22/4, 2022 at 15:45 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.