Поделиться через


Развертывание приложений в 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 или выберите ссылку:

Кнопка запуска Azure Cloud Shell

Следуйте инструкциям по установке интерфейса командной строки, чтобы получить учетные данные кластера и подключиться к кластеру с веб-консолью и Интерфейсом командной строки 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 учетных данных.

Снимок экрана: экран входа Azure Red Hat OpenShift

Установка оператора OpenShift Serverless

При входе в веб-консоль OpenShift убедитесь, что вы находитесь в представлении администратора . Откройте Концентратор операторов и выберите оператор OpenShift Serverless.

Снимок экрана, на котором показана позиция оператора OpenShift Serverless.

Затем откройте страницу установки оператора, нажав кнопку "Установить".

Снимок экрана, на котором показано, как выбрать

Выберите соответствующий канал обновления для версии кластера Azure Red Hat OpenShift и установите оператор в openshift-serverless пространстве имен. Прокрутите вниз и выберите " Установить".

Снимок экрана: страница установки оператора.

В течение нескольких минут страница состояния отражает, что оператор установлен и готов к использованию. Нажмите кнопку "Оператор представления", чтобы продолжить.

Снимок экрана, на котором показана страница состояния с установленным оператором и готовым к использованию.

Установка Knative Serving

Возможность запуска контейнера в бессерверном режиме в OpenShift Serverless возможна с помощью вышестоящего Knative. Knative расширяет Kubernetes для предоставления набора компонентов, которые развертывают, запускают и управляют современными приложениями с помощью своей бессерверной методологии.

Создание экземпляра Knative Serving

В левом верхнем углу окна в списке проектов выберите knative-server. Затем в области предоставленных API выберите "Создать экземпляр" в карточке "Кнативная служба".

Снимок экрана, на котором показано, где выбрать для создания экземпляра Knative Service.

На странице "Создание knative Serving" сохраните все значения по умолчанию. Прокрутите вниз и нажмите кнопку "Создать ".

Снимок экрана, на котором показаны значения по умолчанию, перечисленные в форме.

OpenShift Serverless устанавливается, когда столбец "Состояние " отображается "Готово". Теперь вы готовы создать проект OpenShift Serverless.

Снимок экрана, на котором показано, что knative Serving готов.

Создание бессерверного проекта

Чтобы создать новый проект 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. Теперь вы находитесь на странице топологии проекта.

Снимок экрана: топология проекта Azure Red Hat OpenShift.

Развертывание с помощью веб-консоли

На странице топологии выберите "Из Git". На странице импорта из Git используйте https://github.com/sclorg/django-ex.git в качестве URL-адреса репозитория Git. Пример веб-приложения реализован с помощью языка программирования Python.

Снимок экрана: проект Azure Red Hat OpenShift из Git.

Примечание.

OpenShift определяет, что это проект Python, и выбирает соответствующий образ для инструмента сборки.

Прокрутите страницу до ресурсов и убедитесь, что служба Knative выбрана в качестве типа ресурса для создания. Это создаст службу Knative, тип развертывания, который позволяет openShift Serverless масштабировать до нуля при простое.

Снимок экрана, на котором показано, как выбрать службу Knative.

В нижней части страницы выберите Создать. Это создает ресурсы для управления сборкой и развертыванием приложения. Затем будет выполнено перенаправление к обзору топологии проекта.

Обзор топологии обеспечивает визуальное представление развернутого приложения. Вы можете увидеть общую структуру приложения.

Дождитесь завершения сборки. Это может занять несколько минут. По завершении сборки в левом нижнем углу службы появится зеленая галочка.

Снимок экрана: флажок, указывающий, что сборка завершена.

Просмотр масштаба приложения

В верхней части представления топологии в списке параметров отображения выберите "Число модулей pod". Дождитесь, пока число pod не будет уменьшено до нуля. Такое вертикальное уменьшение масштаба может занять несколько минут.

Снимок экрана, на котором показан счетчик pod при масштабировании до нуля.

В правом верхнем углу панели "Служба Knative" выберите значок "Открыть URL-адрес ". Приложение откроется на новой вкладке браузера. Закройте вкладку и вернитесь в представление топологии. Там вы увидите, что приложение масштабируется до одного pod, чтобы разместить запрос. Через несколько минут приложение масштабируется до 0 pod.

Снимок экрана: приложение, масштабируемое до Pod.

Принудительная установка новой редакции и настройка распределения трафика

Службы Knative разрешают сопоставление трафика, что означает, что изменения службы можно сопоставить с выделенной частью трафика. При каждом обновлении конфигурации службы создается новая редакция. Затем маршрут службы указывает весь трафик на последнюю готовую редакцию по умолчанию. Это поведение можно изменить, определив, какая редакция получает части трафика. Сопоставление трафика также предоставляет возможность создания уникальных URL-адресов для отдельных редакций.

В созданной топологии выберите редакцию, отображаемую внутри службы, чтобы просмотреть ее сведения. Эмблемы под кольцом pod и в верхней части панели сведений должны быть в состоянии (REV). На боковой панели на вкладке "Ресурсы" прокрутите вниз и выберите конфигурацию, связанную со службой.

Снимок экрана: кольцо Pod.

Принудительное обновление конфигурации путем переключения на вкладку 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, а также к документации по созданию бессерверных приложений и управлению ими.