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

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

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

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

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


person Karl Richter    schedule 10.02.2020    source источник


Ответы (1)


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

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

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

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

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

person Mark Bramnik    schedule 10.02.2020
comment
Интересная идея, которая поставила меня на верный путь, спасибо. Функция объединения зондов живучести (которая позволит избежать лишнего модуля) обсуждается на github.com/kubernetes. / kubernetes / issues / 37218. - person Karl Richter; 11.02.2020
comment
Хорошее обсуждение. Спасибо за ссылку, Карл. Я не знал об этом ... - person Mark Bramnik; 11.02.2020