在 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
    

    预期输出

    ⌛  正在初始化...
    
    ✅  正在将 Dapr 控制平面部署到集群中...
    ✅  成功!Dapr 已安装到命名空间 dapr-system。要验证,请在终端中运行 "dapr status -k"。要开始,请访问此处: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

预期输出:

⌛  正在初始化...
ℹ️  注意:要使用 Helm 安装 Dapr,请参见此处:https://docs.dapr.io/getting-started/install-dapr-kubernetes/#install-with-helm-advanced

ℹ️  容器镜像将从 Docker Hub 拉取
✅  正在将最新版本的 Dapr 控制平面部署到集群中...
✅  正在将最新版本的 Dapr 仪表板部署到集群中...
✅  正在将最新版本的 Dapr Redis 部署到集群中...
✅  正在将最新版本的 Dapr Zipkin 部署到集群中...
ℹ️  正在将 "statestore" 组件应用到 Kubernetes "default" 命名空间。
ℹ️  正在将 "pubsub" 组件应用到 Kubernetes "default" 命名空间。
ℹ️  正在将 "appconfig" zipkin 配置应用到 Kubernetes "default" 命名空间。
✅  成功!Dapr 已安装到命名空间 dapr-system。要验证,请在终端中运行 `dapr status -k`。要开始,请访问此处: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.14 \
    --namespace dapr-system \
    --create-namespace \
    --wait
    

    要在高可用模式下安装:

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

    要在高可用模式下安装并独立于全局缩放选择服务:

        helm upgrade --install dapr dapr/dapr \
     --version=1.14 \
     --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,是一个由微软维护的免费开源 Linux 发行版和容器基础镜像。对于一些 Dapr 用户,利用基于 Mariner 的容器镜像可以帮助你满足合规要求。

要使用基于 Mariner 的 Dapr 镜像,你需要在 Docker 标签中添加 -mariner。例如,ghcr.io/dapr/dapr:latest 是基于 distroless 的 Docker 镜像,而 ghcr.io/dapr/dapr:latest-mariner 是基于 Mariner 的。也有固定到特定版本的标签可用,例如 1.14-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.14 \
  --namespace dapr-system \
  --create-namespace \
  --set global.tag=1.14.4-mariner \
  --wait

相关链接