【发布时间】:2021-07-26 07:48:37
【问题描述】:
我想按创建时间对 Kubernetes pod 进行排序。我尝试添加这样的逻辑。这里的“结果”是 Pod 数组(类型为 k8s.io/api/core/v1/Pod)
sort.Slice(result, func(i, j int) bool {
fmt.Printf("%T \n", result[j].CreationTimestamp)
fmt.Printf("time %t" , result[i].CreationTimestamp.Before(result[j].CreationTimestamp))
return result[i].CreationTimestamp.Before(result[j].CreationTimestamp)
})
使用上述逻辑,我得到错误
不能使用 t2 (type "k8s.io/apimachinery/pkg/apis/meta/v1".Time) 作为类型 *"k8s.io/apimachinery/pkg/apis/meta/v1".Time 在参数 t1.Before
我尝试了 v1.Time 的打印类型“result[j].CreationTimestamp”。我不确定我还缺少什么。谁能指导我。
解决方法是创建另一个对象并将其字段设置为 Pod 的 name 和 creationTime 并对其进行排序,但这会影响性能。
【问题讨论】:
-
这可能无法回答你的问题,我也不知道这些数据是从哪里来的,但是你不能让k8s帮你排序吗?例如。如果您正在解析
kubectl输出,请使用kubectl get pods --sort-by=".metadata.creationTImestamp?这样一来,您就无需担心实现此逻辑。 -
是的,从 kubectl 命令我可以排序,但我正在使用 golang 与 k8 交互。 @mkopriva 如果我使用 *, fmt.Printf("time %t" , result[i].CreationTimestamp.Before(*result[j].CreationTimestamp) 我得到以下错误“结果[j].ObjectMeta.CreationTimestamp的无效间接(type "k8s.io/apimachinery/pkg/apis/meta/v1".Time)"。result[j] 是 v1.Pod 类型
标签: go kubernetes-pod