1

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

我检查了其他解释如何使用 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}

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

有没有办法寻找那些更“记忆友好”的工作,或者在 ListOptions 中使用 jsonpaths 的方法?

4

1 回答 1

3

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

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

作业规范中的status.successful字段直接映射到metav1.ListOptions.FieldSelector中的status.succeeded字段。有关此的更多信息。

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

于 2020-04-14T21:23:45.643 回答