我猜此时答案是否定的。我在这里向蜂巢思维寻求一个明确的答案,或者万一我错了(我真的希望我是错的),请举一个具体的例子。
我已经能够成功使用
jq
,但我希望我只是在 --sort-by
的 jsonpath 语法中遗漏了一些东西。
根据文档(也在下面引用)
kubectl
的--sort-by
参数采用jsonpath语法。
对列表对象进行排序
要将对象输出到终端窗口中的排序列表,您可以将
标志添加到支持的 kubectl 命令中。通过使用--sort-by
指定任何数字或字符串字段对对象进行排序。要指定字段,请使用 jsonpath 表达式。--sort-by flag
语法
kubectl [command] [TYPE] [NAME] --sort-by=<jsonpath_exp>
我查看了他们的 jsonpath 示例,虽然我似乎能够使用语法来输出我认为可排序的对象,但实际上我得到了空白输出。
也许输出可以连接/转换为字符串,而不是数组/列表,但这似乎对我不起作用。
任何人都可以确认在多个字段中使用
--sort-by
是否成功?
$ kubectl get --namespace ix-authentik pods -o=jsonpath="{range .items[*]}[{.metadata.namespace},{.metadata.name}]{end}" && echo
[<namespace a>,<pod a1>][<namespace a>,<pod a2>][<namespace b>,<pod b1>....
$ kubectl get --all-namespaces pods --sort-by="{range .}[{.metadata.namespace},{.metadata.name}]{end}"
No resources found
$ kubectl get --all-namespaces pods --sort-by="[{.metadata.namespace},{.metadata.name}]"
# Randomly sorted mess
$ kubectl get --all-namespaces pods --sort-by="{.metadata.namespace},{.metadata.name}"
# Sorted only by namespace
$ kubectl get --all-namespaces pods --sort-by=".metadata.namespace,.metadata.name"
No resources found
$ kubectl get --all-namespaces pods --sort-by="[.metadata.namespace,.metadata.name]"
No resources found
kubernates GitHub 存储库存在几个有关排序的问题,甚至有一个 2019 年的封闭 PR,他们打算弃用 --sort-by 功能,因为它太糟糕了。 但我无法轻松找到多个值。 (不过我可能搜索错了)
我什至尝试过 Bing Chat 的 AI 来解决这个问题,它建议的语法与上面类似,但它只在第一列上排序。人工智能无法找出尚未(正确)回答的问题(惊讶,惊讶),所以我正在接触人类驱动的蜂巢思维。
一种解决方法是在
kubectl
中指定自定义列,并使用 sort
实现多字段排序功能。
示例:
$ kubectl get nodes -o custom-columns=NAME:.metadata.name,ZONE:.metadata.labels.topology\.kubernetes\.io/zone,CREATED:.metadata.creationTimestamp --no-headers | sort -k 2b,2 -k 3b,3
先按可用区排序,再按同一可用区内的创建时间戳排序。