Вступление
При внедрении новых версий службы часто желательно сместить контролируемый процент пользовательского трафика на более новую версию службы в процессе поэтапного отказа от более старой версии. Эта техника называется _ канарейка развертывания _.
Операторы кластера Kubernetes могут организовать canary развертывания изначально используя https://kubernetes.io/docs/concepts/overview/working -with-objects / ярлыки / [ярлыки] и Deployments. Однако этот метод имеет определенные ограничения: распределение трафика и количество реплик связаны, что на практике означает, что коэффициенты реплики должны контролироваться вручную, чтобы ограничить трафик к выпуску канареек. Другими словами, чтобы направить 10% трафика на канареечное развертывание, вам понадобится пул из десяти пакетов, один из которых будет получать 10% пользовательского трафика, а остальные девять - остальные.
Развертывание с помощью сервисной сетки Istio может решить эту проблему, обеспечив четкое разделение между количеством реплик и управлением трафиком. Сетка Istio позволяет детализировать управление трафиком, что отделяет распределение трафика и управление им от масштабирования реплик. Вместо того, чтобы вручную управлять коэффициентами реплики, вы можете определить процент трафика и цели, а остальное будет управлять Istio.
В этом руководстве вы создадите канареечное развертывание, используя Istio и Kubernetes. Вы развернете две версии демонстрационного приложения Node.js и будете использовать Virtual Service. и Destination Rule ресурсы для настройки маршрутизации трафика как в более новые, так и в более старые версии. Это будет хорошей отправной точкой для построения будущих канареек с Istio.
Предпосылки
-
Кластер Kubernetes 1.10+ с включенным управлением доступом на основе ролей (RBAC). Эта установка будет использовать DigitalOcean Kubernetes cluster с тремя узлами, но вы можете свободно пользоваться https://www.digitalocean.com/community/tutorials/how-to -create-a-kubernetes-1-11-cluster-using-kubeadm-on-ubuntu-18-04 [создать кластер другим методом].
-
Инструмент командной строки
+ kubectl +
установлен на сервере разработки и настроен для подключения к вашему кластеру. Вы можете прочитать больше об установке+ kubectl +
в official документация. -
Docker установлен на вашем сервере разработки. Если вы работаете с Ubuntu 18.04, выполните шаги 1 и 2 How To Установите и используйте Docker в Ubuntu 18.04; в противном случае, следуйте official документациям для получения информации об установке в других операционных системах. Обязательно добавьте своего пользователя без полномочий root в группу
+ docker +
, как описано в шаге 2 связанного руководства. -
Https://hub.docker.com/[Docker Hub] аккаунт. Чтобы узнать, как это настроить, обратитесь к this вводная информация в Docker Hub.
-
Istio установлен и настроен в соответствии с инструкциями в How для установки и использования Istio с Kubernetes. Также необходимо включить и настроить надстройку телеметрии Grafana для внешнего доступа.
Шаг 1 - Упаковка приложения
В обязательном учебном пособии How для установки и использования Istio с Kubernetes вы https: // www.digitalocean.com/community/tutorials/how-to-install-and-use-istio#step-1-%E2%80%94-packaging-the-application[created + node-demo +
Docker image] запустить информационное приложение об акулах и перенести этот образ в Docker Hub. На этом шаге вы создадите другой образ: более новую версию приложения, которую вы будете использовать для своего канареечного развертывания.
Наше оригинальное демо-приложение выделило несколько приятных фактов об акулах на странице * Shark Info *:
изображение: https: //assets.digitalocean.com/articles/docker_node_image/sharks.png [Страница информации об акулах]
Но мы решили в нашей новой канарской версии подчеркнуть некоторые более страшные факты:
изображение: https: //assets.digitalocean.com/articles/istio_canary/scary_sharks.png [Страница информации об ужасных акулах]
Нашим первым шагом будет клонирование кода для этой второй версии нашего приложения в каталог с именем ++
. Используя следующую команду, клонируйте nodejs-canary-app репозиторий из https://github.com/do-community[DigitalOcean Community. Аккаунт GitHub. Этот репозиторий содержит код для второй, более пугающей версии нашего приложения:
git clone https://github.com/do-community/nodejs-canary-app.git
Перейдите в каталог ++
:
cd
В этом каталоге содержатся файлы и папки для более новой версии нашего информационного приложения об акулах, которое предлагает пользователям информацию об акулах, как и оригинальное приложение, но с акцентом на более резкие факты. В дополнение к файлам приложения в каталоге содержится Dockerfile с инструкциями для создания образа Docker с помощью кода приложения. Для получения дополнительной информации об инструкциях в файле Docker см. Https://www.digitalocean.com/community/tutorials/how-to-build-a-node-js-application-with-docker#step-3-%E2%. 80% 94-writing-the-dockerfile [Шаг 3 из Как создать приложение Node.js с Docker].
Чтобы проверить, что код приложения и Dockerfile работают должным образом, вы можете создать и пометить образ с помощью команды +docker build + `
, а затем используйте изображение для запуска демонстрационного контейнера. Использование флага `+ -t +