透過 Kubernetes,您可以使用 PaaS 服務,例如 Azure 服務匯流排,來開發和執行應用程式。
在本教學課程中,您會建立 Azure 服務匯流排命名空間和佇列來測試您的應用程式。 您將學習如何:
- 建立 Azure 服務匯流排命名空間及佇列。
- 更新 Kubernetes 資訊清單檔以使用 Azure 服務匯流排佇列。
- 藉由下訂單來測試更新的應用程式。
開始之前
在先前的教學課程中,您將應用程式封裝成容器映像、將這些映像上傳至 Azure Container Registry、建立 Kubernetes 叢集以及部署應用程式。 若要完成本教學課程中的內容,您需要預先建立的 aks-store-quickstart.yaml Kubernetes 資訊清單檔。 在先前的教學課程中,此檔案已連同應用程式原始程式碼一起下載。 請確認您已複製該存放庫,並已切換至複製後的存放庫目錄。 如果您尚未完成這些步驟,並且想要跟著做,請從教學課程 1 – 準備 AKS 的應用程式開始。
此教學建立可計費的 Azure 服務匯流排 資源。 要完成這些步驟,請使用一個能建立和管理 服務匯流排 資源,並更新資源群組內 AKS 工作負載的身份,例如貢獻者或擁有者。
此教學需要安裝 AKS 桌面版。
建立環境變數
請使用 Azure CLI 建立以下環境變數,用於本教學中的指令:
LOC_NAME=westus2 RAND=$RANDOM RG_NAME=myResourceGroup AKS_NAME=myAKSCluster SB_NS=sb-store-demo-$RAND
建立 Azure 服務匯流排命名空間和佇列
在先前的教學課程中,您已使用 RabbitMQ 容器來儲存 order-service 所提交的訂單。 在本教學課程中,您會使用 Azure 服務匯流排命名空間,為應用程式內的服務匯流排資源提供範圍容器。 您也可以使用 Azure 服務匯流排佇列在應用程式元件之間傳送和接收訊息。 如需 Azure 服務匯流排的詳細資訊,請參閱 建立 Azure 服務匯流排命名空間和佇列。
在此流程中,order-service 會使用你在本節建立的 sender 授權規則和金鑰,將訊息傳送至 orders 佇列。
請使用 Azure CLI 建立以下環境變數,用於本教學中的指令。
請使用 命令
az servicebus namespace create建立 Azure 服務匯流排 命名空間。az servicebus namespace create --name $SB_NS --resource-group $RG_NAME --location $LOC_NAME當指令成功完成並回傳命名空間細節後繼續。
使用
az servicebus queue create命令建立 Azure 服務匯流排佇列。az servicebus queue create --name orders --resource-group $RG_NAME --namespace-name $SB_NS在繼續前,請確認該佇列是否存在:
az servicebus queue show --name orders --resource-group $RG_NAME --namespace-name $SB_NS --query name -o tsv使用
az servicebus queue authorization-rule create命令建立 Azure 服務匯流排授權規則。az servicebus queue authorization-rule create \ --name sender \ --namespace-name $SB_NS \ --resource-group $RG_NAME \ --queue-name orders \ --rights Send使用
az servicebus namespace show和az servicebus queue authorization-rule keys list命令取得 Azure 服務匯流排的認證,以便日後使用。az servicebus namespace show --name $SB_NS --resource-group $RG_NAME --query name -o tsv az servicebus queue authorization-rule keys list --namespace-name $SB_NS --resource-group $RG_NAME --queue-name orders --name sender --query primaryKey -o tsv將這些值保存到清單更新階段:
-
<REPLACE_WITH_YOUR_ACR_NAME>: 你之前教學中提到的 Azure Container Registry 名稱。 -
<REPLACE_WITH_YOUR_SB_NS_HOSTNAME>:$SB_NS.servicebus.windows.net。 -
<REPLACE_WITH_YOUR_SB_SENDER_PASSWORD>: 來自primaryKey指令輸出的值。
-
更新 Kubernetes 資訊清單檔
到AKS桌面版的專案,選擇你在前一個教學中建立的專案。
my-dev-frontend選擇 資源 標籤,然後選擇 工作負載>部署:order-service。
選擇 編輯器。
移除現有
rabbitmq的 StatefulSet、ConfigMap 和 Service 區塊。 請將現有order-service的部署區塊替換為以下內容。 複製並貼上內容:apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 1 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: nodeSelector: "kubernetes.io/os": linux containers: - name: order-service image: <REPLACE_WITH_YOUR_ACR_NAME>.azurecr.io/aks-store-demo/order-service:latest ports: - containerPort: 3000 env: - name: ORDER_QUEUE_HOSTNAME value: "<REPLACE_WITH_YOUR_SB_NS_HOSTNAME>" # Example: sb-store-demo-123456.servicebus.windows.net - name: ORDER_QUEUE_PORT value: "5671" - name: ORDER_QUEUE_TRANSPORT value: "tls" - name: ORDER_QUEUE_USERNAME value: "sender" - name: ORDER_QUEUE_PASSWORD value: "<REPLACE_WITH_YOUR_SB_SENDER_PASSWORD>" - name: ORDER_QUEUE_NAME value: "orders" - name: FASTIFY_ADDRESS value: "0.0.0.0" resources: requests: cpu: 1m memory: 50Mi limits: cpu: 75m memory: 128Mi startupProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 20 periodSeconds: 10 readinessProbe: httpGet: path: /health port: 3000 failureThreshold: 3 initialDelaySeconds: 3 periodSeconds: 5 livenessProbe: httpGet: path: /health port: 3000 failureThreshold: 5 initialDelaySeconds: 3 periodSeconds: 3
注意
直接將敏感資訊(如 API 金鑰)加入 Kubernetes 清單檔案並不安全,且可能誤入程式碼庫。 這個例子是為了簡化才加上的。 針對生產工作負載,請使用 受控識別 向 Azure 服務匯流排進行驗證,或將您的祕密儲存在 Azure Key Vault 中。
選擇 儲存並套用,持續更新。
請先確認已更新的
order-service部署在工作負載檢視中處於健康狀態,再繼續。
部署已更新的應用程式
使用指令部署更新後的應用程式
kubectl apply。kubectl apply -f aks-store-quickstart.yaml下列範例輸出顯示已成功更新的資源:
deployment.apps/order-service configured service/order-service unchanged deployment.apps/product-service unchanged service/product-service unchanged deployment.apps/store-front configured service/store-front unchanged確認更新後的部署是否正在執行。
kubectl get pods
當應用程式 Pod 處於 Running 狀態時,請繼續。
測試應用程式
下範例訂單
AKS 桌面
透過資源網路服務( Resource>Network>Service:store-front>external IP)取得公開 IP 位址。
命令列
使用
store-front命令,取得kubectl get service服務的外部 IP 位址。kubectl get service store-front如果
EXTERNAL-IP是<pending>,請稍等一分鐘,再執行該指令直到出現公開 IP 位址。在瀏覽器中使用
http://<external-ip>瀏覽至store-front服務的外部 IP 位址。選擇產品並選取 [新增至購物車] 來下訂單。
選取 [購物車] 以檢視您的訂單,然後選取 [結帳]。
在 Azure 服務匯流排佇列中檢視訂單
- 瀏覽至 Azure 入口網站,然後開啟您稍早建立的 Azure 服務匯流排命名空間。
- 在 [實體] 下,選取 [佇列],然後選取訂單佇列。
- 在訂單佇列中,選取 [服務匯流排 Explorer]。
- 選取 從頭預覽 以查看您提交的訂單。
下一步
在本教學課程中,您已使用 Azure 服務匯流排來更新及測試範例應用程式。 您已了解如何:
- 建立 Azure 服務匯流排命名空間及佇列。
- 更新 Kubernetes 資訊清單檔以使用 Azure 服務匯流排佇列。
- 藉由下訂單來測試更新的應用程式。
您會在下一個教學課程中了解如何在 AKS 裡調整應用程式。