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

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

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

先决条件

克隆存储库

  1. 使用 git clone 命令克隆 Dapr 快速入门存储库

    git clone https://github.com/dapr/quickstarts.git
    
  2. 使用 cd 更改为 hello-kubernetes 目录。

    cd quickstarts/tutorials/hello-kubernetes/
    

创建和配置状态存储

Dapr 可以使用许多不同的状态存储(例如 Redis、Azure Cosmos DB、DynamoDB 和 Cassandra)以持久保留和检索状态。 本示例使用了 Redis。

创建 Redis 存储

  1. 打开 Azure 门户以启动 Azure Cache for Redis 创建流。

  2. 填写所需信息。

  3. 选择“创建”以启动 Redis 实例部署。

  4. 记下 Redis 实例的主机名,这可以从 Azure 中的“概述”部分中检索到。 主机名可能与以下示例相类似:xxxxxx.redis.cache.windows.net:6380

  5. 在“设置”下,导航到“访问密钥”以获取访问密钥。

  6. 使用 kubectl create secret generic redis 命令创建 Kubernetes 机密以存储 Redis 密码。

    kubectl create secret generic redis --from-literal=redis-password=<your-redis-password>
    

配置 Dapr 组件

创建存储后,需要将密钥添加到 Hello World 存储库部署目录中的 redis.yaml 文件。 可在此处了解详细信息。

  1. redisHost 值替换为你自己的 Redis 主地址。

  2. redisPassword 替换为你自己的机密。

  3. redisPassword 下面添加以下两行以通过 TLS 启用连接

    - name: redisPassword
        secretKeyRef:
          name: redis
          key: redis-password
    - name: enableTLS
      value: true
    

应用配置

  1. 使用 kubectl apply 命令应用 redis.yaml 文件。

    kubectl apply -f ./deploy/redis.yaml
    
  2. 使用 kubectl get components.redis 命令验证是否已成功配置状态存储。

    kubectl get components.redis -o yaml
    

    你看到的输出应类似于以下示例输出:

    component.dapr.io/statestore created
    

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

  1. 使用 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 应用,并与之通信。
  2. 使用 kubectl get svc 命令访问服务。

    kubectl get svc nodeapp
    
  3. 记下输出中的 EXTERNAL-IP

验证服务

  1. 使用 curlEXTERNAL-IP 调用服务。

    curl $EXTERNAL_IP/ports
    

    你看到的输出应类似于以下示例输出:

    {"DAPR_HTTP_PORT":"3500","DAPR_GRPC_PORT":"50001"}
    
  2. 使用 curl 向应用程序提交订单。

    curl --request POST --data "@sample.json" --header Content-Type:application/json $EXTERNAL_IP/neworder
    
  3. 通过使用 curl 进行请求来确认订单已持久化。

    curl $EXTERNAL_IP/order
    

    你看到的输出应类似于以下示例输出:

    { "orderId": "42" }
    

通过 Dapr 挎斗部署 Python 应用

  1. 导航到 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)
    
  2. 使用 kubectl apply 命令将 Python 应用部署到 Kubernetes 群集。

    kubectl apply -f ./deploy/python.yaml
    

    备注

    与前一个命令一样,需要等待部署完成,然后再继续执行后续步骤。 可通过以下命令执行此操作:

    kubectl rollout status deploy/pythonapp
    

观察消息并确认持久化

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

  1. 使用 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
    
  2. 使用 curl 调用 Node.js 应用的订单终结点以获取最新订单。

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

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

清理资源

  • 使用 az group delete 命令移除资源组、群集、命名空间和所有相关资源。

    az group delete --name MyResourceGroup
    

后续步骤