GKE traffic c управление - PullRequest
1 голос
/ 18 июня 2020

У меня следующая проблема. У нас есть веб-сайт, развернутый на GKE с 10 модулями, а при новых развертываниях мы используем MAXsurge=1 MAXunavailable=0.

Иногда, когда я пытаюсь загрузить веб-сайт во время развертывания новой версии, я вижу в браузере только заголовок, и у меня возникли ошибки при загрузке блоков stati c ... Я предполагаю, что балансировщик нагрузки отправляет меня в старый модуль или пытается загрузить старые кешированные файлы stati c .... есть способ настроить GKE для отправки трафика c в новые модули, только когда все они доступны или что-то в этом роде ... У меня есть последний шаг в облачной сборке, чтобы очистить кеш CF через 2 минуты после развертывания, но это не на 100% помогает .....

Я считаю, что его можно настроить для отправки трафика c только на модули новой версии или что-то в этом роде, но я новичок в GKE и не уверен

Или, может быть, у нас что-то не так с отметками времени для css или управления кешем браузера ..... он ищет файлы, которых нет ... ошибки браузера

1 Ответ

2 голосов
/ 18 июня 2020

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

Если у вас несколько модулей, этот процесс займет больше времени, поскольку развертываются новые модули 1 в то время как старые удаляются с той же скоростью. Пока есть один модуль, работающий со старой версией в состоянии готовности, существует вероятность, что трафик c будет направлен на этот модуль.

Единственный реальный способ гарантировать, что весь трафик c идет в ваше новое приложение будет немедленно выполнить полное развертывание (если есть 3 модуля, установите для maxUnavailable значение 3). Это вызовет непродолжительное время простоя (которое длится столько, сколько требуется для подготовки ваших модулей), но гарантирует, что трафик c не перейдет в вашу старую версию.

В качестве альтернативы вы можете сделать синий / зеленое развертывание, создав второе развертывание с новой версией с другой меткой (например, version=1.1). Когда все модули будут готовы, обновите определение службы, чтобы оно указывало на новую метку. Весь трафик c будет немедленно переключен без простоев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...