Контейнеры Kubernetes спроектированы как эфемерные и обычно выполняют определенный процесс, который в итоге завершается.
Однако вы можете захотеть оставить контейнер работающим, чтобы просмотреть его состояние и журналы при устранении неполадок.
Агенты мониторинга и веб-серверы также предназначены для непрерывной работы в качестве фоновых служб.
Позвольте мне показать вам различные способы поддержания работы контейнера в Kubernetes.
Метод 1: Запуск фонового процесса
Это один из самых распространенных и простых способов поддержания контейнера Kubernetes в рабочем состоянии.
Он заключается в запуске процесса в фоновом режиме, который не завершается.
Вот пример развертывания Kubernetes, в котором используется фоновый процесс для поддержания контейнера в рабочем состоянии:
Хотя sleep inifinity является легковесным и не потребляет много ресурсов, но в сложной среде считается лучшей практикой контролировать отладочные контейнеры, чтобы убедиться, что они не влияют на общую производительность.
Метод 3: Использование супервизора процессов для поддержания работы контейнера Kubernetes
Супервизор процессов – это легкая программа, которая запускается внутри контейнера и контролирует основной процесс приложения.
Он используется для мониторинга состояния этого процесса и принятия корректирующих действий, таких как перезапуск процесса и обеспечение того, чтобы контейнер продолжал работать, даже если основной процесс падает или перестает реагировать.
Kubernetes сама по себе имеет встроенные механизмы для перезапуска контейнеров в случае их сбоя.
Однако если в контейнере запущено несколько процессов, Kubernetes может не знать о сбоях отдельных процессов.
Супервизор процессов следит за каждым процессом отдельно и перезапускает их по мере необходимости.
Кроме того, в некоторых случаях процессы могут превратиться в зомби, когда они завершаются, но не очищаются должным образом.
Супервизоры процессов могут предотвратить это, обеспечив правильное управление дочерними процессами.
Чтобы использовать такой супервизор процессов, как Tini, необходимо добавить его в образ контейнера в процессе сборки образа и запустить в контейнере (PID 1).