Можно ли остановить работу в Куберне, не удаляя ее? - PullRequest
0 голосов
/ 01 октября 2018

Поскольку Kubernetes обрабатывает ситуации, когда в спецификации задания есть опечатка, и, следовательно, изображение контейнера не может быть найдено, оставляя задание в постоянном рабочем состоянии, у меня есть процесс, который отслеживает события задания для обнаружения случаев.как это и удаляет задание, когда оно происходит.

Я бы предпочел просто остановить задание, чтобы его записать.Есть ли способ остановить работу?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

1) В соответствии с документацией K8S здесь .

Готовые задания обычно больше не нужны в системе.Хранение их в системе будет оказывать давление на сервер API.Если задания управляются непосредственно контроллером более высокого уровня, таким как CronJobs, задания могут быть очищены с помощью CronJobs на основе указанной политики очистки на основе емкости.

Здесь подробные сведения о свойстве failedJobsHistoryLimit в CronJobSpec.

Это еще один способ сохранения сведений о невыполненном задании в течение определенного периода времени.Свойство failedJobsHistoryLimit можно установить на основе приблизительного числа выполненных заданий в день и количества дней, в течение которых журналы должны храниться.Согласитесь, что Джобс все еще будет там и окажет давление на сервер API.

Это интересно.Как только задание завершается с ошибкой, как в случае неправильной опечатки для изображения, модуль удаляется, и ресурсы больше не блокируются и не используются.Не уверен, чего именно достигнет kubectl job stop в этом случае.Но когда работа с правильным изображением запускается с успехом, я все еще могу увидеть модуль в kubectl get pods.

2) Другой подход без использования CronJob - указать ttlSecondsAfterFinished, как указано здесь .

Другой способ очистки готовых заданий (либо Выполнитьили Failed) автоматически использует механизм TTL, предоставленный контроллером TTL для готовых ресурсов, указав поле .spec.ttlSecondsAfterFinished в Задании.

0 голосов
/ 02 октября 2018

Это хороший вопрос, такого механизма в Кубернетесе еще нет. Afaik.

Текущий обходной путь - подключиться к машине по ssh и запустить: (если вы используете Docker)

docker stop <main-container-id-for-your-job>

Можно утверждать, что вы можете настроить ведение журнала с помощью чего-то вроде Fluentd или logspout или Filebeat и перенаправить журналы на ELK илиEFK stack.

В любом случае я открыл this

...