教程:将 PaaS 服务与 Azure Kubernetes 服务 (AKS) 群集配合使用

借助 Kubernetes,可以使用 PaaS 服务(例如 Azure 服务总线)开发和运行应用程序。

在本教程的第五部分(共七部分),你将创建 Azure 服务总线命名空间和队列来测试应用程序。 学习如何:

  • 创建 Azure 服务总线命名空间和队列。
  • 更新 Kubernetes 清单文件以使用 Azure 服务总线队列。
  • 通过下单来测试更新后的应用程序。

开始之前

在之前的教程中,你已将应用程序打包到容器映像中、将映像上传到 Azure 容器注册表、创建 Kubernetes 群集并且部署了应用程序。 必须先预创建 aks-store-quickstart.yaml Kubernetes 清单文件,然后才能完成本教程。 此文件下载包含在上一教程中的应用程序源代码中。 确保已克隆存储库,并将目录更改为克隆的存储库。 如果你尚未完成这些步骤且想要继续学习,请从教程 1:为 AKS 准备应用程序开始。

本教程需要 Azure CLI 版本 2.34.1 或更高版本。 运行 az --version 即可查找版本。 如果需要进行安装或升级,请参阅安装 Azure CLI

创建环境变量

  • 创建本教程中要用于命令的以下环境变量:

    LOC_NAME=chinanorth3
    RAND=$RANDOM
    RG_NAME=myResourceGroup
    AKS_NAME=myAKSCluster
    SB_NS=sb-store-demo-$RAND
    

创建 Azure 服务总线命名空间和队列

在之前的教程中,你使用了 RabbitMQ 容器来存储由 order-service 提交的订单。 本教程使用 Azure 服务总线命名空间为应用程序中的服务总线资源提供范围界定容器。 还将使用 Azure 服务总线队列在应用程序组件之间发送和接收消息。 有关 Azure 服务总线的详细信息,请参阅创建 Azure 服务总线命名空间和队列

  1. 使用 az servicebus namespace create 命令创建 Azure 服务总线命名空间。

    az servicebus namespace create -n $SB_NS -g $RG_NAME -l $LOC_NAME
    
  2. 使用 az servicebus queue create 命令创建 Azure 服务总线队列。

    az servicebus queue create -n orders -g $RG_NAME --namespace-name $SB_NS -g $RG_NAME
    
  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 showaz 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
    

更新 Kubernetes 清单文件

  1. 使用 az aks get-credentials 命令将 kubectl 配置为连接到你的群集。

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. 在文本编辑器中打开 aks-store-quickstart.yaml 文件。

  3. 删除现有的 rabbitmq 部署、ConfigMap 和服务部分,并将现有的 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.cn/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.chinacloudapi.cn
            - 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
    

    注意

    直接将 API 密钥等敏感信息添加到 Kubernetes 清单文件这种做法并不安全,可能会意外地提交到代码存储库。 为了简单起见,在此处已经添加了敏感信息。 对于生产工作负载,请使用托管标识对 Azure 服务总线进行身份验证,或将机密存储在 Azure Key Vault 中。

  4. 保存并关闭已更新的 aks-store-quickstart.yaml 文件。

部署更新的应用程序

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

测试应用程序

示例下单

  1. 使用 kubectl get service 命令获取 store-front 服务的外部 IP 地址。

    kubectl get service store-front
    
  2. 在浏览器中,导航到 store-front 服务的外部 IP 地址。

  3. 通过选择产品并选择“添加到购物车”来下单

  4. 选择“购物车”以查看订单,然后选择“结帐”

在 Azure 服务总线队列中查看订单

  1. 导航到 Azure 门户,并打开以前创建的 Azure 服务总线命名空间。
  2. 在“实体”下,选择“队列”,然后选择“订单”队列
  3. 在“订单”队列中,选择“Service Bus Explorer”
  4. 选择“从头开始速览”,查看已提交的订单

后续步骤

本教程使用 Azure 服务总线更新和测试示例应用程序。 你已了解如何执行以下操作:

  • 创建 Azure 服务总线命名空间和队列。
  • 更新 Kubernetes 清单文件以使用 Azure 服务总线队列。
  • 通过下单来测试更新后的应用程序。

下一教程介绍如何在 AKS 中缩放应用程序。