Балансировщик нагрузки отправит трафик c в любой модуль, который считается работоспособным (проходит проверку готовности). Этим распределением занимается служба k8s. При вашем текущем плане развертывания новый модуль с новой версией будет создан до того, как любой из старых модулей будет удален. Ни один старый модуль не удаляется, пока не будет готов новый (пройдёт readinessProbe). Если запросы отправляются в ваше приложение во время этого окна, велика вероятность, что трафик c перейдет в ваше старое приложение.
Если у вас несколько модулей, этот процесс займет больше времени, поскольку развертываются новые модули 1 в то время как старые удаляются с той же скоростью. Пока есть один модуль, работающий со старой версией в состоянии готовности, существует вероятность, что трафик c будет направлен на этот модуль.
Единственный реальный способ гарантировать, что весь трафик c идет в ваше новое приложение будет немедленно выполнить полное развертывание (если есть 3 модуля, установите для maxUnavailable значение 3). Это вызовет непродолжительное время простоя (которое длится столько, сколько требуется для подготовки ваших модулей), но гарантирует, что трафик c не перейдет в вашу старую версию.
В качестве альтернативы вы можете сделать синий / зеленое развертывание, создав второе развертывание с новой версией с другой меткой (например, version=1.1
). Когда все модули будут готовы, обновите определение службы, чтобы оно указывало на новую метку. Весь трафик c будет немедленно переключен без простоев.