Kubernetes проверяет, завершил ли выполнение «тихий» модуль

#kubernetes

#kubernetes

Вопрос:

Допустим, я определил модуль, который просто запускает несколько фрагментов кода и завершает работу после этого. Мне нужно убедиться, что этот модуль завершает работу, прежде чем разрешить запуск других модулей. Каков наилучший способ реализовать это?

Раньше я проверял, готов ли модуль, выполняя сетевые запросы, например, после готовности некоторые модули webapps будут блокировать и прослушивать заранее определенные порты, следовательно, я могу заставить ожидающие модули выполнять запросы netcat к ним. Но в данном конкретном случае модулю не нужно открывать какой-либо порт, следовательно, этот подход не работает. Кто-нибудь может предложить альтернативу?

Спасибо

Ответ №1:

Если «фрагменты кода» необходимо запускать при каждом запуске / перезапуске модуля, возможно, вы ищете реализацию контейнера инициализации:

Контейнеры инициализации — это специализированные контейнеры, которые запускаются перед контейнерами приложений и могут содержать утилиты или сценарии установки, отсутствующие в образе приложения.

Если ваш код зависит от нескольких модулей и его необходимо запускать один раз (например, при каждом новом развертывании), вы можете рассмотреть возможность использования контроллера заданий и реализовать логику проверки выполнения модуля перед развертыванием новых модулей / контейнеров. (Вы можете использовать такие команды, как kubectl wait --for=condition=complete job/myjob в вашем сценарии развертывания).

Если вы используете helm для развертывания, лучшим вариантом будет использовать k8s job в сочетании с pre-install и pre-upgrade перехватчиками helm.

Комментарии:

1. В итоге я решил это с помощью заданий ожидание условия