3 min read | by Jordi Prats
kubectl get has an option to be able to sort it's output by any numeric or string field using it's JSON path. Let's take a look on how to do so:
We can use the PersistentVolume objects as an example:
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
audit-logs 2Gi RWO Retain Available manual 122m
pv0002 1Gi RWO Retain Available manual 122m
pv0003 3Gi RWO Retain Available manual 122m
To be able to sort it's output we must take a look at it's yaml definition in order to get it's path. For a PersistentVolume we can see that this would be .spec.capacity.storage:
$ kubectl get pv pvc-13901610-49f0-4fcf-b674-a3bc1d5e378c -o yaml | grep -E "storage: [0-9]" -B4
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 8Gi
Executing the same command with the --sort-by option and this path we will get the volumes sorted by size:
$ kubectl get pv --sort-by=.spec.capacity.storage
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv0002 1Gi RWO Retain Available manual 122m
audit-logs 2Gi RWO Retain Available manual 122m
pv0003 3Gi RWO Retain Available manual 122m
For sorting the pods by it's restart count it's a little more tricky:
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system ingress-nginx-admission-create-hjck6 0/1 Completed 0 53m
jenkins default-ffcjr 0/1 Error 0 31h
kube-system ingress-nginx-controller-558664778f-t64dl 1/1 Running 0 53m
kube-system ingress-nginx-admission-patch-f5dc5 0/1 Completed 0 53m
jenkins default-3x1fk 0/1 Error 0 26h
jenkins jenkins-0 2/2 Running 23 20d
kube-system kube-scheduler-minikube 1/1 Running 11 23d
kube-system coredns-f9fd979d6-g2bp8 1/1 Running 11 23d
kube-system kube-proxy-6khw8 1/1 Running 11 23d
kube-system etcd-minikube 1/1 Running 12 23d
kube-system kube-apiserver-minikube 1/1 Running 16 23d
kube-system metrics-server-d9b576748-57k42 1/1 Running 16 23d
kube-system kube-controller-manager-minikube 1/1 Running 18 23d
kube-system storage-provisioner 1/1 Running 30 23d
Right now, there's no way of sorting it in descending order, but tac always comes handy:
$ kubectl get pods --sort-by='.status.containerStatuses[0].restartCount' -A | tac
kube-system storage-provisioner 1/1 Running 30 23d
kube-system kube-controller-manager-minikube 1/1 Running 18 23d
kube-system metrics-server-d9b576748-57k42 1/1 Running 16 23d
kube-system kube-apiserver-minikube 1/1 Running 16 23d
kube-system etcd-minikube 1/1 Running 12 23d
kube-system kube-proxy-6khw8 1/1 Running 11 23d
kube-system coredns-f9fd979d6-g2bp8 1/1 Running 11 23d
kube-system kube-scheduler-minikube 1/1 Running 11 23d
jenkins jenkins-0 2/2 Running 23 20d
jenkins default-3x1fk 0/1 Error 0 26h
kube-system ingress-nginx-admission-patch-f5dc5 0/1 Completed 0 61m
kube-system ingress-nginx-controller-558664778f-t64dl 1/1 Running 0 61m
jenkins default-ffcjr 0/1 Error 0 31h
kube-system ingress-nginx-admission-create-hjck6 0/1 Completed 0 61m
NAMESPACE NAME READY STATUS RESTARTS AGE
Posted on 31/12/2020