在 Kubernetes 集群上部署 Dapr

按照以下步骤在 Kubernetes 上部署 Dapr。

Kubernetes 上设置 Dapr 时,您可以使用 Dapr CLI 或 Helm。

使用 Dapr CLI 安装

您可以使用 Dapr CLI 在 Kubernetes 集群上安装 Dapr。

前置条件

安装选项

您可以从官方 Helm chart 或私有 chart 安装 Dapr,使用自定义命名空间等。

从官方 Dapr Helm chart 安装 Dapr

-k 标志会在当前上下文的 Kubernetes 集群上初始化 Dapr。

  1. 通过检查 kubectl context (kubectl config get-contexts) 验证是否设置了正确的"目标"集群。

    • 您可以使用 kubectl config use-context <CONTEXT> 设置不同的上下文。
  2. 使用以下命令在集群上初始化 Dapr:

    dapr init -k
    

    预期输出

    ⌛  Making the jump to hyperspace...
    
    ✅  Deploying the Dapr control plane to your cluster...
    ✅  Success! Dapr has been installed to namespace dapr-system. To verify, run "dapr status -k" in your terminal. To get started, go here: https://aka.ms/dapr-getting-started
    
  3. 运行仪表板:

    dapr dashboard -k
    

    如果您在非默认命名空间中安装了 Dapr,请运行:

    dapr dashboard -k -n <your-namespace>
    

从官方 Dapr Helm chart 安装 Dapr(带开发标志)

添加 --dev 标志会在当前上下文的 Kubernetes 集群上初始化 Dapr,并额外部署 Redis 和 Zipkin。

步骤与从 Dapr Helm chart 安装类似,只需在 init 命令中添加 --dev 标志:

dapr init -k --dev

预期输出:

⌛  Making the jump to hyperspace...
ℹ️  Note: To install Dapr using Helm, see here: https://docs.dapr.io/getting-started/install-dapr-kubernetes/#install-with-helm-advanced

ℹ️  Container images will be pulled from Docker Hub
✅  Deploying the Dapr control plane with latest version to your cluster...
✅  Deploying the Dapr dashboard with latest version to your cluster...
✅  Deploying the Dapr Redis with latest version to your cluster...
✅  Deploying the Dapr Zipkin with latest version to your cluster...
ℹ️  Applying "statestore" component to Kubernetes "default" namespace.
ℹ️  Applying "pubsub" component to Kubernetes "default" namespace.
ℹ️  Applying "appconfig" zipkin configuration to Kubernetes "default" namespace.
✅  Success! Dapr has been installed to namespace dapr-system. To verify, run `dapr status -k' in your terminal. To get started, go here: https://aka.ms/dapr-getting-started

等待一小段时间(或使用 --wait 标志并指定等待时间),您可以检查 Redis 和 Zipkin 组件是否已部署到集群。

kubectl get pods --namespace default

预期输出:

NAME                              READY   STATUS    RESTARTS   AGE
dapr-dev-zipkin-bfb4b45bb-sttz7   1/1     Running   0          159m
dapr-dev-redis-master-0           1/1     Running   0          159m
dapr-dev-redis-replicas-0         1/1     Running   0          159m
dapr-dev-redis-replicas-1         1/1     Running   0          159m
dapr-dev-redis-replicas-2         1/1     Running   0          158m 

从私有 Dapr Helm chart 安装 Dapr

私有 Helm chart 安装 Dapr在以下情况下很有帮助:

  • 需要对 Dapr Helm chart 进行更细粒度的控制
  • 有自定义的 Dapr 部署
  • 从由您的组织管理和维护的可信注册表中拉取 Helm chart

设置以下参数以允许 dapr init -k 从配置的 Helm 仓库安装 Dapr 镜像。

export DAPR_HELM_REPO_URL="https://helm.custom-domain.com/dapr/dapr"
export DAPR_HELM_REPO_USERNAME="username_xxx"
export DAPR_HELM_REPO_PASSWORD="passwd_xxx"

以高可用模式安装

您可以在 dapr-system 命名空间中为每个控制平面 pod 运行三个副本,以适用于生产场景

dapr init -k --enable-ha=true

在自定义命名空间中安装

初始化 Dapr 时的默认命名空间是 dapr-system。您可以使用 -n 标志覆盖它。

dapr init -k -n mynamespace

禁用 mTLS

Dapr 默认使用 mTLS 初始化。您可以通过以下方式禁用它:

dapr init -k --enable-mtls=false

等待安装完成

您可以使用 --wait 标志等待安装完成部署。默认超时时间为 300 秒(5 分钟),但可以使用 --timeout 标志进行自定义。

dapr init -k --wait --timeout 600

使用 CLI 在 Kubernetes 上卸载 Dapr

在本地计算机上运行以下命令以卸载集群上的 Dapr:

dapr uninstall -k

使用 Helm 安装

您可以使用 Helm v3 chart 在 Kubernetes 上安装 Dapr。

重要提示: 最新的 Dapr Helm chart 不再支持 Helm v2。从 Helm v2 迁移到 Helm v3

前置条件

添加并安装 Dapr Helm chart

  1. 添加 Helm 仓库并更新:

    // 添加官方 Dapr Helm chart。
    helm repo add dapr https://dapr.github.io/helm-charts/
    // 或者添加私有 Dapr Helm chart。
    helm repo add dapr http://helm.custom-domain.com/dapr/dapr/ \
       --username=xxx --password=xxx
    helm repo update
    // 查看可用的 chart 版本
    helm search repo dapr --devel --versions
    
  2. dapr-system 命名空间中的集群上安装 Dapr chart。

    helm upgrade --install dapr dapr/dapr \
    --version=1.17 \
    --namespace dapr-system \
    --create-namespace \
    --wait
    

    要以高可用模式安装:

    helm upgrade --install dapr dapr/dapr \
    --version=1.17 \
    --namespace dapr-system \
    --create-namespace \
    --set global.ha.enabled=true \
    --wait
    

    要以高可用模式安装并独立于全局扩展选定的服务:

        helm upgrade --install dapr dapr/dapr \
     --version=1.17 \
     --namespace dapr-system \
     --create-namespace \
     --set global.ha.enabled=false \
     --set dapr_scheduler.ha=true \
     --set dapr_placement.ha=true \
     --wait
    

有关使用 Helm 安装和升级 Dapr 的更多信息,请参阅 Kubernetes 上生产就绪部署的指南

(可选)将 Dapr 仪表板作为控制平面的一部分安装

如果要安装 Dapr 仪表板,请使用此 Helm chart 并添加您选择的其他设置:

helm install dapr dapr/dapr-dashboard --namespace dapr-system

例如:

helm repo add dapr https://dapr.github.io/helm-charts/
helm repo update
kubectl create namespace dapr-system
# 安装 Dapr 仪表板
helm install dapr-dashboard dapr/dapr-dashboard --namespace dapr-system

验证安装

安装完成后,验证 dapr-operatordapr-placementdapr-sidecar-injectordapr-sentry pod 是否在 dapr-system 命名空间中运行:

kubectl get pods --namespace dapr-system
NAME                                     READY     STATUS    RESTARTS   AGE
dapr-dashboard-7bd6cbf5bf-xglsr          1/1       Running   0          40s
dapr-operator-7bd6cbf5bf-xglsr           1/1       Running   0          40s
dapr-placement-7f8f76778f-6vhl2          1/1       Running   0          40s
dapr-sidecar-injector-8555576b6f-29cqm   1/1       Running   0          40s
dapr-sentry-9435776c7f-8f7yd             1/1       Running   0          40s

在 Kubernetes 上卸载 Dapr

helm uninstall dapr --namespace dapr-system

更多信息

使用基于 Mariner 的镜像

在 Kubernetes 上拉取的默认容器镜像基于 distroless

或者,您可以使用基于 Mariner 2(最小 distroless)的 Dapr 容器镜像。Mariner,正式名称为 CBL-Mariner,是由 Microsoft 维护的免费开源 Linux 发行版和容器基础镜像。对于某些 Dapr 用户,利用基于 Mariner 的容器镜像可以帮助您满足合规性要求。

要为 Dapr 使用基于 Mariner 的镜像,您需要在 Docker 标签中添加 -mariner。例如,虽然 ghcr.io/dapr/dapr:latest 是基于 distroless 的 Docker 镜像,但 ghcr.io/dapr/dapr:latest-mariner 基于 Mariner。也可以使用特定版本的标签,例如 1.17-mariner

在 Dapr CLI 中,您可以使用 --image-variant 标志切换到使用基于 Mariner 的镜像。

dapr init -k --image-variant mariner

使用 Kubernetes 和 Helm,您可以通过设置 global.tag 选项并添加 -mariner 来使用基于 Mariner 的镜像。例如:

helm upgrade --install dapr dapr/dapr \
  --version=1.17 \
  --namespace dapr-system \
  --create-namespace \
  --set global.tag=1.17.7-mariner \
  --wait

相关链接