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

适用于 Azure Kubernetes 服务 (AKS) 和已启用 Arc 的 Kubernetes 的 Dapr 扩展

Dapr 是一个可移植的事件驱动型运行时,它简化了在云和边缘上运行的可复原、无状态和有状态应用程序的构建,并支持语言和开发框架的多样性。 通过应用挎斗体系结构的优势,Dapr 可帮助你应对构建微服务带来的挑战,并使你的代码与平台无关。 具体而言,它有助于解决服务相关问题:

  • 可靠且安全地调用其他服务
  • 使用 pub-sub 生成事件驱动型应用
  • 生成可在多个云服务和主机(例如,Kubernetes 与 VM)上移植的应用程序

通过使用 Dapr 扩展在 AKS 或已启用 Arc 的 Kubernetes 群集上预配 Dapr,可以省去下载 Dapr 工具和手动在 AKS 群集上安装和管理运行时的开销。 此外,该扩展通过简单的命令行参数提供针对所有本机 Dapr 配置功能的支持。

注意

如果计划在 Kubernetes 生产环境中安装 Dapr,请参阅适用于生产使用的 Dapr 准则文档页。

工作原理

Dapr 扩展使用 Azure CLI 在 AKS 或已启用 Arc 的 Kubernetes 群集上预配 Dapr 控制平面。 这将创建:

  • dapr-operator:管理 Dapr 的组件更新和 Kubernetes 服务终结点(状态存储、发布/订阅等)
  • dapr-sidecar-injector:将 Dapr 注入到批注的部署 Pod 中并添加环境变量 DAPR_HTTP_PORTDAPR_GRPC_PORT 使用户定义的应用程序轻松地与 Dapr 进行通信,而无需对 Dapr 端口值进行硬编码。
  • dapr-placement:仅用于执行组件。 创建将执行组件实例映射到 Pod 的映射表
  • dapr-sentry:管理服务之间的 mTLS 并充当证书颁发机构。 有关详细信息,请参阅安全概述

在群集上安装 Dapr 后,可以通过向部署中添加一些注释来开始使用 Dapr 构建基块 API 进行开发。 有关构建基块 API 以及如何最好地使用它们的更深入的概述,请参阅 Dapr 构建基块概述

警告

如果通过 AKS 或已启用 Arc 的 Kubernetes 扩展安装 Dapr,我们建议继续使用该扩展以供将来管理 Dapr,而不是 Dapr CLI。 将这两个工具组合使用会导致冲突,并导致意外的行为。

目前支持

Dapr 版本

Dapr 扩展支持因管理运行时的方式而异。

自托管
对于自托管运行时,Dapr 扩展支持:

自托管运行时需要手动升级才能保留在支持窗口中。 若要通过扩展升级 Dapr,请按照更新扩展实例说明

自动升级
启用自动升级可使 Dapr 扩展更新到最新的次要版本。 更新之间可能会遇到中断性变更。

组件

支持 Azure + 开源代码组件。 尽力支持 alpha 和 beta 组件。

云/区域

全球 Azure 云通过以下区域的 Arc支持而受到支持:

区域 AKS 支持 Arc for Kubernetes 支持
australiaeast ✔️ ✔️
australiasoutheast ✔️
canadacentral ✔️ ✔️
canadaeast ✔️ ✔️
centralindia ✔️ ✔️
centralus ✔️ ✔️
eastasia ✔️ ✔️
eastus ✔️ ✔️
eastus2 ✔️ ✔️
eastus2euap ✔️
francecentral ✔️ ✔️
germanywestcentral ✔️ ✔️
japaneast ✔️ ✔️
koreacentral ✔️ ✔️
northcentralus ✔️ ✔️
northeurope ✔️ ✔️
norwayeast ✔️
southafricanorth ✔️
southcentralus ✔️ ✔️
southeastasia ✔️ ✔️
swedencentral ✔️ ✔️
switzerlandnorth ✔️ ✔️
uksouth ✔️ ✔️
westcentralus ✔️ ✔️
westeurope ✔️ ✔️
westus ✔️ ✔️
westus2 ✔️ ✔️
westus3 ✔️ ✔️

先决条件

设置适用于群集扩展的 Azure CLI 扩展

将需要 k8s-extension Azure CLI 扩展。 运行以下命令进行安装:

az extension add --name k8s-extension

如果已安装 k8s-extension 扩展,你可使用以下命令将其更新到最新版本:

az extension update --name k8s-extension

注册 KubernetesConfiguration 服务提供程序

如果以前没有使用过群集扩展,则可能需要在订阅中注册服务提供程序。 可以使用 [az provider list][az-provider-list] 命令检查提供程序注册状态,如以下示例所示:

az provider list --query "[?contains(namespace,'Microsoft.KubernetesConfiguration')]" -o table

Microsoft.KubernetesConfiguration 提供程序应报告为“已注册”,如下面的示例输出所示:

Namespace                          RegistrationState    RegistrationPolicy
---------------------------------  -------------------  --------------------
Microsoft.KubernetesConfiguration  Registered           RegistrationRequired

如果提供程序显示为“未注册”,请使用 az provider register 注册提供程序,如下面的示例所示:

az provider register --namespace Microsoft.KubernetesConfiguration

创建扩展并在 AKS 或已启用 Arc 的 Kubernetes 群集上安装 Dapr

安装 Dapr 扩展时,请使用与群集类型对应的标志值:

  • AKS 群集--cluster-type managedClusters
  • 已启用 Arc 的 Kubernetes 群集--cluster-type connectedClusters

注意

如果在 AKS 群集上使用 Dapr OSS 并希望为 AKS 安装 Dapr 扩展,请详细阅读如何成功迁移到 Dapr 扩展

创建 Dapr 扩展,该扩展在 AKS 或已启用 Arc 的 Kubernetes 群集上安装 Dapr。 例如,对于 AKS 群集:

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

你可以通过指定 --auto-upgrade-minor-version 参数并将值设置为 true 来允许 Dapr 自动更新其次要版本:

--auto-upgrade-minor-version true

配置设置

扩展使你能够使用 --configuration-settings 参数来设置 Dapr 配置选项。 例如,若要将 Dapr 预配为已启用高可用性 (HA),请将 global.ha.enabled 参数设置为 true

az k8s-extension create --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension \
--extension-type Microsoft.Dapr \
--auto-upgrade-minor-version true \
--configuration-settings "global.ha.enabled=true" \
--configuration-settings "dapr_operator.replicaCount=2"

注意

如果配置设置是敏感的并且需要进行保护,例如证书相关的信息,请传递 --configuration-protected-settings 参数,将保护其值不会被读取。

如果未传递任何配置设置,Dapr 配置默认为:

  ha:
    enabled: true
    replicaCount: 3
    disruption:
      minimumAvailable: ""
      maximumUnavailable: "25%"
  prometheus:
    enabled: true
    port: 9090
  mtls:
    enabled: true
    workloadCertTTL: 24h
    allowedClockSkew: 15m

有关可用选项的列表,请参阅 Dapr 配置

面向特定 Dapr 版本

注意

Dapr 支持滚动窗口,仅包括当前版本和以前版本。 你需要负责保证这些受支持版本的最新状态。 如果使用的是较旧版本的 Dapr,则可能需要进行中间升级才能获得受支持的版本。

可使用相同的命令行参数安装特定版本的 Dapr 或回滚到以前的版本。 将 --auto-upgrade-minor-version 设置为 false 并将 --version 设置为想要安装的 Dapr 版本。 如果省略 version 参数,则扩展将安装最新版本的 Dapr。 例如,若要使用 Dapr X.X.X,请执行以下操作:

az k8s-extension create --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension \
--extension-type Microsoft.Dapr \
--auto-upgrade-minor-version false \
--version X.X.X

将扩展限制到某些节点

在某些配置中,你可能只需要在某些节点上运行 Dapr。 可以通过在扩展配置中传递 nodeSelector 来限制扩展。 如果所需的 nodeSelector 包含 .,则必须通过 shell 和扩展对其进行转义。 例如,以下配置会仅将 Dapr 安装到包含 topology.kubernetes.io/zone: "us-east-1c" 的节点:

az k8s-extension create --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension \
--extension-type Microsoft.Dapr \
--auto-upgrade-minor-version true \
--configuration-settings "global.ha.enabled=true" \
--configuration-settings "dapr_operator.replicaCount=2" \
--configuration-settings "global.nodeSelector.kubernetes\.io/zone: us-east-1c"

若要管理 OS 和体系结构,请使用 global.daprControlPlaneOsglobal.daprControlPlaneArch 配置的支持的版本

az k8s-extension create --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension \
--extension-type Microsoft.Dapr \
--auto-upgrade-minor-version true \
--configuration-settings "global.ha.enabled=true" \
--configuration-settings "dapr_operator.replicaCount=2" \
--configuration-settings "global.daprControlPlaneOs=linux” \
--configuration-settings "global.daprControlPlaneArch=amd64”

显示当前配置设置

使用 az k8s-extension show 命令显示当前的 Dapr 配置设置:

az k8s-extension show --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension

更新配置设置

重要

某些配置选项在创建后无法修改。 对这些选项的调整需要删除和重新创建扩展,适用于以下设置:

  • global.ha.*
  • dapr_placement.*

注意

可随时启用高可用性 (HA)。 但是,一旦启用,禁用它则需要删除和重新安装该扩展。 如果你不确定你的用例是否需要高可用性,我们建议最开始禁用该功能,从而最大限度地减少中断。

若要更新 Dapr 配置设置,请重新创建具有所需状态的扩展。 例如,假设我们之前已使用以下配置创建并安装了扩展:

az k8s-extension create --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension \
--extension-type Microsoft.Dapr \
--auto-upgrade-minor-version true \  
--configuration-settings "global.ha.enabled=true" \
--configuration-settings "dapr_operator.replicaCount=2" 

若要将 dapr_operator.replicaCount 从两个更新为三个,请使用以下命令:

az k8s-extension create --cluster-type managedClusters \
--cluster-name myAKSCluster \
--resource-group myResourceGroup \
--name myDaprExtension \
--extension-type Microsoft.Dapr \
--auto-upgrade-minor-version true \
--configuration-settings "global.ha.enabled=true" \
--configuration-settings "dapr_operator.replicaCount=3"

为 Azure Arc 本地的 Dapr 扩展设置出站代理

如果要将出站代理与 AKS 的 Dapr 扩展配合使用,可以执行以下操作:

  1. 使用 dapr.io/env 注释设置代理环境变量:
    • HTTP_PROXY
    • HTTPS_PROXY
    • NO_PROXY
  2. 在 sidecar 中安装代理证书

满足网络要求

AKS 和 Arc for Kubernetes 的 Dapr 扩展需要启用 https://:443 出站 URL 才能正常运行。 除了 https://mcr.microsoft.com/daprio 用于拉取 Dapr 项目的 URL 之外,请验证是否已包含 AKS 或 Arc for Kubernetes 所需的出站 URL

故障排除扩展错误

如果扩展无法创建或更新,请尝试 Dapr 扩展故障排除指南中的建议和解决方案。

对 Dapr 进行故障排除

通过常见的 Dapr 问题和解决方案指南对 Dapr 错误进行故障排除。

删除扩展

如果需要删除扩展并从 AKS 群集中删除 Dapr,可以使用以下命令:

az k8s-extension delete --resource-group myResourceGroup --cluster-name myAKSCluster --cluster-type managedClusters --name myDaprExtension

后续步骤