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

在本文中,您將在 Azure Kubernetes Service (AKS) 上部署 AKS Store Demo 應用程式,並配置 Azure OpenAI 或 OpenAI API 以產生產品描述。

這個範例的雲端原生應用程式包含多種語言與框架撰寫的服務,包括:

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

這些應用程式為購物者與店鋪管理員提供前端,REST API 將資料傳送至 RabbitMQ 訊息佇列與 DocumentDB 資料庫,以及模擬流量的主控台應用程式。

注意

在生產環境中不要在沒有持久儲存的情況下執行有狀態容器,例如 DocumentDB 和 RabbitMQ。 本文為簡化使用且未使用持久儲存的 Ste-Pat。 對於生產工作負載,可以使用管理服務,例如 Azure Cosmos DB 或 Azure 服務匯流排。

若要存取範例應用程式的GitHub程式碼庫,請參見 AKS Store Demo。

開始之前

  • 你需要一個有有效訂閱的 Azure 帳號。 如果您沒有帳戶,可免費建立帳戶。
  • 在此示範中,請使用 Azure OpenAI 或 OpenAI API。

必要條件

  • 請使用 Azure Cloud Shell 的 Bash 環境。 欲了解更多資訊,請參見開始使用 Azure Cloud Shell。

  • 如果你喜歡在本地執行 CLI 參考指令,install Azure CLI。 如果你是在 Windows 或 macOS 上運行,可以考慮在 Docker 容器中執行 Azure CLI。 更多資訊請參見 如何在 Docker 容器中執行Azure CLI。

    • 如果你使用本地安裝,請使用 az login 指令登入 Azure CLI。 請遵循您終端機上顯示的步驟,完成驗證程序。 其他登入選項請參見 使用 Azure CLI 驗證 Azure。

    • 當系統提示時,首次使用時安裝 Azure CLI 擴充功能。 欲了解更多擴充功能的資訊,請參閱 使用 Azure CLI。

    • 執行 az version 以尋找已安裝的版本和相依程式庫。 若要升級至最新版本,請執行 az upgrade。

建立資源群組

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. 使用 kubectl 命令在本地安裝 az aks install-cli。

    az aks install-cli
    

    注意

    如果你的 Linux 系統需要提升權限,請使用該 sudo az aks install-cli 指令。

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

    此指令執行以下操作:

    • 下載憑證並設定 Kubernetes CLI 以供使用。
    • 使用 ~/.kube/config,Kubernetes 組態檔的預設位置。 使用 --file 參數,為您的 Kubernetes 設定檔指定不同的位置。
    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  3. 使用 kubectl get 命令確認叢集的連線。 此命令會傳回叢集節點的清單。

    kubectl get nodes
    

    以下範例輸出顯示前述步驟中建立的節點。 確認每個節點的狀態是否為 Ready。

    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
    

注意

對於私有 AKS 叢集,請從與叢集同一虛擬網路中的端點連線。 關於設定說明,請參見 建立私有 AKS 叢集。

部署應用程式

AKS Store 應用程式清單包含以下 Kubernetes 部署與服務:

  • 產品服務:顯示產品資訊。
  • 訂單服務:下單。
  • Makeline 服務:處理佇列中的訂單並完成訂單。
  • 市集前端:供客戶檢視產品和下單的 Web 應用程式。
  • 市集管理員:市集員工的 Web 應用程式,用於檢視佇列中的訂單及管理產品資訊。
  • 虛擬客戶:模擬根據排程建立訂單。
  • 虛擬工作人員:模擬根據排程完成訂單。
  • DocumentDB:用於持久化資料的 NoSQL 實例。
  • RabbitMQ:用於訂單佇列的訊息佇列。

注意

在生產環境中不要在沒有持久儲存的情況下執行有狀態容器,例如 DocumentDB 和 RabbitMQ。 本文為簡化使用且未使用持久儲存的 Ste-Pat。 對於生產工作負載,可以使用管理服務,例如 Azure Cosmos DB 或 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
    

部署 OpenAI 服務

選擇 Azure OpenAI 或 OpenAI API 來執行在 AKS 上的應用程式。

  1. 在 Azure 入口網站中,建立一個 Azure OpenAI 實例。
  2. 登入 Microsoft Foundry。
  3. 關閉 New Foundry 切換,然後在 Keep build with Foundry 裡選擇「查看所有資源」。
  4. 選擇你建立的 Azure OpenAI 資源,然後在「共享資源」中選擇「部署」。
  5. 選取 [部署模型]>[部署基本模型]。
  6. 選擇 gpt-4o-mini 基礎模型,輸入部署名稱,然後部署該模型。 將部署名稱存到下一節。

欲了解更多關於建立 Azure OpenAI 部署的資訊,請參閱「開始使用 Azure OpenAI 產生文字」。

部署 AI 微服務

部署基於 Python 的 AI 微服務,利用 OpenAI 自動生成產品描述。 這個微服務會連接到你在前一節部署的 AKS Store 應用程式。

使用你在「部署 OpenAI 服務」部分建立的 Azure OpenAI 資源和模型部署。 在 AI 微服務清單中配置以下環境變數:

環境變數 價值
USE_AZURE_OPENAI 設定為"True"使用 Azure OpenAI。
AZURE_OPENAI_DEPLOYMENT_NAME 你gpt-4o-mini在 Microsoft Foundry 中部署的模型名稱。
AZURE_OPENAI_ENDPOINT 來自你 Azure OpenAI 資源的 Keys and Endpoint 頁面上的端點。
OPENAI_API_KEY 從你 Azure OpenAI 資源的 Keys and Endpoint 頁面取得 API 金鑰。
  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:2.2.0
              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. 在 Microsoft Foundry 中,複製 Azure OpenAI 部署名稱並設定AZURE_OPENAI_DEPLOYMENT_NAME值。

  4. 在 Azure 入口網站中,選擇 Azure OpenAI 資源中的「Keys and Endpoint」。 複製端點和 API 金鑰,然後設定 AZURE_OPENAI_ENDPOINT and OPENAI_API_KEY 值。

  5. 使用 kubectl apply 命令來部署應用程式,並指定 YAML 資訊清單的名稱。

    kubectl apply -f ai-service.yaml
    

    下列範例輸出會顯示已成功建立的部署和服務:

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

注意

直接將 API 金鑰存放在 Kubernetes 清單中是不安全的,且可能暴露原始碼控制中的秘密。 此範例使用manifest值以簡化。 對於生產工作負載,請使用管理身份驗證 Azure OpenAI,或將秘密儲存在 Azure Key Vault。

測試應用程式

  1. 使用 kubectl get pods 命令檢視已部署 Pod 的狀態。

    kubectl get pods
    

    在繼續之前,請確認所有 pod 的狀態都已 運行 中。

  2. 用指令 kubectl get service 取得商店管理員的外部 IP 位址。

    kubectl get service store-admin
    

    Kubernetes 服務透過公開負載平衡器暴露 Store Admin。 負載平衡器可能需要幾分鐘才能分配位址。 外部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
    
  3. 重複前一個步驟進行 store-front 儀式。

  4. 在網頁瀏覽器中,前往商店管理員的外部 IP 位址。在此範例中,位址為 40.64.86.161。

  5. 在商店管理中,選擇 「新增>產品」。

  6. 開始後 ai-service ,描述欄旁會出現 「詢問 AI 助理 」按鈕。 輸入名稱、價格和關鍵字,選擇 「詢問 AI 助理 」以產生產品描述,然後選擇 「儲存產品」。

  7. 確認狗狗智慧項圈是否出現在商店管理員中。

    商店管理員中顯示新產品的截圖。

  8. 前往 Store Front 的外部 IP 位址,確認 Dog Smart Collar 是否出現。

    新產品在 Store Front 的截圖。

下一步

現在您已為 Azure Kubernetes Service (AKS) 應用程式添加了 OpenAI 功能,您可以安全地從 Azure Kubernetes Service (AKS) 存取 Azure OpenAI 功能。

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