如何在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.active或spec.parallelism). Github Issue on that.
我正在尝试按状态过滤使用 golang kubernetes client-go lib 完成的作业。
我已经查看
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.active或spec.parallelism). Github Issue on that.