Как убить контейнер с несколькими контейнерами, если один контейнер выйдет из строя?

Я использую плагин Jenkins Kubernetes, который запускает модули в кластере Kubernetes, которые служат агентами Jenkins. Поды содержат 3 контейнера для обеспечения подчиненной логики, сокета Docker, а такжеgcloud инструмент командной строки.

Обычный рабочий процесс заключается в том, что ведомое устройство выполняет свою работу и уведомляет ведущее устройство о завершении. Затем мастер завершает работу модуля. Однако, если подчиненный контейнер выходит из строя из-за потери сетевого соединения, контейнер завершает работу с кодом ошибки 255, два других контейнера продолжают работать, как и модуль. Это проблема, потому что модули имеют большие запросы к процессору, а установка обходится дешево, так как подчиненное устройство работает только тогда, когда это необходимо, но наличие нескольких компьютеров, работающих в течение 24 часов или в выходные, является заметным финансовым ущербом.

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

Могу ли я завершить работу модуля в случае отказа одного контейнера без его возрождения? Поскольку решение с тайм-аутом также приемлемо, но менее предпочтительно.

1 ответ

Отказ от ответственности, у меня довольно ограниченные знания о кубернетах, но с учетом вопроса:

Может быть, вы можете запустить четвертый контейнер, который предоставляет одну простую конечную точку "живучести". Он может запускаться ps -ef или любой другой способ связаться с 3 существующими контейнерами, чтобы убедиться, что они живы.

Эта конечная точка может вернуть "ОК", только если все контейнеры работают, и "ОШИБКА", если хотя бы один из них был обнаружен как "сломанный".

Затем вы можете настроить зонд живучести кубернетов, чтобы он останавливал модуль при ошибке, возвращаемой из этого четвертого контейнера.

Конечно, если этот 4-й процесс сам по себе выйдет из строя по какой-либо причине (ну, это не должно быть, если нет ошибки или чего-то еще), тогда зонд живучести не будет реагировать, и кубернетес должен все равно остановить модуль, что, вероятно, вы очень хочу добиться.

Другие вопросы по тегам