你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
快速入门:将 Dapr 群集扩展用于 Azure Kubernetes 服务 (AKS) 或已启用 Arc 的 Kubernetes 以部署应用程序
本快速入门介绍了如何在 AKS 或已启用 Arc 的 Kubernetes 群集中使用 Dapr 群集扩展。 你将部署一个 hello world
示例,其中包含一个生成消息的 Python 应用程序和一个使用和保留消息的 Node 应用程序。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,可以创建一个免费帐户。
- 已安装 Azure CLI 或 Azure PowerShell。
- AKS 或已启用 Arc 的 Kubernetes 群集,其中已启用 Dapr 群集扩展。
克隆存储库
使用
git clone
命令克隆 Dapr 快速入门存储库。git clone https://github.com/dapr/quickstarts.git
使用
cd
更改为hello-kubernetes
目录。cd quickstarts/tutorials/hello-kubernetes/
创建和配置状态存储
Dapr 可以使用许多不同的状态存储(例如 Redis、Azure Cosmos DB、DynamoDB 和 Cassandra)以持久保留和检索状态。 本示例使用了 Redis。
创建 Redis 存储
打开 Azure 门户以启动 Azure Cache for Redis 创建流。
填写所需信息。
选择“创建”以启动 Redis 实例部署。
记下 Redis 实例的主机名,这可以从 Azure 中的“概述”部分中检索到。 主机名可能与以下示例相类似:
xxxxxx.redis.cache.windows.net:6380
。在“设置”下,导航到“访问密钥”以获取访问密钥。
使用
kubectl create secret generic redis
命令创建 Kubernetes 机密以存储 Redis 密码。kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
配置 Dapr 组件
创建存储后,需要将密钥添加到 Hello World 存储库部署目录中的 redis.yaml
文件。 可在此处了解详细信息。
将
redisHost
值替换为你自己的 Redis 主地址。将
redisPassword
替换为你自己的机密。在
redisPassword
下面添加以下两行以通过 TLS 启用连接- name: redisPassword secretKeyRef: name: redis key: redis-password - name: enableTLS value: true
应用配置
使用
kubectl apply
命令应用redis.yaml
文件。kubectl apply -f ./deploy/redis.yaml
使用
kubectl get components.redis
命令验证是否已成功配置状态存储。kubectl get components.redis -o yaml
你看到的输出应类似于以下示例输出:
component.dapr.io/statestore created
通过 Dapr 挎斗部署 Node.js 应用
使用
kubectl apply
命令将 Node.js 应用部署应用到群集。kubectl apply -f ./deploy/node.yaml
注意
Kubernetes 部署是异步的,这意味着需要等待部署完成,然后再继续执行后续步骤。 可通过以下命令执行此操作:
kubectl rollout status deploy/nodeapp
这会将 Node.js 应用部署到 Kubernetes。 Dapr 控制平面会自动将 Dapr 挎斗注入到 Pod。 如果查看
node.yaml
文件,你将看到如何为该部署启用 Dapr:dapr.io/enabled: true
:告知 Dapr 控制平面将挎斗注入此部署。dapr.io/app-id: nodeapp
:将唯一的 ID 或名称分配给 Dapr 应用程序,以便可以将消息发送到其他 Dapr 应用,并与之通信。
使用
kubectl get svc
命令访问服务。kubectl get svc nodeapp
记下输出中的
EXTERNAL-IP
。
验证服务
使用
curl
和EXTERNAL-IP
调用服务。curl $EXTERNAL_IP/ports
你看到的输出应类似于以下示例输出:
{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
使用
curl
向应用程序提交订单。curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
通过使用
curl
进行请求来确认订单已持久化。curl $EXTERNAL_IP/order
你看到的输出应类似于以下示例输出:
{ "orderId": "42" }
通过 Dapr 挎斗部署 Python 应用
导航到
hello-kubernetes
快速入门中的 Python 应用目录,然后打开app.py
。此示例是一个基本 Python 应用,可将 JSON 消息发布到
localhost:3500
,即 Dapr 的默认侦听端口。 可以通过发布到v1.0/invoke/nodeapp/method/neworder
来调用 Node.js 应用程序的neworder
终结点。 该消息包含一些数据,其中的orderId
每秒递增一次:n = 0 while True: n += 1 message = {"data": {"orderId": n}} try: response = requests.post(dapr_url, json=message) except Exception as e: print(e) time.sleep(1)
使用
kubectl apply
命令将 Python 应用部署到 Kubernetes 群集。kubectl apply -f ./deploy/python.yaml
注意
与前一个命令一样,需要等待部署完成,然后再继续执行后续步骤。 可通过以下命令执行此操作:
kubectl rollout status deploy/pythonapp
观察消息并确认持久化
现在,已部署 Node.js 和 Python 应用程序,你可以观察消息。
使用
kubectl logs
命令获取 Node.js 应用的日志。kubectl logs --selector=app=node -c node --tail=-1
如果部署成功,你看到的日志应类似于以下示例日志:
Got a new order! Order ID: 1 Successfully persisted state Got a new order! Order ID: 2 Successfully persisted state Got a new order! Order ID: 3 Successfully persisted state
使用
curl
调用 Node.js 应用的订单终结点以获取最新订单。curl $EXTERNAL_IP/order {"orderID":"42"}
应该会在响应中看到最新的 JSON。
清理资源
使用 az group delete 命令移除资源组、群集、命名空间和所有相关资源。
az group delete --name MyResourceGroup