我正试图根据作业的状态,使用golang-kubernetes客户端go-lib来过滤已完成的作业。
我检查了其他解释如何使用kubectl获得工作的答案,比如:
kubectl get job -o=jsonpath='{.items[?(@.status.succeeded==1)].metadata.name}'
但我不知道如何将jsonpath输出"转换"为过滤器或列表选项
如果我按吊舱的状态阶段和标签搜索吊舱,我会这样做:
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}
这将遍历所有作业,并检查状态下的successed键是否等于1。适用于所有工作。
有没有一种方法可以寻找更"内存友好"的作业,或者在ListOptions中使用类似的jsonpath
是,您可以在服务器端筛选出只完成的作业。
listOptions := metav1.ListOptions{
FieldSelector: "status.successful=1",
}
result, err := clientset.BatchV1().Jobs("").List(listOptions)
作业规范中的status.successful字段正直接映射到metav1.ListOptions.FieldSelector中的status.successful字段。更多信息。
也就是说,服务器端的可用选项列表受到高度限制。不能使用规范中的任意字段进行筛选(例如status.active或规范并行度(。Github对此有问题。