【问题标题】:How to filter finished jobs in kubernetes如何在 Kubernetes 中过滤已完成的作业
【发布时间】:2020-07-27 09:24:30
【问题描述】:

我正在尝试按状态过滤使用 golang kubernetes client-go lib 完成的作业。

我查看了 other answers,解释了如何使用 kubectl 获得工作,如下所示:

kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}'

但我不知道如何将 jsonpath 输出“转换”为过滤器或列表选项

如果我按状态阶段和标签搜索 pod,我会这样做:

listOptions := metav1.ListOptions{
    LabelSelector: "app.kubernetes.io/name=my-custom-job",
    FieldSelector: "status.phase=Running",
}
result, err := clientset.CoreV1().Pods("default").List(listOptions) 

但是如果我要实现 jsonpath {.items[?(@.status.succeeded==1)].metadata.name}

这将遍历所有作业并检查 status 下的成功键是否等于 1。适用于所有工作。

有没有办法寻找那些更“内存友好”的工作,或者在 ListOptions 中使用类似的 jsonpath?

【问题讨论】:

    标签: go kubernetes kubectl client-go


    【解决方案1】:

    是的,您可以在服务器端过滤掉仅已完成的作业。

    listOptions := metav1.ListOptions{
        FieldSelector: "status.successful=1",
    }
    result, err := clientset.BatchV1().Jobs("").List(listOptions) 
    
    作业规范中的

    status.successful 字段直接映射到 metav1.ListOptions.FieldSelector 中的 status.succeeded 字段。 More info about that.

    话虽如此,在服务器端过滤的可用选项列表受到高度限制。您不能使用规范中的任意字段(例如 status.active 或 spec.parallelism)进行过滤。 Github Issue on that.

    【讨论】:

      猜你喜欢
      • 2018-07-23
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2015-11-11
      相关资源
      最近更新 更多