如何在kubernetes中过滤完成的工作

How to filter finished jobs in kubernetes

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

我已经查看 解释如何使用 kubectl 获取作业,如下所示:

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

但我不知道如何"turn"将 jsonpath 输出到过滤器或列表选项中

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

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}

这将遍历所有作业并检查状态下的成功键是否等于 1。对于所有工作。

有没有一种方法可以更多地寻找这些工作"memory friendly",或者有一种方法可以像 ListOptions 那样使用 jsonpaths 吗?

,你可以过滤掉,在服务器端,只有完成的作业。

listOptions := metav1.ListOptions{
    FieldSelector: "status.successful=1",
}
result, err := clientset.BatchV1().Jobs("").List(listOptions) 

status.successful 作业规范中的字段直接映射到 [=23 中的 status.succeeded 字段=]metav1.ListOptions.FieldSelector。 More info about that.

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