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


Развертывание приложения, использующего OpenAI в Служба Azure Kubernetes (AKS)

Из этой статьи вы узнаете, как развернуть приложение, использующее Azure OpenAI или OpenAI в AKS. С помощью OpenAI можно легко адаптировать различные модели ИИ, такие как создание контента, сводка, семантический поиск и естественный язык для создания кода для конкретных задач. Начните с развертывания кластера AKS в подписке Azure. Затем вы развернете службу OpenAI и пример приложения.

Пример облачного собственного приложения является представителем реальных реализаций. Многоконтейнерное приложение состоит из приложений, написанных на нескольких языках и платформах, в том числе:

  • Голанг с Джин
  • Rust с Actix-Web
  • JavaScript с Vue.js и Fastify
  • Python с FastAPI

Эти приложения предоставляют интерфейсы для клиентов и администраторов магазина, REST API для отправки данных в очередь сообщений RabbitMQ и базу данных MongoDB, а также консольные приложения для имитации трафика.

Примечание.

Не рекомендуется запускать контейнеры с отслеживанием состояния, такие как MongoDB и Rabbit MQ, без постоянного хранения для рабочей среды. Мы используем их здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure CosmosDB или Служебная шина Azure.

Чтобы получить доступ к базе кода GitHub для примера приложения, ознакомьтесь с демонстрацией МАГАЗИНА AKS.

Подготовка к работе

  • Вам потребуется учетная запись Azure с активной подпиской. Если у вас нет учетной записи, создайте бесплатную учетную запись.
  • Для этой демонстрации можно использовать службу Azure OpenAI или службу OpenAI.
    • Если вы планируете использовать службу Azure OpenAI, необходимо запросить доступ к ней в подписке Azure с помощью формы запроса к форме Службы OpenAI Azure.
    • Если вы планируете использовать OpenAI, зарегистрируйтесь на веб-сайте OpenAI.

Необходимые компоненты

  • Используйте среду Bash в Azure Cloud Shell. Дополнительные сведения см . в кратком руководстве по Bash в Azure Cloud Shell.

  • Если вы предпочитаете выполнять справочные команды CLI локально, установите Azure CLI. Если вы работаете в Windows или macOS, Azure CLI можно запустить в контейнере Docker. Дополнительные сведения см. в статье Как запустить Azure CLI в контейнере Docker.

    • Если вы используете локальную установку, выполните вход в Azure CLI с помощью команды az login. Чтобы выполнить аутентификацию, следуйте инструкциям в окне терминала. Сведения о других возможностях, доступных при входе, см. в статье Вход с помощью Azure CLI.

    • Установите расширение Azure CLI при первом использовании, когда появится соответствующий запрос. Дополнительные сведения о расширениях см. в статье Использование расширений с Azure CLI.

    • Выполните команду az version, чтобы узнать установленную версию и зависимые библиотеки. Чтобы обновиться до последней версии, выполните команду az upgrade.

Создание или изменение группы ресурсов

Группа ресурсов Azure — это логическая группа , в которой развертываются ресурсы Azure и управляют ими. При создании группы ресурсов вам будет предложено указать расположение. Это расположение хранилища метаданных группы ресурсов и место, где ресурсы выполняются в Azure, если вы не указываете другой регион во время создания ресурса.

В следующем примере создается группа ресурсов с именем myResourceGroup в расположении eastus.

  • Создайте группу ресурсов с помощью az group create команды.

    az group create --name myResourceGroup --location eastus
    

    В следующем примере выходных данных показано успешное создание группы ресурсов:

    {
      "id": "/subscriptions/<guid>/resourceGroups/myResourceGroup",
      "location": "eastus",
      "managedBy": null,
      "name": "myResourceGroup",
      "properties": {
        "provisioningState": "Succeeded"
      },
      "tags": null,
      "type": "Microsoft.Resources/resourceGroups"
    }
    

Создание кластера AKS

В следующем примере создается кластер с именем myAKSCluster в myResourceGroup.

  • Создайте кластер AKS с помощью az aks create команды.

    az aks create --resource-group myResourceGroup --name myAKSCluster --generate-ssh-keys
    

    Через несколько минут выполнение команды завершается и отображаются сведения о кластере в формате JSON.

Подключение к кластеру

Для управления кластером Kubernetes используйте клиент командной строки Kubernetes kubectl. Если вы используете Azure Cloud Shell, kubectl уже установлен.

  1. Установите kubectl локально с помощью az aks install-cli команды.

    az aks install-cli
    

    Примечание.

    Если для системы под управлением Linux требуются повышенные разрешения, можно использовать sudo az aks install-cli команду.

  2. Настройте kubectl подключение к кластеру az aks get-credentials Kubernetes с помощью команды.

    Эта команда выполняет следующие операции:

    • скачивает учетные данные и настраивает интерфейс командной строки Kubernetes для их использования;
    • использует ~/.kube/config, расположение по умолчанию для файла конфигурации Kubernetes. Чтобы указать другое расположение файла конфигурации Kubernetes, используйте аргумент --file.
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. Проверьте подключение к кластеру kubectl get с помощью команды. Эта команда возвращает список узлов кластера.

    kubectl get nodes
    

    В следующем примере показан узел, созданный на предыдущих шагах. Убедитесь, что состояние узла готово.

    NAME                                STATUS   ROLES   AGE     VERSION
    aks-nodepool1-31469198-vmss000000   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000001   Ready    agent   3h29m   v1.25.6
    aks-nodepool1-31469198-vmss000002   Ready    agent   3h29m   v1.25.6
    

Примечание.

Для частных кластеров узлы могут быть недоступны, если вы пытаетесь подключиться к ним через общедоступный IP-адрес. Чтобы устранить эту проблему, необходимо создать конечную точку в той же виртуальной сети, что и кластер для подключения. Следуйте инструкциям по созданию частного кластера AKS, а затем подключитесь к нему.

Развертывание приложения

Схема архитектуры демонстрации AKS AI.

Манифест приложения Магазина AKS включает следующие развертывания и службы Kubernetes:

  • Служба продуктов: отображает сведения о продукте.
  • Служба заказов: помещает заказы.
  • Служба Makeline: обрабатывает заказы из очереди и завершает заказы.
  • Интерфейс магазина: веб-приложение для пользователей для просмотра продуктов и размещения заказов.
  • Администратор магазина: веб-приложение для сотрудников магазина для просмотра заказов в очереди и управления сведениями о продукте.
  • Виртуальный клиент: имитация создания заказа на основе запланированного.
  • Виртуальная рабочая роль: имитация завершения заказа на запланированном основе.
  • Mongo DB: экземпляр NoSQL для сохраненных данных.
  • Rabbit MQ: очередь сообщений для очереди заказов.

Примечание.

Не рекомендуется запускать контейнеры с отслеживанием состояния, такие как MongoDB и Rabbit MQ, без постоянного хранения для рабочей среды. Мы используем их здесь для простоты, но мы рекомендуем использовать управляемые службы, такие как Azure CosmosDB или Служебная шина Azure.

  1. Просмотрите манифест YAML для приложения.

  2. Разверните приложение с помощью kubectl apply команды и укажите имя манифеста YAML.

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/aks-store-demo/main/aks-store-all-in-one.yaml
    

    В следующем примере выходных данных показаны успешно созданные развертывания и службы:

    deployment.apps/mongodb created
    service/mongodb created
    deployment.apps/rabbitmq created
    service/rabbitmq created
    deployment.apps/order-service created
    service/order-service created
    deployment.apps/makeline-service created
    service/makeline-service created
    deployment.apps/product-service created
    service/product-service created
    deployment.apps/store-front created
    service/store-front created
    deployment.apps/store-admin created
    service/store-admin created
    deployment.apps/virtual-customer created
    deployment.apps/virtual-worker created
    

Развертывание OpenAI

Вы можете использовать Azure OpenAI или OpenAI и запустить приложение в AKS.

  1. Включите Azure OpenAI в подписке Azure, заполнив форму "Запрос доступа к службе Azure OpenAI".
  2. В портал Azure создайте экземпляр Azure OpenAI.
  3. Выберите созданный экземпляр Azure OpenAI.
  4. Выберите ключи и конечные точки для создания ключа.
  5. Выберите управляемые развертывания моделей>, чтобы открыть студию Azure OpenAI.
  6. Создайте новое развертывание с помощью модели gpt-35-turbo .

Дополнительные сведения о создании развертывания в Azure OpenAI см. в статье "Начало создания текста с помощью Службы Azure OpenAI".

Развертывание службы ИИ

Теперь, когда приложение развернуто, можно развернуть микрослужбу на основе Python, которая использует OpenAI для автоматического создания описания новых продуктов, добавляемых в каталог магазина.

  1. Создайте файл с именем ai-service.yaml и скопируйте его в следующем манифесте:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: ai-service
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: ai-service
      template:
        metadata:
          labels:
            app: ai-service
        spec:
          nodeSelector:
            "kubernetes.io/os": linux
          containers:
          - name: ai-service
            image: ghcr.io/azure-samples/aks-store-demo/ai-service:latest
            ports:
            - containerPort: 5001
            env:
            - name: USE_AZURE_OPENAI 
              value: "True"
            - name: AZURE_OPENAI_DEPLOYMENT_NAME 
              value: ""
            - name: AZURE_OPENAI_ENDPOINT 
              value: ""
            - name: OPENAI_API_KEY 
              value: ""
            resources:
              requests:
                cpu: 20m
                memory: 50Mi
              limits:
                cpu: 50m
                memory: 128Mi
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: ai-service
    spec:
      type: ClusterIP
      ports:
      - name: http
        port: 5001
        targetPort: 5001
      selector:
        app: ai-service
    
  2. Задайте для переменной USE_AZURE_OPENAI среды значение "True".

  3. Получите имя развертывания Azure OpenAI из Студии Azure OpenAI и заполните AZURE_OPENAI_DEPLOYMENT_NAME значение.

  4. Получите конечную точку Azure OpenAI и ключ API Azure OpenAI из портал Azure, выбрав ключи и конечную точку в левой колонке ресурса. AZURE_OPENAI_ENDPOINT Обновите и OPENAI_API_KEY в YAML соответствующим образом.

  5. Разверните приложение с помощью kubectl apply команды и укажите имя манифеста YAML.

    kubectl apply -f ai-service.yaml
    

    В следующем примере выходных данных показаны успешно созданные развертывания и службы:

      deployment.apps/ai-service created
      service/ai-service created
    

Примечание.

Непосредственное добавление конфиденциальной информации, например ключей API, в файлы манифеста Kubernetes не является безопасным и может случайно зафиксироваться в репозиториях кода. Мы добавили его здесь для простоты. Для рабочих нагрузок используйте управляемое удостоверение для проверки подлинности в службе Azure OpenAI, а также для хранения секретов в Azure Key Vault.

Тестирование приложения

  1. Проверьте состояние развернутых модулей pod с помощью команды kubectl get pods .

    kubectl get pods
    

    Перед продолжением следующего шага убедитесь, что все модули pod запущены.

    NAME                                READY   STATUS    RESTARTS   AGE
    makeline-service-7db94dc7d4-8g28l   1/1     Running   0          99s
    mongodb-78f6d95f8-nptbz             1/1     Running   0          99s
    order-service-55cbd784bb-6bmfb      1/1     Running   0          99s
    product-service-6bf4d65f74-7cbvk    1/1     Running   0          99s
    rabbitmq-9855984f9-94nlm            1/1     Running   0          99s
    store-admin-7f7d768c48-9hn8l        1/1     Running   0          99s
    store-front-6786c64d97-xq5s9        1/1     Running   0          99s
    virtual-customer-79498f8667-xzsb7   1/1     Running   0          99s
    virtual-worker-6d77fff4b5-7g7rj     1/1     Running   0          99s
    
  2. Получите IP-адрес веб-приложения администратора магазина и сохраните веб-приложение переднего плана с помощью kubectl get service команды.

    kubectl get service store-admin
    

    Приложение предоставляет сайт администратора Магазина интернету через общедоступную подсистему балансировки нагрузки, подготовленную службой Kubernetes. Процесс создания может занять несколько минут. ВНЕШНИЙ IP-адрес изначально отображается до тех пор, пока служба не появится и отображает IP-адрес.

    NAME          TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)        AGE
    store-admin   LoadBalancer   10.0.142.228   40.64.86.161    80:32494/TCP   50m    
    

    Повторите тот же шаг для службы с именем store-front.

  3. Откройте веб-браузер и перейдите к внешнему IP-адресу службы. В примере, приведенном здесь, откройте 40.64.86.161 , чтобы просмотреть администратор Магазина в браузере. Повторите тот же шаг для Front Store.

  4. В магазине администратор выберите вкладку "Продукты", а затем нажмите кнопку "Добавить продукты".

  5. После успешного запуска ai-service появится кнопка Ask OpenAI рядом с полем описания. Введите имя, цену и ключевые слова, а затем создайте описание продукта, нажав кнопку Ask OpenAI>Save product.

    Снимок экрана: использование openAI для создания описания продукта.

  6. Теперь вы можете увидеть новый продукт, созданный на сайте "Администратор Магазина", используемый продавцами. На рисунке вы увидите, что в джунглях обезьяна Жевать Той добавляется.

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

  7. Вы также можете увидеть новый продукт, созданный в Магазине Front, используемый покупателями. На рисунке вы увидите, что в джунглях обезьяна Жевать Той добавляется. Не забудьте получить IP-адрес переднего плана магазина с помощью kubectl get service команды.

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

Следующие шаги

Теперь, когда вы добавили функции OpenAI в приложение AKS, вы можете защитить доступ к Azure OpenAI из Служба Azure Kubernetes (AKS).

Дополнительные сведения о вариантах использования сгенерируемым ИИ см. в следующих ресурсах: