【问题标题】:How to sort pods based on creation time如何根据创建时间对 pod 进行排序
【发布时间】: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


【解决方案1】:

根据docs Before 需要*Time 因此我认为您必须像这样引用第二个时间戳:

return result[i].CreationTimestamp.Before(&result[j].CreationTimestamp)

【讨论】:

  • 感谢 Bäz Kurfer。这样可行。我需要深入学习 Go 语言。
猜你喜欢
  • 2021-06-23
  • 2019-09-05
  • 2018-08-09
  • 2012-07-15
  • 1970-01-01
  • 2023-02-22
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多