你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

快速入门:将 Dapr 群集扩展用于 Azure Kubernetes 服务 (AKS) 或已启用 Arc 的 Kubernetes 以部署应用程序

本快速入门介绍了如何在 AKS 或已启用 Arc 的 Kubernetes 群集中使用 Dapr 群集扩展。 你将部署一个 Hello World 示例,其中包含一个生成消息的 Python 应用程序和一个使用和保留消息的 Node 应用程序。

先决条件

克隆存储库

若要获取用于部署示例应用程序的文件,请克隆快速入门存储库,并更改为 hello-kubernetes 目录:

git clone https://github.com/dapr/quickstarts.git
cd quickstarts/hello-kubernetes

创建和配置状态存储

Dapr 可以使用多种不同的状态存储(Redis、Azure Cosmos DB、DynamoDB、Cassandra 等),以保持和检索状态。 本示例将使用 Redis。

创建 Redis 存储

  1. 打开 Azure 门户以启动 Azure Redis 缓存创建流。
  2. 填写必要信息
  3. 单击“创建”,启动 Redis 实例的部署。
  4. 记下 Redis 实例的主机名,可以从 Azure 中的“概述”中检索。 它看起来应该类似于:xxxxxx.redis.cache.windows.net:6380
  5. 创建实例后,需要获取访问密钥。 导航到“设置”下的“访问密钥”,并创建 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

应用配置

应用 redis.yaml 文件:

kubectl apply -f ./deploy/redis.yaml

并验证是否已在输出中成功配置状态存储:

component.dapr.io/statestore created

通过 Dapr 挎斗部署 Node.js 应用

将 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 获取并记下 EXTERNAL-IP

kubectl get svc nodeapp

验证服务

若要调用服务,请运行:

curl $EXTERNAL_IP/ports

应会看到如下所示的输出:

{"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}

接下来,向应用程序提交订单:

curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder

通过请求确认订单已持久化:

curl $EXTERNAL_IP/order

应会看到如下所示的输出:

{ "orderId": "42" }

提示

这是熟悉 Dapr 仪表板的好时机,Dapr 仪表板是一个方便的界面,可用于检查 Dapr 上运行的应用程序的状态、信息和日志。 以下命令将使其在 http://localhost:8080/ 上可用:

kubectl port-forward svc/dapr-dashboard -n dapr-system 8080:8080

通过 Dapr 挎斗部署 Python 应用

快速了解一下 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)

将 Python 应用部署到 Kubernetes 群集:

kubectl apply -f ./deploy/python.yaml

注意

如上所述,以下命令将等待部署完成:

kubectl rollout status deploy/pythonapp

观察消息并确认持久化

现在,已部署 Node.js 和 Python 应用程序,可以观察消息。

获取 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

调用 Node.js 应用的订单终结点以获取最新订单。 获取之前保存的外部 IP 地址,追加“/order”并对其执行 GET 请求(将其输入到浏览器中,使用 Postman,或使用 curl!):

curl $EXTERNAL_IP/order
{"orderID":"42"}

应该会在响应中看到最新的 JSON。

清理资源

可以使用 az group delete 命令删除资源组、群集、命名空间及所有相关资源。

az group delete --name MyResourceGroup

后续步骤

成功部署此示例应用程序后: