Как отфильтровать выполненные вакансии в кубернетах
Я пытаюсь отфильтровать завершенные задания с помощью библиотеки golang kubernetes client-go по их статусу.
Я проверил другие ответы, объясняющие, как получить задания с помощью 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}
Это будет перебирать все задания и проверять, равен ли успешный ключ под статусом единице. Для всех вакансий.
Есть ли способ найти эти вакансии, более "дружественные к памяти", или способ использовать такие пути jsonpath в ListOptions?
1 ответ
Да, вы можете отфильтровать на стороне сервера только завершенные задания.
listOptions := metav1.ListOptions{
FieldSelector: "status.successful=1",
}
result, err := clientset.BatchV1().Jobs("").List(listOptions)
status.successful поле из спецификации на задания в настоящее время непосредственно отображается на status.succeeded поле от metav1.ListOptions.FieldSelector. Подробнее об этом.
При этом список доступных параметров фильтрации на стороне сервера сильно ограничен. Вы не можете фильтровать, используя произвольные поля из спецификации (например, status.active или spec.parallelism). Github Проблема по этому поводу.