Как сделать канарейку с Истио и Кубернетесом

Вступление

При внедрении новых версий службы часто желательно сместить контролируемый процент пользовательского трафика на более новую версию службы в процессе поэтапного отказа от более старой версии. Эта техника называется _ канарейка развертывания _.

Операторы кластера 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 +

Related