在 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 OpenAI 服務,則必須啟用在 Azure 訂用帳戶上的要求存取 Azure OpenAI 服務表單。
- 如果您打算使用 OpenAI,請在 OpenAI 網站註冊。
必要條件
在 Azure Cloud Shell 中使用 Bash 環境。 如需詳細資訊,請參閱 Azure Cloud Shell 中的 Bash 快速入門。
若要在本地執行 CLI 參考命令,請安裝 Azure CLI。 若您在 Windows 或 macOS 上執行,請考慮在 Docker 容器中執行 Azure CLI。 如需詳細資訊,請參閱〈如何在 Docker 容器中執行 Azure CLI〉。
如果您使用的是本機安裝,請使用 az login 命令,透過 Azure CLI 來登入。 請遵循您終端機上顯示的步驟,完成驗證程序。 如需其他登入選項,請參閱使用 Azure CLI 登入。
出現提示時,請在第一次使用時安裝 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
已安裝。
使用
az aks install-cli
命令在本機安裝kubectl
。az aks install-cli
注意
如果您的 Linux 系統需要更高的權限,您可以使用
sudo az aks install-cli
命令。使用
az aks get-credentials
命令,設定kubectl
連線到 Kubernetes 叢集。此命令會執行下列作業:
- 下載憑證並設定 Kubernetes CLI 以供使用。
- 使用
~/.kube/config
,Kubernetes 組態檔的預設位置。 使用 --file 引數,為您的 Kubernetes 組態檔指定不同的位置。
az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
使用
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 市集應用程式指令清單包含下列 Kubernetes 部署和服務:
- 產品服務:顯示產品資訊。
- 訂單服務:下單。
- Makeline 服務:處理佇列中的訂單並完成訂單。
- 市集前端:供客戶檢視產品和下單的 Web 應用程式。
- 市集管理員:市集員工的 Web 應用程式,用於檢視佇列中的訂單及管理產品資訊。
- 虛擬客戶:模擬根據排程建立訂單。
- 虛擬工作人員:模擬根據排程完成訂單。
- Mongo DB:儲存永續性資料的 NoSQL 執行個體。
- Rabbit MQ:訂單佇列的訊息佇列。
注意
除非是針對生產環境的永續性儲存,否則不建議執行具狀態容器,例如 MongoDB 和 Rabbit MQ。 這裡使用具狀態容器是為了簡單起見,但我們建議使用受控服務,例如 Azure CosmosDB 或 Azure 服務總線。
檢閱應用程式的 YAML 指令清單。
使用
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 上執行您的應用程式。
- 要在您的 Azure 訂用帳戶中啟用 Azure OpenAI,只須填寫要求存取 Azure OpenAI 服務表單。
- 在 Azure 入口網站中,建立一個 Azure OpenAI 執行個體。
- 選取您建立的 Azure OpenAI 執行個體。
- 選取 [金鑰和端點] 來產生金鑰。
- 選取 [模型部署]>[受控部署] 以開啟 Azure OpenAI Studio。
- 使用 gpt-35-turbo 模型建立新的部署。
關於如何在 Azure OpenAI 中建立部署的詳細資訊,請參閱開始使用 Azure OpenAI 服務產生文字。
部署 AI 服務
由於應用程式已部署,因此您可以部署使用 OpenAI 的 Python 型微服務,從而自動產生要新增至市集目錄之新產品的描述。
建立名為
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
將
USE_AZURE_OPENAI
環境變數設定為"True"
。從 Azure OpenAI Studio 取得 Azure OpenAI 部署名稱,並填入
AZURE_OPENAI_DEPLOYMENT_NAME
值。從 Azure 入口網站取得 Azure OpenAI 端點和 Azure OpenAI API 金鑰,方法是在資源的左側刀鋒視窗中選取 [密鑰和端點]。 請據以更新 YAML 中的
AZURE_OPENAI_ENDPOINT
和OPENAI_API_KEY
。使用
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 中。
測試應用程式
使用 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
使用
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`` 的服務重複相同的步驟。
開啟網頁瀏覽器,並前往您服務的外部 IP 位址。 在此範例中,開啟 40.64.86.161,以在瀏覽器中查看市集管理員。 針對 [市集前端] 重複相同的步驟。
在市集管理員中,選取產品標籤,然後選取 [新增產品]。
成功執行 `ai-service`` 後,[描述] 字段旁邊應該會顯示 [詢問 OpenAI] 按鈕。 填入名稱、價格和關鍵詞,然後選取 [詢問 OpenAI]>[儲存產品] 來產生產品描述。
現在您可以在供銷售人員使用的 [市集管理員] 上看到您建立的新產品。 在圖片中,您可以看到新增了叢林猴子咀嚼玩具 (Jungle Monkey Chew Toy)。
您也可以在供買方使用的 [市集前端] 上看到您建立的新產品。 在圖片中,您可以看到新增了叢林猴子咀嚼玩具 (Jungle Monkey Chew Toy)。 別忘了使用
kubectl get service
命令取得市集前端的 IP 位址。
下一步
鑒於您已將 OpenAI 功能新增至 AKS 應用程式,您可以在 Azure Kubernetes Service (AKS) 中確保對 Azure OpenAI 的安全存取。
若要深入瞭解生成式 AI 使用案例,請參閱下列資源:
- Azure OpenAI 服務文件 (英文)
- Azure OpenAI 服務簡介 (英文)
- OpenAI 平台 (英文)
- Project Miyagi - Copilot 堆疊的設想中範例 (英文)