Развертывание приложений в Azure Red Hat OpenShift с помощью OpenShift Serverless
В этой статье вы развернете приложение в кластере Azure Red Hat OpenShift с помощью OpenShift Serverless. OpenShift Serverless помогает разработчикам развертывать и запускать приложения, масштабируемые до нуля по требованию. Это устраняет потребление ресурсов, если они не используются.
Код приложения можно упаковить в контейнер вместе с соответствующими средами выполнения. Бессерверные функции запускают контейнеры приложений, когда они активируются событием. Вы можете активировать приложения с помощью различных событий: от собственных приложений, от нескольких поставщиков облачных служб, систем как службы и других служб.
Встроенные функции интерфейса OpenShift можно использовать для управления всеми аспектами развертывания бессерверных контейнеров. Разработчики могут визуально определить, какие события ведут к запуску контейнерных приложений. Существует также несколько способов изменения параметров события. Бессерверные приложения OpenShift можно интегрировать с другими службами OpenShift, такими как Конвейеры OpenShift, сетка служб и мониторинг. Это обеспечивает полный процесс разработки бессерверных приложений и развертывания.
Перед началом работы
Создание кластера
Следуйте инструкциям руководства Создание кластера Azure Red Hat OpenShift. Если вы решили установить и использовать интерфейс командной строки (CLI) локально, в этом руководстве необходимо использовать Azure CLI версии 2.6.0 или более поздней версии. Чтобы узнать, какая версия используется сейчас, выполните команду az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.
Подключение к кластеру
Для управления кластером Azure Red Hat OpenShift необходимо использовать oc, клиент командной строки OpenShift.
Примечание.
Мы рекомендуем установить командную строку OpenShift в Azure Cloud Shell и использовать ее для всех операций командной строки в этой статье. Откройте оболочку из shell.azure.com или выберите ссылку:
Следуйте инструкциям по установке интерфейса командной строки, чтобы получить учетные данные кластера и подключиться к кластеру с веб-консолью и Интерфейсом командной строки OpenShift.
После входа в систему появится сообщение о том, что вы используете проект default
.
Login successful.
You have access to 61 projects, the list has been suppressed. You can list all projects with 'oc projects'
Using project "default".
Установка интерфейса командной строки Knative (kn)
Скачайте последнюю версию интерфейса командной строки (CLI), соответствующую вашему компьютеру, изhttps://github.com/knative/client/releases/
Если вы выполняете команды в Azure Cloud Shell, скачайте последнюю версию knative CLI для Linux.
cd ~
wget https://github.com/knative/client/releases/download/v0.22.0/kn-linux-amd64
mkdir knative
chmod +x kn-linux-amd64
mv kn-linux-amd64 knative/kn
echo 'export PATH=$PATH:~/knative' >> ~/.bashrc && source ~/.bashrc
Открытие веб-консоли OpenShift
Найдите URL-адрес веб-консоли кластера, выполнив следующий скрипт:
az aro show \
--name <cluster name> \
--resource-group <resource group> \
--query "consoleProfile.url" -o tsv
Вы должны получить URL-адрес, аналогичный приведенному ниже.
https://console-openshift-console.apps.wzy5hg7x.eastus.aroapp.io/
Откройте веб-браузер и откройте URL-адрес консоли. Войдите с помощью kubeadmin
учетных данных.
Установка оператора OpenShift Serverless
При входе в веб-консоль OpenShift убедитесь, что вы находитесь в представлении администратора . Откройте Концентратор операторов и выберите оператор OpenShift Serverless.
Затем откройте страницу установки оператора, нажав кнопку "Установить".
Выберите соответствующий канал обновления для версии кластера Azure Red Hat OpenShift и установите оператор в openshift-serverless
пространстве имен. Прокрутите вниз и выберите " Установить".
В течение нескольких минут страница состояния отражает, что оператор установлен и готов к использованию. Нажмите кнопку "Оператор представления", чтобы продолжить.
Установка Knative Serving
Возможность запуска контейнера в бессерверном режиме в OpenShift Serverless возможна с помощью вышестоящего Knative. Knative расширяет Kubernetes для предоставления набора компонентов, которые развертывают, запускают и управляют современными приложениями с помощью своей бессерверной методологии.
Создание экземпляра Knative Serving
В левом верхнем углу окна в списке проектов выберите knative-server
. Затем в области предоставленных API выберите "Создать экземпляр" в карточке "Кнативная служба".
На странице "Создание knative Serving" сохраните все значения по умолчанию. Прокрутите вниз и нажмите кнопку "Создать ".
OpenShift Serverless устанавливается, когда столбец "Состояние " отображается "Готово". Теперь вы готовы создать проект OpenShift Serverless.
Создание бессерверного проекта
Чтобы создать новый проект demoserverless
, выполните следующую команду:
oc new-project demoserverless
Результат выполнения должен быть аналогичен следующему:
Now using project "demoserverless" on server "https://api.wzy5hg7x.eastus.aroapp.io:6443".
You can add applications to this project with the 'new-app' command. For example, build a new example application in Python with the following:
oc new-app django-psql-example
Or use kubectl to deploy a simple Kubernetes application:
kubectl create deployment hello-node --image=gcr.io/hello-minikube-zero-install/hello-node
Давайте переключимся с представления администратора на представление разработчика. Перейдите в список проектов в меню слева и выберите demoserverless
. Теперь вы находитесь на странице топологии проекта.
Развертывание с помощью веб-консоли
На странице топологии выберите "Из Git". На странице импорта из Git используйте https://github.com/sclorg/django-ex.git
в качестве URL-адреса репозитория Git. Пример веб-приложения реализован с помощью языка программирования Python.
Примечание.
OpenShift определяет, что это проект Python, и выбирает соответствующий образ для инструмента сборки.
Прокрутите страницу до ресурсов и убедитесь, что служба Knative выбрана в качестве типа ресурса для создания. Это создаст службу Knative, тип развертывания, который позволяет openShift Serverless масштабировать до нуля при простое.
В нижней части страницы выберите Создать. Это создает ресурсы для управления сборкой и развертыванием приложения. Затем будет выполнено перенаправление к обзору топологии проекта.
Обзор топологии обеспечивает визуальное представление развернутого приложения. Вы можете увидеть общую структуру приложения.
Дождитесь завершения сборки. Это может занять несколько минут. По завершении сборки в левом нижнем углу службы появится зеленая галочка.
Просмотр масштаба приложения
В верхней части представления топологии в списке параметров отображения выберите "Число модулей pod". Дождитесь, пока число pod не будет уменьшено до нуля. Такое вертикальное уменьшение масштаба может занять несколько минут.
В правом верхнем углу панели "Служба Knative" выберите значок "Открыть URL-адрес ". Приложение откроется на новой вкладке браузера. Закройте вкладку и вернитесь в представление топологии. Там вы увидите, что приложение масштабируется до одного pod, чтобы разместить запрос. Через несколько минут приложение масштабируется до 0 pod.
Принудительная установка новой редакции и настройка распределения трафика
Службы Knative разрешают сопоставление трафика, что означает, что изменения службы можно сопоставить с выделенной частью трафика. При каждом обновлении конфигурации службы создается новая редакция. Затем маршрут службы указывает весь трафик на последнюю готовую редакцию по умолчанию. Это поведение можно изменить, определив, какая редакция получает части трафика. Сопоставление трафика также предоставляет возможность создания уникальных URL-адресов для отдельных редакций.
В созданной топологии выберите редакцию, отображаемую внутри службы, чтобы просмотреть ее сведения. Эмблемы под кольцом pod и в верхней части панели сведений должны быть в состоянии (REV)
. На боковой панели на вкладке "Ресурсы" прокрутите вниз и выберите конфигурацию, связанную со службой.
Принудительное обновление конфигурации путем переключения на вкладку YAML и прокрутки вниз, чтобы изменить значение timeoutSeconds
. Измените его на 301
. Выберите Сохранить. В реальном сценарии обновления конфигурации также можно активировать путем обновления тега образа контейнера.
Вернитесь в представление топологии, вы увидите, что развернута новая редакция . Выберите службу, заканчивающуюся значком (KSVC)
, и нажмите кнопку "Задать распределение трафика". Теперь вы сможете разделить трафик между редакциями в службе.
Теперь в представлении топологии показано, как распределяется трафик между редакциями.
Использование интерфейса командной строки Knative (kn)
На предыдущих шагах вы использовали веб-консоль OpenShift для создания и развертывания приложения в OpenShift Serverless. Так как OpenShift Serverless работает под knative, вы также можете использовать интерфейс командной строки Knative (kn) для создания служб Knative.
Примечание.
Если вы еще не установили интерфейс командной строки kn
, обязательно выполните действия, описанные в разделе предварительных требований этой статьи. Кроме того, убедитесь, что вы вошли в систему с помощью интерфейса oc
командной строки OpenShift.
Мы будем использовать образ контейнера, который уже создан в quay.io/rhdevelopers/knative-tutorial-greeter
.
Развертывание службы
Чтобы развернуть службы, выполните следующую команду.
kn service create greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:quarkus \
--namespace demoserverless \
--revision-name greeter-v1
Вы увидите выходные данные, аналогичные приведенным ниже.
Creating service 'greeter' in namespace 'demoserverless':
0.044s The Route is still working to reflect the latest desired specification.
0.083s ...
0.114s Configuration "greeter" is waiting for a Revision to become ready.
10.420s ...
10.489s Ingress has not yet been reconciled.
10.582s Waiting for load balancer to be ready
10.763s Ready to serve.
Service 'greeter' created to latest revision 'greeter-v1' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Вы можете получить список маршрутов в проекте, выполнив следующую команду.
kn route list
Вы получите список маршрутов в пространстве имен. Откройте URL-адрес в веб-браузере, чтобы просмотреть развернутую службу.
NAME URL READY
greeter http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io True
Развертывание новой версии службы
Разверните новую версию приложения, выполнив следующую команду и передав :latest
тег образа и переменную MESSAGE_PREFIX
среды:
kn service update greeter \
--image quay.io/rhdevelopers/knative-tutorial-greeter:latest \
--namespace demoserverless \
--env MESSAGE_PREFIX=GreeterV2 \
--revision-name greeter-v2
Вы получите подтверждение того, что была развернута новая редакция, greeter-v2
.
Updating Service 'greeter' in namespace 'demoserverless':
5.029s Traffic is not yet migrated to the latest revision.
5.086s Ingress has not yet been reconciled.
5.190s Waiting for load balancer to be ready
5.332s Ready to serve.
Service 'greeter' updated to latest revision 'greeter-v2' is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Чтобы просмотреть список всех редакций и их распределения трафика, выполните следующую команду:
kn revision list
Вы получите список, аналогичный приведенным ниже выходным данным. Обратите внимание, что в этом экземпляре новая редакция получает 100 % трафика.
NAME SERVICE TRAFFIC TAGS GENERATION AGE CONDITIONS READY REASON
greeter-v2 greeter 100% 2 90s 3 OK / 4 True
greeter-v1 greeter 1 5m32s 3 OK / 4 True
Развертывания blue-green и canary
При развертывании новой редакции по умолчанию назначается 100 % трафика. Предположим, что необходимо реализовать стратегию развертывания blue-green, где можно быстро выполнить откат до более старой версии приложения. Knative упрощает это.
Вы можете обновить службу, чтобы создать три тега трафика, присвоив им 100 % трафика.
- current: указывает на текущую развернутую версию.
- prev: указывает на предыдущую версию
- последняя: всегда указывает на последнюю версию
kn service update greeter \
--tag greeter-v2=current \
--tag greeter-v1=prev \
--tag @latest=latest
Вы получите подтверждение, аналогичное приведенному ниже.
Updating Service 'greeter' in namespace 'demoserverless':
0.037s Ingress has not yet been reconciled.
0.121s Waiting for load balancer to be ready
0.287s Ready to serve.
Service 'greeter' with latest revision 'greeter-v2' (unchanged) is available at URL:
http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Вывод списка маршрутов с помощью следующей команды:
kn route describe greeter
Вы получите выходные данные, показывающие URL-адреса для каждого из тегов, а также их распределение трафика.
Name: greeter
Namespace: demoserverless
Age: 10m
URL: http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service: greeter
Traffic Targets:
100% @latest (greeter-v2) #latest
URL: http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
0% greeter-v1 #prev
URL: http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
0% greeter-v2 #current
URL: http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
[..]
Предположим, что вы хотите быстро выполнить откат к предыдущей версии, вы можете обновить распределение трафика, чтобы отправить 100 % трафика в предыдущий тег:
kn service update greeter --traffic current=0 --traffic prev=100
Вывод списка маршрутов и повторная проверка с помощью следующей команды:
kn route describe greeter
Вы увидите выходные данные, показывающие, что 100% распределения трафика будет переходить к предыдущей версии.
Name: greeter
Namespace: demoserverless
Age: 19m
URL: http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
Service: greeter
Traffic Targets:
0% @latest (greeter-v2) #latest
URL: http://latest-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
100% greeter-v1 #prev
URL: http://prev-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
0% greeter-v2 #current
URL: http://current-greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
[..]
Играйте вокруг с распределением трафика при обновлении основного маршрута в браузере (http://greeter-demoserverless.apps.wzy5hg7x.eastus.aroapp.io
в этом случае).
Очистка ресурсов
После завершения работы с приложением можно выполнить следующую команду, чтобы удалить проект:
oc delete project demoserverless
Также можно удалить кластер, следуя инструкциям в документе Руководство: удаление кластера Azure Red Hat OpenShift 4.
Следующие шаги
В этом руководстве вы ознакомились с такой информацией:
- Установка оператора OpenShift Serverless и Knative Serving.
- Развертывание бессерверного проекта с помощью веб-консоли.
- Развертывание бессерверного проекта с помощью Knative CLI (kn).
- Настройка развертываний blue-green и развертываний canary с помощью Knative CLI (kn).
Узнайте больше о том, как создавать и развертывать бессерверные, управляемые событиями приложения в Azure Red Hat OpenShift с использованием OpenShift Serverless. Обратитесь к документации по началу работы с OpenShift Serverless, а также к документации по созданию бессерверных приложений и управлению ими.