Получить метку времени последнего успешного завершения задания cron через kubectl

У меня есть cronjob, который запускается каждые пару минут в kubernetes, и я хотел бы настроить оповещение, которое уведомляет меня, когда cronjob перестает работать.

Я ожидаю, что иногда он будет терпеть неудачу, он вызывает две конечные точки REST, и они не всегда будут доступны.

Я хочу знать, произошел ли последний успешный запуск более x минут назад. Для этого мне нужна последняя отметка времени успешного завершения.

Я хотел бы использовать инструмент командной строки kubectl. Как мне это сделать?


person fafl    schedule 08.10.2020    source источник
comment
Вы не предоставили пример с образцом вывода kubectl, поэтому большинство читателей этого вопроса не могут придумать возможные ответы, проанализировав этот вывод и получив результат, только читатели, которые могут протестировать с помощью kubernetes и могут воспроизвести случай.   -  person thanasisp    schedule 08.10.2020
comment
Пример вывода отсутствует, потому что я даже не уверен, какую команду kubectl я должен запустить. Возможно, есть лучший способ решить эту проблему, используя параметр вывода yaml.   -  person fafl    schedule 08.10.2020


Ответы (1)


Это было проще, чем я думал, это мое решение с использованием kubectl и jq:

kubectl get job -l component=<cronjob> -n <namespace> -o json | \
jq -r '.items[] | select(.status.succeeded) | .status.completionTime' | \
sort -r | head -n 1

kubectl получает все выполненные задания cronjob и печатает их в json.

jq затем выбирает все успешные задания и печатает время их завершения.

sort и head, затем выберите последнюю метку времени.

person fafl    schedule 08.10.2020
comment
Вы можете опустить дополнительные вызовы sort и head, поскольку jq может сортировать, получать минимальные/максимальные значения, см., например, это. В случае выбора неизвестных значений, где нет гарантии, результаты будут линейно-ориентированными и по одному на строку, что также было бы безопаснее. - person thanasisp; 08.10.2020
comment
Я знаю схему ответа, она всегда должна выдавать либо дату, либо пустую строку, если задание еще не завершено. Пустые строки здесь сортируются последними. Я не знал, что jq может так много сделать, спасибо, что выделили. Но я нахожу это достаточно запутанным и предпочел бы использовать простые команды bash. - person fafl; 08.10.2020