
如何用 Kind 和源码构建的节点镜像运行 Kubernetes DRA e2e 测试【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes如果你想在本地跑一遍 Kubernetes 仓库中 Dynamic Resource AllocationDRA动态资源分配的 e2e 测试不能直接用现成的 Kind 基础镜像这些测试要求容器运行时支持 CDI而 Kind 默认的节点镜像不一定满足。test/e2e/dra/README.md给出的路径是先从 Kubernetes 源码树构建二进制再用这份源码树构建一个 Kind 节点镜像然后用 DRA 专用的kind.yaml拉起集群最后用 ginkgo 聚焦DynamicResourceAllocation特性运行 e2e 测试。完成这套流程后你会得到一个带 CDI 容器运行时、开启 DRA 相关 API 与 feature gate、并打开 DRA 组件详细日志的本地集群。准备条件按 test/e2e/dra/README.md 的说明需要满足以下条件容器运行时必须支持 CDI。文档给出的支持起点是CRI-O 自 1.23 版本支持 CDIContainerd 自 1.7 版本支持 CDI。要构建一个基于 Containerd 的 Kind 集群需要两样东西从 Kubernetes 源码树构建的二进制文件以及 Kind。从 Kind 0.20 版本起默认改用带 Containerd 1.7 的 worker-node 基础镜像。因此要么用 Kind 0.20 或更新的发布版二进制要么从最新的 main 分支源码构建 Kind。关于测试驱动有一个前提说明这套 e2e 测试并不测试任意 DRA 驱动的正确行为。它使用仓库内树的test/e2e/dra/test-driver但与常规部署不同——该驱动不会直接部署到集群里而是把与 kubelet 交互所需的 socket注册和动态资源分配代理进e2e.test二进制内部复用了 CSI mock 测试的工作。这样做的好处是不需要为测试驱动单独准备镜像且 e2e 测试对所有 gRPC 调用有完全的控制权可用于错误注入和调用检查。第一步从源码构建 Kubernetes 二进制在 Kubernetes 源码树根目录执行$ makemake等价于make all构建全部代码可执行文件输出到_output/bin目录。这一步必须在构建 Kind 节点镜像之前完成因为节点镜像会以当前源码树为输入。第二步构建 Kind 节点镜像构建完 Kubernetes 之后仍要在 Kubernetes 源码树根目录执行$ kind build node-image --image dra/node:latest $(pwd)这里$(pwd)是 shell 展开的当前目录路径即源码树根目录Kind 会把该目录中的源码构建成名为dra/node:latest的节点镜像。第三步创建 Kind 集群$ kind create cluster --config test/e2e/dra/kind.yaml --image dra/node:latest--image指向第二步构建的镜像--config使用仓库中的 test/e2e/dra/kind.yaml。这个配置文件为 DRA 测试做了四件事理解它们有助于排查问题开启 CDIcontainerdConfigPatch通过[plugins.io.containerd.grpc.v1.cri] enable_cdi true打开 containerd 的 CDI 支持这是 DRA 场景的硬性前提。注册资源 API 版本runtimeConfig打开resource.k8s.io/v1alpha3、resource.k8s.io/v1beta1、resource.k8s.io/v1beta2以及scheduling.k8s.io/v1beta1。详细日志为排查 DRA 问题配置里把 scheduler 的日志级别设为v5并叠加vmoduleallocator*6,pools*6,dynamicresources6,allocateddevices6,dra_manager6,extendeddynamicresources6覆盖 DRA 调度器插件相关包controller-manager 的vmodulecontroller6对应 ResourceClaim 控制器kubelet 设为v5。文件同时包含 kubeadmv1beta4与v1beta3两套配置变体注释说明是为了兼容不同版本 Kind 的切换。feature gate末尾的featureGates开启DynamicResourceAllocation: true注释说对 n-3 版本对 kubelet 1.33 的测试仍需要只在 1.34 上测试后可移除和NodeLogQuery: truen-3/2/1 测试需要只在 ≥ 1.36 上测试后可移除。注意文件内注释强调feature gate 必须是这个 YAML 的最后一个条目。部分 Prow job 会在这个基础上追加 gate文档给出的写法是# 文档示例some feature 替换为你要追加的 feature gate 名称 --config (cat test/e2e/dra/kind.yaml; echo some feature: true)第四步构建 ginkgo 并运行 DRA e2e 测试先构建 ginkgo$ make ginkgo然后在源码树根目录运行聚焦 DRA 特性的 e2e 测试$ KUBECONFIG~/.kube/config _output/bin/ginkgo -p -v -focusFeature:DynamicResourceAllocation ./test/e2e参数含义-p并行执行-v输出每个 spec 的详细过程-focusFeature:DynamicResourceAllocation只运行打了 DRA 特性标签的测试./test/e2e是测试包路径。KUBECONFIG指向集群的 kubeconfig按文档使用默认的~/.kube/config。测试套件本身即是验证手段ginkgo 会逐个报告 DRA 相关 spec 的执行结果-v输出用于定位失败的 spec如果某个 spec 失败第三步中开启的 scheduler / controller-manager / kubelet 详细日志就是文档为 DRA 排查配置的诊断信息。限制与边界这套测试不覆盖任意 DRA 驱动的正确行为只验证 Kubernetes 侧的 DRA 支持驱动是仓库内树的测试驱动。测试驱动没有包含它的容器镜像因此无法部署到普通集群上这也是整个流程必须用代理进e2e.test的驱动、并用源码构建节点镜像的原因见 test/e2e/dra/test-driver/README.md。集群配置文件 test/e2e/dra/kind.yaml 中 feature gate 必须保持为 YAML 末尾条目自行修改该文件时不要破坏这一顺序。构建目标定义见 Makefilemake与make ginkgo均通过hack/make-rules/build.sh完成产物位于_output/bin。【免费下载链接】kubernetesProduction-Grade Container Scheduling and Management项目地址: https://gitcode.com/GitHub_Trending/kuber/kubernetes创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考