教程:将 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 服务总线命名空间和队列。
使用
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 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
更新 Kubernetes 清单文件
使用
az aks get-credentials
命令将kubectl
配置为连接到你的群集。az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
在文本编辑器中打开
aks-store-quickstart.yaml
文件。删除现有的
rabbitmq
StatefulSet、ConfigMap 和 Service 节,并将现有的order-service
Deployment 节替换为以下内容: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 中。
保存并关闭已更新的
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
测试应用程序
示例下单
使用
kubectl get service
命令获取store-front
服务的外部 IP 地址。kubectl get service store-front
在浏览器中,使用
http://<external-ip>
导航到store-front
服务的外部 IP 地址。通过选择产品并选择“添加到购物车”来下单。
选择“购物车”以查看订单,然后选择“结帐”。
在 Azure 服务总线队列中查看订单
- 导航到 Azure 门户,并打开以前创建的 Azure 服务总线命名空间。
- 在“实体”下,选择“队列”,然后选择“订单”队列。
- 在“订单”队列中,选择“Service Bus Explorer”。
- 选择“从头开始速览”,查看已提交的订单。
后续步骤
本教程使用 Azure 服务总线更新和测试示例应用程序。 你已了解如何执行以下操作:
- 创建 Azure 服务总线命名空间和队列。
- 更新 Kubernetes 清单文件以使用 Azure 服务总线队列。
- 通过下单来测试更新后的应用程序。
下一教程介绍如何在 AKS 中缩放应用程序。