Назад | Перейти на главную страницу

Выборочно обновлять образ развертывания с Kubernetes всего на нескольких узлах

У меня есть рабочий кластер с одним мастером Kubernetes с 14 рабочими узлами.

На 4 из этих узлов размещено веб-приложение, а на 10 - серверное приложение.

Из-за того, как продумана наша архитектура, мне иногда нужно было обновить только несколько узлов с использованием последнего образа, а остальные узлы оставить в старом образе развертывания еще на несколько часов. (это связано с тем, что с некоторыми обновлениями более новое веб-приложение не может взаимодействовать со старым серверным приложением, поэтому мне нужно разделить инфраструктуру, чтобы поддерживать некоторые узлы в старой версии, обновляя другие). Я потратил много часов на поиск варианта в документации, но, похоже, нет простого способа сделать это с помощью Kubernetes.

Для обновления приложений я сейчас использую скользящие обновления, настроенные в файлах yaml:

replicas: 3  
strategy:
  type: RollingUpdate
  rollingUpdate:
    maxSurge: 1
    maxUnavailable: 0

Чтобы применить обновления, я в основном запускаю две команды:

kubectl apply -f webapp.yaml
kubectl apply -f backendapp.yaml

Все это работает хорошо, но становится настоящей проблемой для сценария, который я описал выше. У кого-нибудь есть предложение, путь, по которому я мог бы пойти?

Спасибо

Если вы хотите, чтобы как старая, так и новая версии приложения обслуживали клиентов и общались с БД, а также плавно переводили трафик на новую версию, вы можете добиться этого с помощью Istio и Виртуальные услуги.

Это позволяет использовать взвешенные Назначение маршрута HTTP направлять трафик на подмножества контейнеров.

Более подробную информацию об управлении трафиком Istio можно найти в статье Вот.

Возможно, вы уже видели это, но вот довольно хорошая статья, в которой обсуждаются различные подходы к развертыванию обновлений в K8s: ссылка на сайт