Да, это возможно. На основании описания это звучит так, как будто вы используете одно развертывание, которое обновляется. Новые модули создаются, а старые удаляются до того, как новые будут готовы.
Чтобы решить эту проблему, вам необходимо настроить правильный readinessProbe или readinessGates на модулях так, чтобы статус модуля становился готовым только тогда, когда он фактически готов Если вы не уверены, что указать в качестве зонда, вы также можете определить initialDelaySeconds
с помощью предположения, сколько времени, по вашему мнению, нужно для запуска модуля.
Вам также следует изучить использование развертывания. c поле для minReadySeconds
, а также определение правильной стратегии развертывания . Вы можете убедиться, что обновляемое обновление создает новые модули (определив поле maxSurge) и убедиться, что старый модуль не удаляется до тех пор, пока новый модуль не будет готов и не получит трафик c (используя поле maxUnavailable = 0).
Примером может быть:
spec:
replicas: 3
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
Это позволит поддерживать 3 рабочие реплики в любой момент времени. Когда новая версия нажата, 1 новый модуль будет создан с новым изображением. Ни один модуль не будет переведен в автономный режим, пока новый не будет в состоянии готовности. Как только это произойдет, один из старых модулей будет завершен, и цикл возобновится. Не стесняйтесь изменить значение maxSurge
на большее, если вы хотите, чтобы развертывание произошло за один go.