如何在本地 Kubernetes 集群构建并部署修改后的 Dapr 运行端到端测试?
2026/9/13 22:05:32 网站建设 项目流程

如何在本地 Kubernetes 集群构建并部署修改后的 Dapr 运行端到端测试?

【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr

你修改了 Dapr 的源码,想验证改动是否影响 sidecar 注入、pub/sub、actor 等核心行为。Dapr 仓库自带一套 e2e 测试框架:它会从你本地的构建产物打出 Docker 镜像,推送到你的容器镜像仓库,部署到本地 Kubernetes 集群,然后部署一批测试应用并调用 Dapr API 验证功能。本文按 E2E 测试指南 说明这条"构建 → 部署 → 跑测试"的完整路径,适用于已经按 开发环境文档 准备好工具链、并有本地集群(如 Minikube)的场景。

准备条件

按 设置 Dapr 开发环境 的要求准备:

  • Git、Docker(Linux 上需配置 Docker 免sudo运行,否则构建脚本无法工作);
  • Go 1.26.6 或更高版本;
  • Helm v3;
  • Make(Linux 安装build-essential,macOS 运行xcode-select --install,Windows 通过 Chocolatey 安装 MinGW 和 make);
  • 一个本地 Kubernetes 集群;
  • 一个容器镜像仓库账号:可以是 Docker Hub(需要创建 Docker Hub ID),也可以是 Azure Container Registry、GitHub Container Registry 等。

然后在 dapr 仓库根目录设置环境变量:

# 使用 Docker Hub 时: export DAPR_REGISTRY=docker.io/your_dockerhub_id # 也可以用其他镜像仓库,例如: # export DAPR_REGISTRY=myregistry.azurecr.io export DAPR_TAG=dev export DAPR_NAMESPACE=dapr-tests export DAPR_MTLS_ENABLED=true # 想给 daprd 容器开启 debug 日志时设置 # export DEBUG_LOGGING=true # 想针对 Windows 或 arm 的 Kubernetes 集群跑测试时设置 # export TARGET_OS=linux # export TARGET_ARCH=amd64 # 交叉编译时(在 MacOS/Windows 上构建、部署到 Linux Kubernetes 集群,或反过来) # export GOOS=linux # export GOARCH=amd64 # 想使用单个 `dapr` 镜像(而不是 sentry、injector、daprd 等独立镜像)时设置 # export ONLY_DAPR_IMAGE=true # 仅在 Minikube 环境设置这一项,非 Minikube 集群不要设置 export DAPR_TEST_ENV=minikube # 使用 Minikube 时,设置其 control plane 的 IP 地址 export MINIKUBE_NODE_IP=your_k8s_master_ip

其中your_dockerhub_id替换为你自己的 Docker Hub ID,your_k8s_master_ip替换为 Minikube control plane 的实际 IP(可用minikube ip查看)。如果测试应用镜像要推送到与DAPR_REGISTRY不同的仓库,还可以设置DAPR_TEST_REGISTRYDAPR_TEST_TAG。使用私有仓库拉取镜像时,用下面这条命令生成DAPR_TEST_REGISTRY_SECRET(把四个占位变量换成你的仓库地址和凭证):

DOCKER_REGISTRY="<url of the registry, such as myregistry.azurecr.io>" DOCKER_USERNAME="<your username>" DOCKER_PASSWORD="<your password>" DOCKER_EMAIL="<your email (leave empty if not required)>" export DAPR_TEST_REGISTRY_SECRET=$( kubectl create secret docker-registry --dry-run=client docker-regcred \ --docker-server="${DOCKER_REGISTRY}" \ --docker-username="${DOCKER_USERNAME}" \ --docker-password="${DOCKER_PASSWORD}" \ --docker-email=${DOCKER_EMAIL} \ -o json | \ jq -r '.data.".dockerconfigjson"' )

方式一:一条命令完成构建、部署和测试

如果集群里是干净环境,先卸载已有的 release。以下命令会删除DAPR_NAMESPACE下已有的 Dapr 及测试依赖,执行前确认DAPR_NAMESPACE已正确设置:

helm uninstall dapr dapr-kafka dapr-redis dapr-postgres -n $DAPR_NAMESPACE

再删除测试命名空间(该命令会执行kubectl delete namespace,删除整个命名空间内的资源):

make delete-test-namespace

注意文档特别提醒的顺序问题:必须先用helm uninstall卸载 release,再删除命名空间。如果反过来先删命名空间再重新部署 Dapr 控制面,sidecar injector 会因 "bad certificate" 失败;已经踩坑的集群可以用helm uninstall恢复。

然后从构建到跑完测试一步到位:

make e2e-build-deploy-run

这个目标在 tests/dapr_tests.mk 中定义为init-build-deploy + setup-test-components + build-e2e-app-all + push-e2e-app-all + test-e2e-all,其中init-build-deploy依次执行create-test-namespacesetup-3rd-party(安装 redis、kafka、zipkin、postgres 等 helm 依赖)、build-deploybuilddocker-pushdocker-deploy-k8s)。

方式二:分步执行,便于局部迭代

改动集中在某个环节(比如只改了测试应用或只重新编译了 runtime)时,用单独的目标更省时间。

创建命名空间并安装测试依赖

make create-test-namespace

为状态存储、pub/sub 和 bindings 安装 redis、kafka、postgres(依赖 Helm 仓库先初始化):

make setup-helm-init make setup-test-env-redis make setup-test-env-postgres # 这一步可能耗时几分钟;如果测试不用 bindings,可以跳过 kafka 安装 make setup-test-env-kafka

构建并部署本地修改的 Dapr

# 构建 Linux 二进制 make build-linux # 用 Linux 二进制构建 Docker 镜像 make docker-build # 推送镜像到你的 Docker Hub 仓库(需要先完成 docker login) make docker-push # 把 Dapr runtime 部署到你的集群 make docker-deploy-k8s

docker-deploy-k8s底层是 Makefile 中的helm upgrade --install,带--wait --timeout 5m0s,会阻塞到部署完成,并用DAPR_REGISTRYDAPR_TAGDAPR_NAMESPACEDAPR_MTLS_ENABLED等环境变量渲染 Helm chart。如果想关闭 mTLS,可以额外执行:

make setup-disable-mtls

注册测试用的组件配置

make setup-test-components

该目标把 tests/config 下的 state store、pubsub、secret store、bindings、subscription 等 YAML 应用到DAPR_TEST_NAMESPACE,结尾会输出kubectl get componentskubectl get configurations的结果,方便确认组件已注册。

构建并推送测试应用

# 构建 tests/apps/ 下所有 e2e 应用镜像 make build-e2e-app-all # 推送到镜像仓库 make push-e2e-app-all

运行端到端测试

# 运行全部 e2e 测试 make test-e2e-all

只跑其中一部分时,用DAPR_E2E_TEST指定测试名(多个用空格分隔),取值为tests/e2e目录下的文件夹名:

DAPR_E2E_TEST="actor_reminder" make test-e2e-all

test-e2e-all由 gotestsum 驱动,带-timeout 20m -p 3 -tags=e2e参数执行./tests/e2e/...hotreloadingschedulerjob这几个包与测试套件共享集群状态,会在第二轮单独串行执行(见 tests/dapr_tests.mk 中DAPR_E2E_SERIAL_PACKAGES的说明)。任意一轮失败整个目标都会以非零码退出,并生成test_report_e2e.jsontest_report_e2e.xml等报告文件。

验证部署与测试结果

判断改动是否生效、测试是否通过,可以看三类输出:

  1. 控制面 Pod 状态。部署完成后列出命名空间内的 Pod,确认dapr-placementdapr-operatordapr-sidecar-injector等都处于1/1 Running(命令形式见 开发指南 中的验证步骤,命名空间换成你的DAPR_NAMESPACE):

    kubectl get pod -n dapr-tests

    开发指南中给出的示例输出(文档示例,Pod 名称和 AGE 以你集群实际输出为准):

    NAME READY STATUS RESTARTS AGE dapr-operator-86cddcfcb7-v2zjp 1/1 Running 0 4d3h dapr-placement-5d6465f8d5-pz2qt 1/1 Running 0 4d3h dapr-sidecar-injector-dc489d7bc-k2h4q 1/1 Running 0 4d3h
  2. 组件注册结果:make setup-test-components结尾打印的kubectl get components/kubectl get configurations列表。

  3. 测试报告:make test-e2e-all退出码为 0 且 gotestsum 输出中没有失败用例;需要复查失败细节时看test_report_e2e.json/test_report_e2e.xml

清理本地环境

测试结束后,如果要彻底移除 Dapr、测试依赖和残留的 e2e 测试应用,先确认DAPR_NAMESPACE设置正确,再执行(这些命令会卸载 release、删除 zipkin 部署和整个命名空间):

helm uninstall dapr -n $DAPR_NAMESPACE || true helm uninstall dapr-kafka -n $DAPR_NAMESPACE || true helm uninstall dapr-redis -n $DAPR_NAMESPACE || true helm uninstall dapr-postgres -n $DAPR_NAMESPACE || true kubectl delete deployment dapr-zipkin -n $DAPR_NAMESPACE || true # 删除测试命名空间 make delete-test-namespace

本地的测试产物用make test-clean清理。注意它会删除本地文件:./tests/e2e/*/dist./tests/perf/*/dist以及test_report_*.json/test_report_*.xml,执行前确认没有还想留存的报告:

make test-clean

清理时同样保持"先helm uninstall、后删命名空间"的顺序,否则下次重新部署控制面时 sidecar injector 可能出现 "bad certificate" 故障。

相关文档

  • Running End-To-End Tests:本地环境、GitHub Actions、Azure AKS 与 tailscale 三种运行方式的完整说明
  • Write E2E test:如何新增自己的测试应用与测试驱动
  • Setting up Dapr development environment:工具链安装
  • tests/dapr_tests.mk 与 Makefile:各 make 目标的具体实现

【免费下载链接】daprDapr is a portable runtime for building distributed applications across cloud and edge, combining event-driven architecture with workflow orchestration.项目地址: https://gitcode.com/GitHub_Trending/da/dapr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询