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

使用适用于 Azure Kubernetes 服务 (AKS) 的 Dapr 扩展部署和运行工作流

使用 Dapr 工作流,可以轻松地跨各种微服务协调消息传送、状态管理和故障处理逻辑。 Dapr 工作流可帮助你创建长时间运行、容错和有状态的应用程序。

在本指南中,你将使用提供的订单处理工作流示例来执行以下操作:

  • 为此示例创建 Azure 容器注册表和 AKS 群集。
  • 在 AKS 群集上安装 Dapr 扩展。
  • 将示例应用程序部署到 AKS。
  • 使用 HTTP API 调用启动和查询工作流实例。

工作流示例是一个 ASP.NET Core 项目,其中包含:

注意

Dapr 工作流目前是一项 beta 功能,也是可选择启用的自助功能。 Beta Dapr API 和组件“按原样”和“可用”提供,并且随着它们走向稳定状态而不断发展。 客户支持不涵盖 Beta API 和组件。

先决条件

设置环境

克隆示例项目

克隆示例工作流应用程序。

git clone https://github.com/Azure/dapr-workflows-aks-sample.git

导航到示例的根目录。

cd dapr-workflows-aks-sample

创建 Kubernetes 群集

创建用于保存 AKS 群集的资源组。

az group create --name myResourceGroup --location eastus

创建 AKS 群集。

az aks create --resource-group myResourceGroup --name myAKSCluster --node-count 2 --generate-ssh-keys 

确保 kubectl 已安装并指向 AKS 群集。 如果使用的是 Azure Cloud Shell,则 kubectl 已安装。

有关详细信息,请参阅部署 AKS 群集教程。

将应用程序部署到 AKS

在 AKS 群集上安装 Dapr

在 AKS 群集上安装 Dapr 扩展。 在开始之前,请确保已做好以下准备:

az k8s-extension create --cluster-type managedClusters --cluster-name myAKSCluster --resource-group myResourceGroup --name dapr --extension-type Microsoft.Dapr

验证是否已安装 Dapr:

kubectl get pods -A

部署 Redis Actor 状态存储组件

导航到示例分支版本中的 Deploy 目录:

cd Deploy

部署 Redis 组件:

helm repo add bitnami https://charts.bitnami.com/bitnami
helm install redis bitnami/redis
kubectl apply -f redis.yaml

运行应用程序

部署 Redis 后,将应用程序部署到 AKS:

kubectl apply -f deployment.yaml

公开 Dapr 挎斗和示例应用:

kubectl apply -f service.yaml
export APP_URL=$(kubectl get svc/workflows-sample -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export DAPR_URL=$(kubectl get svc/workflows-sample-dapr -o jsonpath='{.status.loadBalancer.ingress[0].ip}')

验证是否已导出上述命令:

echo $APP_URL
echo $DAPR_URL

启动工作流

将应用程序和 Dapr 部署到 AKS 群集的操作后,你现在可以启动和查询工作流实例。 通过对示例应用进行以下 API 调用,将项重新放入到清单中:

curl -X GET $APP_URL/stock/restock

启动工作流:

curl -i -X POST $DAPR_URL/v1.0-beta1/workflows/dapr/OrderProcessingWorkflow/start?instanceID=1234 \
  -H "Content-Type: application/json" \
  -d '{ "input" : {"Name": "Paperclips", "TotalCost": 99.95, "Quantity": 1}}'

预期输出:

HTTP/1.1 202 Accepted
Content-Type: application/json
Traceparent: 00-00000000000000000000000000000000-0000000000000000-00
Date: Tue, 23 Apr 2024 15:35:00 GMT
Content-Length: 21

检查工作流状态:

curl -i -X GET $DAPR_URL/v1.0-beta1/workflows/dapr/1234

预期输出:

HTTP/1.1 200 OK
Content-Type: application/json
Traceparent: 00-00000000000000000000000000000000-0000000000000000-00
Date: Tue, 23 Apr 2024 15:51:02 GMT
Content-Length: 580

{
  "instanceID":"1234",
  "workflowName":"OrderProcessingWorkflow",
  "createdAt":"2024-04-23T15:35:00.156714334Z",
  "lastUpdatedAt":"2024-04-23T15:35:00.176459055Z",
  "runtimeStatus":"COMPLETED",
  "dapr.workflow.input":"{ \"input\" : {\"Name\": \"Paperclips\", \"TotalCost\": 99.95, \"Quantity\": 1}}",
  "dapr.workflow.output":"{\"Processed\":true}"
}

请注意,工作流状态标记为已完成。

后续步骤