Как отфильтровать выполненные работы в Кубернетес - PullRequest
1 голос
/ 14 апреля 2020

Я пытаюсь отфильтровать задания, которые завершены, используя 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}

Это будет повторять все задания и проверять если преуспевающий ключ по статусу равен единице. Для всех заданий.

Есть ли способ найти эти задания более «дружественными по отношению к памяти» или способ использования таких jsonpaths в ListOptions?

1 Ответ

2 голосов
/ 15 апреля 2020

Да , на стороне сервера вы можете отфильтровать только завершенные задания.

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

status.successful из поля задания c напрямую отображается в status.succeeded поле из metav1.ListOptions.FieldSelector . Подробнее об этом.

При этом список доступных вариантов фильтрации на стороне сервера строго ограничен. Вы не можете фильтровать, используя произвольные поля из spe c (например, status.active или spe c .parallelism ). Github Выпуск по этому вопросу.

...