我使用以下命令按年龄对豆荚进行排序
kubectl get po --sort-by={metadata.creationTimestamp}
它以降序显示豆荚。我们可以选择升序排序吗?
答案 0 :(得分:2)
排序的kubectl
输出和awk
为表视图提供标题。不需要安装额外的工具。
# kubectl get pods --sort-by=.status.startTime | awk 'NR == 1; NR > 1 {print $0 | "tac"}'
paulogrell提供的使用JSON处理器的方法也可以,但是可能需要更多的努力:对于某些Linux发行版,您需要从源代码下载并编译jq
。至于jq
命令行,我建议将“名称”添加到map
参数中并按“时间戳”排序:
# kubectl get pods -o json | jq '.items | group_by(.metadata.creationTimestamp) | map({"name": .[0].metadata.name, "timestamp": .[0].metadata.creationTimestamp, "count": length}) | sort_by(.timestamp)'
答案 1 :(得分:0)
我相信Kubernetes API尚不支持此选项,但是作为一种解决方法,您可以使用JSON处理器(jq)调整其输出。
升序
kubectl get pods -o json | jq '.items | group_by(.metadata.creationTimestamp) | map({"timestamp": .[0].metadata.creationTimestamp, "count": length}) | sort_by(.count)'
下降
kubectl get pods -o json | jq '.items | group_by(.metadata.creationTimestamp) | map({"timestamp": .[0].metadata.creationTimestamp, "count": length}) | sort_by(.count) | reverse'
希望这会有所帮助
答案 2 :(得分:0)
kubectl
或kube-apiserver
在撰写本文(AFAIK)时不受支持,但是一种解决方法是:
$ kubectl get pods --sort-by=.metadata.creationTimestamp | tail -n +2 | tac
或如果tac不可用(MacOS X):
$ kubectl get pods --sort-by=.metadata.creationTimestamp | tail -n +2 | tail -r
如果需要标题:
$ echo 'NAME READY STATUS RESTARTS AGE' | \
kubectl get pods --sort-by=.metadata.creationTimestamp | tail -n +2 | tac
您可能只需要相应地调整标题上的标签即可。
答案 3 :(得分:0)
一旦您使用了 --no-headers
选项,就很容易对结果进行反向排序,因为HEADER不会成为Pod升序排列的一部分。
以下是完整的命令,可准确获得预期的结果:
kubectl get po --sort-by={metadata.creationTimestamp} --no-headers | tac
答案 4 :(得分:0)
适用于 MacOS 并保留任意标头的更简单版本:
kubectl get node --sort-by=.metadata.creationTimestamp | { read -r headers; echo "$headers"; tail -r; }