Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
借助 Kubernetes,可以使用 PaaS 服务(例如 Azure 服务总线)开发和运行应用程序。
在本教程中,你将创建 Azure 服务总线命名空间和队列来测试应用程序。 您将学习如何:
- 创建 Azure 服务总线命名空间和队列。
- 更新 Kubernetes 清单文件以使用 Azure 服务总线队列。
- 通过下单来测试更新后的应用程序。
开始之前
在之前的教程中,你已将应用程序打包到容器映像中、将映像上传到 Azure 容器注册表、创建 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使用orders在本部分中创建的授权规则和密钥将消息发送到sender队列。
使用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 容器注册表 名称。 -
<REPLACE_WITH_YOUR_SB_NS_HOSTNAME>:$SB_NS.servicebus.chinacloudapi.cn。 -
<REPLACE_WITH_YOUR_SB_SENDER_PASSWORD>primaryKey:命令输出中的值。
-
更新 Kubernetes 清单文件
转到 AKS 桌面中的项目,然后选择在上一教程中创建的项目。
my-dev-frontend选择“ 资源 ”选项卡,然后选择 “工作负荷>部署:订单服务”。
选择 编辑器。
删除现有的
rabbitmqStatefulSet、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 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 密钥保管库 中。
通过选择 “保存并应用”来保留更新。
在继续操作之前,请验证更新
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 桌面
转到资源>网络>服务:store-front>外部 IP即可获取公共 IP 地址。
命令行
使用
store-front命令获取kubectl get service服务的外部 IP 地址。kubectl get service store-frontEXTERNAL-IP如果是<pending>,请等待一分钟,然后再次运行该命令,直到出现公共 IP 地址。在浏览器中,使用
store-front导航到http://<external-ip>服务的外部 IP 地址。通过选择产品并选择“添加到购物车”来下单。
选择“购物车”以查看订单,然后选择“结帐”。
在 Azure 服务总线队列中查看订单
- 导航到 Azure 门户,并打开以前创建的 Azure 服务总线命名空间。
- 在“实体”下,选择“队列”,然后选择“订单”队列。
- 在“订单”队列中,选择“服务总线 Explorer”。
- 选择“从头开始速览”,查看已提交的订单。
后续步骤
本教程使用 Azure 服务总线更新和测试示例应用程序。 你已了解如何执行以下操作:
- 创建 Azure 服务总线命名空间和队列。
- 更新 Kubernetes 清单文件以使用 Azure 服务总线队列。
- 通过下单来测试更新后的应用程序。
下一教程介绍如何在 AKS 中缩放应用程序。