如何用 ginkgo-e2e.sh 在测试集群上运行 Kubernetes e2e 测试

如何用 ginkgo-e2e.sh 在测试集群上运行 Kubernetes e2e 测试 如何用 ginkgo-e2e.sh 在测试集群上运行 Kubernetes e2e 测试【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes如果你要在自己的测试集群上运行 Kubernetes 仓库的集群级端到端测试test/e2e目录下的测试套件标准入口是 hack/ginkgo-e2e.sh。该脚本的头部注释明确其用途在集群上运行 e2e 测试默认面向 Google Cloud Platform 的测试集群。使用它的前提有两个一是在本地构建出ginkgoCLI 和e2e.test测试二进制二是有一个可通过 kubeconfig 访问的测试集群。下面给出从构建二进制到核对结果的完整操作路径。构建测试二进制ginkgo 与 e2e.test脚本启动时通过kube::util::find-binary定位这两个二进制见 hack/ginkgo-e2e.sh查找位置按顺序包括_output/bin/、_output/dockerized/bin/platform/、_output/local/bin/platform/、_output/local/go/bin/等构建输出目录最后回退到$PATH查找逻辑见 hack/lib/util.sh。因此你需要先把它们构建出来# 构建 ginkgo CLIMakefile 中显式定义的目标 make ginkgo # 构建 e2e 测试二进制 make WHATtest/e2e/e2e.test构建规则make ginkgo是 Makefile 中单独定义的目标make WHATtest/e2e/e2e.test走all目标hack/make-rules/build.sh $(WHAT)test/e2e/e2e.test本身就在仓库的测试构建目标列表中见 hack/lib/golang.sh。构建产物会放到_output/bin下脚本随后会自动找到它们。如果你打算用调试器运行测试见下文需要用 Makefile 文档中说明的DBG1保留调试信息make DBG1 WHATtest/e2e/e2e.testMakefile 对DBG的说明DBG1表示关闭优化、不剥离调试信息供 delve 这类调试工具使用Makefile。准备测试集群两条路径脚本对集群的准备方式取决于是否设置KUBERNETES_CONFORMANCE_TEST对应两种使用场景。路径 A使用 kube-up 创建的云集群默认路径不设置KUBERNETES_CONFORMANCE_TEST时脚本会执行 provider 专属的prepare-e2e和detect-masterhack/ginkgo-e2e.sh。以KUBERNETES_PROVIDERgce为例prepare-e2e在 GCE provider 中就是detect-projectcluster/gce/util.shdetect-master会用gcloud compute addresses describe ${MASTER_NAME}-ip查找 master 地址查不到时脚本退出并提示Could not detect Kubernetes master node. Make sure youve launched a cluster with kube-up.shcluster/gce/util.sh。也就是说这条路径要求测试集群是按cluster/kube-up.sh流程创建的脚本自身source了 cluster/kube-util.sh 来获取各 provider 函数。路径 B针对已有集群运行conformance 模式设置KUBERNETES_CONFORMANCE_TEST后脚本跳过云资源准备改为直接从 kubeconfig 读取集群地址hack/ginkgo-e2e.shKUBERNETES_CONFORMANCE_TEST1 hack/ginkgo-e2e.sh此时KUBERNETES_PROVIDER取KUBERNETES_CONFORMANCE_PROVIDER的值未设置时默认为skeletoncluster/skeleton/util.sh 提供该 provider 的实现。集群地址取自 kubeconfig 当前 context脚本用cluster/kubectl.sh config view解析 current-context 对应的 cluster server 地址也可以用KUBE_CONTEXT指定其他 contexthack/ginkgo-e2e.sh。kubeconfig 文件默认是${HOME}/.kube/configDEFAULT_KUBECONFIG定义于 cluster/common.sh可通过KUBECONFIG环境变量覆盖。注意一旦传了--kubeconfig脚本组装的--host参数会被测试套件忽略实际使用的 host 以 kubeconfig 为准hack/ginkgo-e2e.sh 注释明确说明这一点。运行 hack/ginkgo-e2e.sh最短调用形式KUBERNETES_PROVIDERgce hack/ginkgo-e2e.sh脚本末尾会把命令行附加参数原样转发给e2e.test测试套件hack/ginkgo-e2e.sh 中${} 也可以用KUBE_E2E_TEST_ARGS以空格分隔的形式追加测试参数hack/ginkgo-e2e.sh。以下是脚本内定义的关键环境变量及其默认值均来自脚本注释按需设置环境变量默认值作用GINKGO_PARALLELn设为y时并行执行无 race 检测时--nodes25KUBE_RACE-race时降为--nodes10GINKGO_PARALLEL_NODES未设置显式指定并行节点数优先于GINKGO_PARALLEL的默认值GINKGO_TIMEOUT24hginkgo 整体超时脚本注释说明 V2 默认降到了 1h此处手动设回 24h 以兼容旧行为GINKGO_UNTIL_IT_FAILS未设置设为true时追加--until-it-failstrue重复运行直到失败GINKGO_SILENCE_SKIPSy设为n可在输出中看到每个被跳过测试的S字符GINKGO_POLL_PROGRESS_AFTER/GINKGO_POLL_PROGRESS_INTERVAL60m/5m长时运行的进度汇报时机与间隔KUBE_E2E_TEST_ARGS未设置追加给 e2e.test 的额外参数空格分隔E2E_REPORT_DIR/E2E_REPORT_PREFIX未设置报告输出目录与前缀见下一节CI未设置设为true时显示最终命令、强制换行、启用 SIGTERM 进度汇报E2E_TEST_DEBUG_TOOL未设置delve或gdb用调试器运行 e2e.test要求二进制以DBG1构建调试技巧设置CItrue会触发set -x把最终执行的 ginkgo 命令完整打印出来便于核对参数拼装结果hack/ginkgo-e2e.sh。核对结果与定位问题退出码脚本启用set -o errexit并waitginkgo 进程ginkgo 以非零退出测试失败时脚本随之失败可以直接在 CI 中依据退出码判断结果。测试报告设置E2E_REPORT_DIR后脚本会以--report-dir传入并在报告中生成--report-complete-ginkgoGinkgo JSON 格式与--report-complete-junitJUnit XML两种完整结果转储输出到report-dir/ginkgo/下未设置--report-dir时这两个报告被忽略hack/ginkgo-e2e.sh。进度汇报超过--poll-progress-after默认 60 分钟未结束时ginkgo 每 5 分钟汇报一次进度。如果 Prow 之类的环境因超时向进程组发送 SIGTERM 而拿不到当前运行测试的信息可设置CItrue或GINKGO_PROGRESS_REPORT_ON_SIGTERMtrue脚本会捕获信号并让 ginkgo 输出最终进度手动运行时也可以用killall -USR1 e2e.test触发同样的进度汇报而不终止测试hack/ginkgo-e2e.sh。调试执行E2E_TEST_DEBUG_TOOLdelve或gdb会让脚本改用dlv exec/gdb启动 e2e.test前提是二进制以make DBG1 WHATtest/e2e/e2e.test构建否则调试信息已被剥离hack/ginkgo-e2e.sh、Makefile。边界与限制--host与 kubeconfig 的关系使用--kubeconfig时--host被忽略host 以 kubeconfig 为准不要因为设置了KUBE_MASTER_URL而误以为它生效。conformance 固定种子设置了CONFORMANCE_TEST_SKIP_REGEX时脚本会追加--skip该值并固定--seed1436380640保证 conformance 结果可复现hack/ginkgo-e2e.sh。Azure provider要求提供CLOUD_CONFIG否则脚本直接退出并提示Missing azure cloud confighack/ginkgo-e2e.sh。GCE provider 检测失败如果detect-master找不到${MASTER_NAME}-ip地址脚本按上文引用的报错退出解决方式就是确认集群确实由kube-up.sh流程创建。不要与 node e2e 混淆Makefile 中的make test-e2e-nodeMakefile运行的是节点级测试套件test/e2e_node由 hack/make-rules/test-e2e-node.sh 驱动与本文的hack/ginkgo-e2e.sh集群级test/e2e套件是两套不同流程。测试用例本身的组织方式按 SIG 划分目录、SIGDescribe 标注见 test/e2e/README.md需要定位某个失败用例属于哪个 SIG 时可作为参考。【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考