共用方式為


在 Azure Kubernetes Service (AKS) 上部署使用 OpenAI 的應用程式

在本文中,您將瞭解如何在 AKS 上部署使用 Azure OpenAI 或 OpenAI 的應用程式。 透過 OpenAI,您可以針對您的特定工作,輕鬆調整不同的 AI 模型,例如內容產生、摘要、語意搜尋和自然語言到代碼產生。 首先要在您的 Azure 訂用帳戶中部署 AKS 叢集。 接著部署 OpenAI 服務和範例應用程式。

範例雲端原生應用程式代表真實世界的實作。 多容器應用程式是由以多種語言和架構撰寫的應用程式所組成,包括:

  • 採用 Gin 的 Golang
  • 採用 Actix-Web 的 Rust
  • 採用 Vue.js 和 Fastify 的 JavaScript
  • 採用 FastAPI 的 Python

這些應用程式為客戶和市集管理員提供前端、將資料傳送至 RabbitMQ 訊息佇列和 MongoDB 資料庫的 REST API,以及用於模擬流量的主控台應用程式。

注意

除非是針對生產環境的永續性儲存,否則不建議執行具狀態容器,例如 MongoDB 和 Rabbit MQ。 這裡使用具狀態容器是為了簡單起見,但我們建議使用受控服務,例如 Azure CosmosDB 或 Azure 服務總線。

若要存取範例應用程式的 GitHub 程式碼基底,請參閱 AKS 市集示範

開始之前

  • 您需要具有有效訂用帳戶的 Azure 帳戶。 如果您沒有帳戶,可免費建立帳戶
  • 在此示範中,您可以使用 Azure OpenAI 服務,也可以使用 OpenAI 服務。

必要條件

建立資源群組

Azure 資源群組是一種邏輯群組,您可在其中部署與管理 Azure 資源。 建立資源群組時,系統提示您指定位置。 此位置是資源群組中繼資料的儲存位置,如果未在資源建立期間指定另一個區域,此位置也會是您在 Azure 中執行資源的位置。

下列範例會在 eastus 位置建立名為 myResourceGroup 的資源群組。

  • 使用 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 叢集

下列範例會在 myResourceGroup 中創建一個名為 myAKSCluster 的叢集。

  • 使用 az aks create 命令建立 AKS 叢集。

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

    幾分鐘後,命令會完成並傳回關於叢集的 JSON 格式資訊。

連線至叢集

若要管理 Kubernetes 叢集,可使用 Kubernetes 命令列用戶端 kubectl。 如果您使用 Azure Cloud Shell,則 kubectl 已安裝。

  1. 使用 az aks install-cli 命令在本機安裝 kubectl

    az aks install-cli
    

    注意

    如果您的 Linux 系統需要更高的權限,您可以使用 sudo az aks install-cli 命令。

  2. 使用 az aks get-credentials 命令,設定 kubectl 連線到 Kubernetes 叢集。

    此命令會執行下列作業:

    • 下載憑證並設定 Kubernetes CLI 以供使用。
    • 使用 ~/.kube/configKubernetes 組態檔的預設位置。 使用 --file 引數,為您的 Kubernetes 組態檔指定不同的位置。
    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 位址連線到節點,則節點可能無法連線。 要解決此問題,必須在與叢集連線的相同 VNET 內建立端點。 依照建立私人 AKS 叢集中的指示進行操作,然後連線到該叢集。

部署應用程式

AKS AI 示範的架構圖。

AKS 市集應用程式指令清單包含下列 Kubernetes 部署和服務:

  • 產品服務:顯示產品資訊。
  • 訂單服務:下單。
  • Makeline 服務:處理佇列中的訂單並完成訂單。
  • 市集前端:供客戶檢視產品和下單的 Web 應用程式。
  • 市集管理員:市集員工的 Web 應用程式,用於檢視佇列中的訂單及管理產品資訊。
  • 虛擬客戶:模擬根據排程建立訂單。
  • 虛擬工作人員:模擬根據排程完成訂單。
  • 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 訂用帳戶中啟用 Azure OpenAI,只須填寫要求存取 Azure OpenAI 服務表單。
  2. 在 Azure 入口網站中,建立一個 Azure OpenAI 執行個體。
  3. 選取您建立的 Azure OpenAI 執行個體。
  4. 選取 [金鑰和端點] 來產生金鑰。
  5. 選取 [模型部署]>[受控部署] 以開啟 Azure OpenAI Studio
  6. 使用 gpt-35-turbo 模型建立新的部署。

關於如何在 Azure OpenAI 中建立部署的詳細資訊,請參閱開始使用 Azure OpenAI 服務產生文字

部署 AI 服務

由於應用程式已部署,因此您可以部署使用 OpenAI 的 Python 型微服務,從而自動產生要新增至市集目錄之新產品的描述。

  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 Studio 取得 Azure OpenAI 部署名稱,並填入 AZURE_OPENAI_DEPLOYMENT_NAME 值。

  4. 從 Azure 入口網站取得 Azure OpenAI 端點和 Azure OpenAI API 金鑰,方法是在資源的左側刀鋒視窗中選取 [密鑰和端點]。 請據以更新 YAML 中的 AZURE_OPENAI_ENDPOINTOPENAI_API_KEY

  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. 使用 kubectl get pods 命令檢視已部署 Pod 的狀態。

    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. 使用 kubectl get service 命令取得市集管理 Web 應用程式和市集前端 Web 應用程式的 IP。

    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,以在瀏覽器中查看市集管理員。 針對 [市集前端] 重複相同的步驟。

  4. 在市集管理員中,選取產品標籤,然後選取 [新增產品]

  5. 成功執行 `ai-service`` 後,[描述] 字段旁邊應該會顯示 [詢問 OpenAI] 按鈕。 填入名稱、價格和關鍵詞,然後選取 [詢問 OpenAI]>[儲存產品] 來產生產品描述。

    如何使用 openAI 來產生產品描述的螢幕擷取畫面。

  6. 現在您可以在供銷售人員使用的 [市集管理員] 上看到您建立的新產品。 在圖片中,您可以看到新增了叢林猴子咀嚼玩具 (Jungle Monkey Chew Toy)。

    在市集管理頁面中檢視新產品的螢幕擷取畫面。

  7. 您也可以在供買方使用的 [市集前端] 上看到您建立的新產品。 在圖片中,您可以看到新增了叢林猴子咀嚼玩具 (Jungle Monkey Chew Toy)。 別忘了使用 kubectl get service 命令取得市集前端的 IP 位址。

    在商店首頁檢視新產品的螢幕擷取畫面。

下一步

鑒於您已將 OpenAI 功能新增至 AKS 應用程式,您可以在 Azure Kubernetes Service (AKS) 中確保對 Azure OpenAI 的安全存取

若要深入瞭解生成式 AI 使用案例,請參閱下列資源: