Альтернатива супервизору для докера

Supervisord — действительно отличный инструмент даже для среды докеров. Это очень помогает с перенаправлением stderr и переадресацией сигналов. Но у него есть пара недостатков:

  1. Он не поддерживает отложенный запуск. Может быть полезно отложить запуск некоторых агентов до инициализации основного приложения. Приоритет не решает эту проблему.
  2. Если какое-то приложение входит в состояние FATAL, supervisord просто регистрирует его, но продолжает работать. Так что вы не можете этого увидеть, пока не посмотрите журналы контейнера. Было бы намного удобнее, если бы supervisord просто останавливался, потому что в этом случае вы видите проблему с docker ps -a

Итак, какова лучшая альтернатива супервизору?


person 4ybaka    schedule 22.11.2015    source источник


Ответы (2)


В ответ на проблему «пожинания зомби PID1» я рекомендовал ранее (в «Использование супервизора в докере") использовать runit вместо supervisord

Runit использует меньше памяти, чем Supervisord, поскольку Runit написан на C, а Supervisord — на Python.
И в некоторых случаях перезапуск процессов в контейнере предпочтительнее, чем перезапуск всего контейнера.

Подробнее см. на изображении phusion/baseimage-docker.


Как отметил Торстен Бронгер в комментарии:

Runit предназначен не для решения проблемы сбора урожая.
Скорее, он предназначен для поддержки нескольких процессов. В целях безопасности рекомендуется использовать несколько процессов (через изоляцию процессов и пользователей).

С 2015 года теперь вы можете указать процесс инициализации, который должен используется как PID 1 в контейнере с docker run --init

Используемый по умолчанию процесс init — это первый исполняемый файл docker-init, найденный в системном пути процесса демона Docker.
Этот двоичный файл docker-init, включенный в установку по умолчанию, поддерживается tini.

person VonC    schedule 22.11.2015
comment
На самом деле ссылка объясняет, почему runit также не решает проблему «пожинания зомби PID1». - person Torsten Bronger; 21.05.2018
comment
@TorstenBronger Согласен. Сейчас у нас есть docker run --init и тини. Я отредактировал ответ, чтобы обновить его. - person VonC; 21.05.2018

Любой новый посетитель:

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

Без какого-либо хака все остальные инструменты будут работать отлично, это также улучшит Observability.

Не относитесь к контейнерам как к виртуальным машинам.

person WSMathias9    schedule 01.06.2020
comment
Это не ответ на вопрос. - person Eric; 25.06.2021