多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

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

如何在本地 Kubernetes 集群构建并部署修改后的 Dapr 运行端到端测试? 如何在本地 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、DockerLinux 上需配置 Docker 免sudo运行否则构建脚本无法工作Go 1.26.6 或更高版本Helm v3MakeLinux 安装build-essentialmacOS 运行xcode-select --installWindows 通过 Chocolatey 安装 MinGW 和 make一个本地 Kubernetes 集群一个容器镜像仓库账号可以是 Docker Hub需要创建 Docker Hub ID也可以是 Azure Container Registry、GitHub Container Registry 等。然后在 dapr 仓库根目录设置环境变量# 使用 Docker Hub 时 export DAPR_REGISTRYdocker.io/your_dockerhub_id # 也可以用其他镜像仓库例如 # export DAPR_REGISTRYmyregistry.azurecr.io export DAPR_TAGdev export DAPR_NAMESPACEdapr-tests export DAPR_MTLS_ENABLEDtrue # 想给 daprd 容器开启 debug 日志时设置 # export DEBUG_LOGGINGtrue # 想针对 Windows 或 arm 的 Kubernetes 集群跑测试时设置 # export TARGET_OSlinux # export TARGET_ARCHamd64 # 交叉编译时在 MacOS/Windows 上构建、部署到 Linux Kubernetes 集群或反过来 # export GOOSlinux # export GOARCHamd64 # 想使用单个 dapr 镜像而不是 sentry、injector、daprd 等独立镜像时设置 # export ONLY_DAPR_IMAGEtrue # 仅在 Minikube 环境设置这一项非 Minikube 集群不要设置 export DAPR_TEST_ENVminikube # 使用 Minikube 时设置其 control plane 的 IP 地址 export MINIKUBE_NODE_IPyour_k8s_master_ip其中your_dockerhub_id替换为你自己的 Docker Hub IDyour_k8s_master_ip替换为 Minikube control plane 的实际 IP可用minikube ip查看。如果测试应用镜像要推送到与DAPR_REGISTRY不同的仓库还可以设置DAPR_TEST_REGISTRY和DAPR_TEST_TAG。使用私有仓库拉取镜像时用下面这条命令生成DAPR_TEST_REGISTRY_SECRET把四个占位变量换成你的仓库地址和凭证DOCKER_REGISTRYurl of the registry, such as myregistry.azurecr.io DOCKER_USERNAMEyour username DOCKER_PASSWORDyour password DOCKER_EMAILyour email (leave empty if not required) export DAPR_TEST_REGISTRY_SECRET$( kubectl create secret docker-registry --dry-runclient 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-namespace、setup-3rd-party安装 redis、kafka、zipkin、postgres 等 helm 依赖、build-deploybuild、docker-push、docker-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-k8sdocker-deploy-k8s底层是 Makefile 中的helm upgrade --install带--wait --timeout 5m0s会阻塞到部署完成并用DAPR_REGISTRY、DAPR_TAG、DAPR_NAMESPACE、DAPR_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 components和kubectl 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_TESTactor_reminder make test-e2e-alltest-e2e-all由 gotestsum 驱动带-timeout 20m -p 3 -tagse2e参数执行./tests/e2e/...hotreloading、scheduler、job这几个包与测试套件共享集群状态会在第二轮单独串行执行见 tests/dapr_tests.mk 中DAPR_E2E_SERIAL_PACKAGES的说明。任意一轮失败整个目标都会以非零码退出并生成test_report_e2e.json、test_report_e2e.xml等报告文件。验证部署与测试结果判断改动是否生效、测试是否通过可以看三类输出控制面 Pod 状态。部署完成后列出命名空间内的 Pod确认dapr-placement、dapr-operator、dapr-sidecar-injector等都处于1/1 Running命令形式见 开发指南 中的验证步骤命名空间换成你的DAPR_NAMESPACEkubectl 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组件注册结果make setup-test-components结尾打印的kubectl get components/kubectl get configurations列表。测试报告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),仅供参考
返回列表