你当前正在访问 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 项目,其中包含:
Program.cs
文件,该文件包含应用的设置,包括工作流和工作流活动的注册。- 在
Workflows
目录中找到的工作流定义。 - 在
Activities
目录中找到的工作流活动定义。
注意
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}"
}
请注意,工作流状态标记为已完成。