教學課程:透過 Azure Kubernetes Service (AKS) 叢集使用 PaaS 服務

透過 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 建立以下環境變數,用於本教學中的指令。

  1. 請使用 命令az servicebus namespace create建立 Azure 服務匯流排 命名空間。

    az servicebus namespace create --name $SB_NS --resource-group $RG_NAME --location $LOC_NAME
    

    當指令成功完成並回傳命名空間細節後繼續。

  2. 使用 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
    
  3. 使用 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
    
  4. 使用 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 資訊清單檔

  1. 到AKS桌面版的專案,選擇你在前一個教學中建立的專案。 my-dev-frontend

  2. 選擇 資源 標籤,然後選擇 工作負載>部署:order-service。 顯示正在編輯部屬 (資源 → 工作負載 → 部屬 → 訂單服務) 的螢幕擷取畫面。

  3. 選擇 編輯器。

  4. 移除現有 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
    

    截圖顯示使用編輯器更新 YAML 部署。

    注意

    直接將敏感資訊(如 API 金鑰)加入 Kubernetes 清單檔案並不安全,且可能誤入程式碼庫。 這個例子是為了簡化才加上的。 針對生產工作負載,請使用 受控識別 向 Azure 服務匯流排進行驗證,或將您的祕密儲存在 Azure Key Vault 中。

  5. 選擇 儲存並套用,持續更新。

  6. 請先確認已更新的 order-service 部署在工作負載檢視中處於健康狀態,再繼續。

部署已更新的應用程式

  1. 使用指令部署更新後的應用程式 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
    
  2. 確認更新後的部署是否正在執行。

    kubectl get pods
    

當應用程式 Pod 處於 Running 狀態時,請繼續。

測試應用程式

下範例訂單

AKS 桌面

透過資源網路服務( Resource>Network>Service:store-front>external IP)取得公開 IP 位址。

截圖顯示取得外部 IP 位址的過程。

命令列

  1. 使用 store-front 命令,取得 kubectl get service 服務的外部 IP 位址。

    kubectl get service store-front
    

    如果 EXTERNAL-IP 是 <pending>,請稍等一分鐘,再執行該指令直到出現公開 IP 位址。

  2. 在瀏覽器中使用 http://<external-ip> 瀏覽至 store-front 服務的外部 IP 位址。

  3. 選擇產品並選取 [新增至購物車] 來下訂單。

  4. 選取 [購物車] 以檢視您的訂單,然後選取 [結帳]。

在 Azure 服務匯流排佇列中檢視訂單

  1. 瀏覽至 Azure 入口網站,然後開啟您稍早建立的 Azure 服務匯流排命名空間。
  2. 在 [實體] 下,選取 [佇列],然後選取訂單佇列。
  3. 在訂單佇列中,選取 [服務匯流排 Explorer]。
  4. 選取 從頭預覽 以查看您提交的訂單。

下一步

在本教學課程中,您已使用 Azure 服務匯流排來更新及測試範例應用程式。 您已了解如何:

  • 建立 Azure 服務匯流排命名空間及佇列。
  • 更新 Kubernetes 資訊清單檔以使用 Azure 服務匯流排佇列。
  • 藉由下訂單來測試更新的應用程式。

您會在下一個教學課程中了解如何在 AKS 裡調整應用程式。