#kubernetes
#kubernetes
Вопрос:
Допустим, я определил модуль, который просто запускает несколько фрагментов кода и завершает работу после этого. Мне нужно убедиться, что этот модуль завершает работу, прежде чем разрешить запуск других модулей. Каков наилучший способ реализовать это?
Раньше я проверял, готов ли модуль, выполняя сетевые запросы, например, после готовности некоторые модули webapps будут блокировать и прослушивать заранее определенные порты, следовательно, я могу заставить ожидающие модули выполнять запросы netcat к ним. Но в данном конкретном случае модулю не нужно открывать какой-либо порт, следовательно, этот подход не работает. Кто-нибудь может предложить альтернативу?
Спасибо
Ответ №1:
Если «фрагменты кода» необходимо запускать при каждом запуске / перезапуске модуля, возможно, вы ищете реализацию контейнера инициализации:
Контейнеры инициализации — это специализированные контейнеры, которые запускаются перед контейнерами приложений и могут содержать утилиты или сценарии установки, отсутствующие в образе приложения.
Если ваш код зависит от нескольких модулей и его необходимо запускать один раз (например, при каждом новом развертывании), вы можете рассмотреть возможность использования контроллера заданий и реализовать логику проверки выполнения модуля перед развертыванием новых модулей / контейнеров. (Вы можете использовать такие команды, как kubectl wait --for=condition=complete job/myjob
в вашем сценарии развертывания).
Если вы используете helm для развертывания, лучшим вариантом будет использовать k8s job в сочетании с pre-install
и pre-upgrade
перехватчиками helm.
Комментарии:
1. В итоге я решил это с помощью заданий ожидание условия