| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 13 天前 | ||
| 13 天前 | ||
| 20 天前 | ||
| 20 天前 | ||
| 13 天前 | ||
| 1 个月前 | ||
| 1 个月前 | ||
| 13 天前 | ||
| 20 天前 | ||
| 20 天前 | ||
| 1 个月前 |
MCO(众核抗干扰隔离与调度优化)端到端自动化测试
概述
本目录为 MCO(many-core-orchestrator)的 e2e 自动化测试,当前覆盖四类场景:
- Kata 部署阶段:Kata 自动化部署与节点预检。
- 指标采集分析阶段:mco-collector 与 mco-analyzer 后端集成测试。
- 调度插件 Helm 模板测试:Volcano 调度插件的 Helm template 渲染验证。
- 调度插件集群集成测试:调度插件 Filter/Score 逻辑与全链路部署验证。
基于 Ginkgo v2 + Gomega + kubernetes client-go + Helm CLI,遵循仓库 e2e/ 下统一的测试规范。
目录结构
many-core-orchestrator/
├── mco_suite_test.go # Suite 入口(BeforeSuite 初始化客户端/上下文)
├── helm_template_test.go # Kata Helm template 渲染测试(KATA-IT-001~004)
├── mco_test.go # Kata 集群级集成测试(KATA-IT-006/008~012)
├── collector_test.go # mco-collector 指标采集、上报、降级与 DFX 测试
├── analyzer_test.go # mco-analyzer 计算、CR 写入、metrics 与热更新测试
├── scheduler_helm_template_test.go # 调度插件 Helm template 渲染测试(SCHED-IT-001~005)
├── scheduler_filter_test.go # 调度插件 Filter/Score 测试(SCHED-IT-006~012)
├── scheduler_fullpath_test.go # 调度插件全链路测试(SCHED-IT-014~017)
├── utils/
│ ├── const.go # 常量(helm 配置、OCI 地址、标签键、RuntimeClass 名称)
│ └── mco_functions.go # 工具函数(helm 操作、CR 操作、Pod 创建/等待等)
└── README.md # 本文件
Chart 来源
Chart 已上传至远程 OCI 仓库,默认通过 OCI URL 安装:
oci://cr.openfuyao.cn/charts/many-core-orchestrator 版本 0.0.0-latest
代码中通过 GetChartPath() 返回 OCI URL,HelmInstallLocalChart 和 HelmTemplateLocal 自动检测 OCI 前缀并附加 --version 参数。如需覆盖:
MCO_CHART_PATH:设为本地路径或其他 OCI URLMCO_CHART_VERSION:覆盖 chart 版本号
标签体系
| 标签 | 含义 |
|---|---|
many-core-orchestrator |
特性级标签,本目录所有 Describe 均携带 |
helm-template |
Helm template 渲染测试,无需集群 |
virtual-machine |
可在虚拟机上运行的测试 |
physical-machine |
需要 KVM 物理机集群的测试 |
with-workload-cluster |
需要工作负载集群 |
scheduler |
调度插件相关测试 |
scheduler-filter |
调度插件 Filter 集成测试 |
scheduler-fullpath |
调度插件全链路集成测试 |
collector |
Collector 集成测试 |
analyzer |
Analyzer 集成测试 |
一、Kata 部署阶段
虚拟机可运行(标签 helm-template + virtual-machine)
仅做 helm template 本地渲染验证,不需要集群连接:
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| KATA-IT-001 | 默认值渲染——全量资源 | 检查 DaemonSet/ConfigMap/SA/CR/CRB/RuntimeClass/initContainer |
| KATA-IT-002 | 关闭 kata-deploy 子 chart | kata-deploy.enabled=false 后无 kata 相关资源 |
| KATA-IT-003 | 关闭 preflight | 无 initContainer、无 preflight ConfigMap、无 /dev/kvm volume |
| KATA-IT-004 | 禁用单个 shim | 禁用 qemu-runtime-rs 后无对应 RuntimeClass,其他 shim 不受影响 |
需要物理机(标签 physical-machine + with-workload-cluster)
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| KATA-IT-006 | 无 KVM 节点预检失败 | 检查 kata-ready=false 节点的 initContainer 日志含 fail;全 KVM 集群时 Skip |
| KATA-IT-007 | 混合节点预检 | 混合 KVM/非KVM 集群中,分别验证 kata-ready=true/false 节点的 initContainer 日志;非混合集群时 Skip |
| KATA-IT-008 | Helm 安装 kata-deploy | BeforeAll 中 helm install + 等待 DaemonSet Ready |
| KATA-IT-009 | RuntimeClass 注册验证 | 检查 kata-qemu/kata-clh 存在,handler 字段不为空 |
| KATA-IT-010 | Kata Pod 创建与运行 | 创建 runtimeClassName: kata-qemu 的 busybox Pod,验证 Running 且无错误事件 |
| KATA-IT-011 | Kata 运行时实际校验 | SSH 登录 Kata Pod 所在节点,检查 kata-runtime/kata-proxy/qemu 等进程,确认 Pod 实际运行在 Kata VM 中 |
| KATA-IT-012 | 卸载与资源清理 | helm uninstall 后 DaemonSet 消失,runc Pod 不受影响 |
Kata 阶段部署参数
KataPhaseHelmSets 自动注入:
--set collector.enabled=false
--set analyzer.enabled=false
--set mcoPlugin.enabled=false
二、指标采集分析阶段
Collector 用例(标签 collector + with-workload-cluster)
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| mco-collector_FIT_1 | Collector 部署与健康验证 | DaemonSet 副本、Pod Running/Ready、无重启、日志健康 |
| mco-collector_FIT_2 | Collector 采集核心宿主机指标 | /metrics 暴露 LLC、BIO、PSI、snapshot timestamp 等核心指标 |
| mco-collector_FIT_3 | Collector 按节点标签暴露指标 | 每个 Collector Pod 暴露的指标带有对应 node 标签 |
| mco-collector_FIT_4 | Collector 向 Analyzer 流式上报快照 | 重启 Collector Pod 后 gRPC 重连,snapshot 字段完整且间隔约 1s |
| mco-collector_FIT_6 | Collector 指标端点不依赖 Analyzer | Analyzer 缩容后 /metrics 仍可访问且 timestamp 持续递增 |
| mco-collector_FIT_7 | Collector 识别 PSI 可用路径 | PSI 可用节点的指标和日志为实际采样值 |
| mco-collector_FIT_8 | Collector 执行 PSI 不可用降级采集 | PSI 不可用节点的降级指标、日志和可用性状态 |
| mco-collector_DFX_1 | Collector 长时间断链本地缓存与恢复 | Analyzer 不可用 >60s,本地 JSONL 缓存写入,恢复后自动重连 |
| mco-collector_DFX_3 | Collector 权限最小化验证 | 去掉 SYS_ADMIN 后 bcc/perf 采集器降级,恢复后回到 ok |
Analyzer 用例(标签 analyzer + with-workload-cluster)
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| mco-analyzer_FIT_1 | Analyzer 部署与 CR 初始化 | Deployment/Pod/Service/gRPC/metrics 端口和 CR 初始化 |
| mco-analyzer_FIT_2 | Analyzer 识别缓存污染干扰 | 注入 MetricSnapshot,验证缓存污染检测和 CR 状态 |
| mco-analyzer_FIT_3 | Analyzer 识别 IO 队列拥塞干扰 | 注入高 BIO 延迟快照,验证 IO 拥塞检测和干扰等级 |
| mco-analyzer_FIT_4 | Analyzer 识别内存压力干扰 | 注入内存压力快照,验证内存压力检测和干扰等级 |
| mco-analyzer_FIT_5 | Analyzer 按权重计算干扰等级 | 权重计算、窗口平滑和单点毛刺数据处理 |
| mco-analyzer_FIT_6 | Analyzer 写入集群级 CR 状态 | CR status.nodes 包含 sequence、metrics、availability 等结构 |
| mco-analyzer_FIT_7 | Analyzer 重启后快速恢复 CR 更新 | 重启后旧数据保留并继续写入新 snapshot |
| mco-analyzer_FIT_8 | Analyzer 暴露计算产出指标 | /metrics 中干扰等级和 CR 更新相关指标 |
| mco-analyzer_FIT_9 | Analyzer 执行 PSI 不可用降级评估 | PSI 降级路径下 availability、降级值和检测结果 |
| mco-analyzer_FIT_10 | Analyzer 热更新 DetectionRuleConfig | 修改规则后 hash 更新、干扰等级变化并恢复默认 |
采集分析阶段部署参数
CollectorPhaseHelmSets 自动注入:
--set kata-deploy.enabled=false
--set mcoPlugin.enabled=false
三、调度插件测试
Helm 模板测试(标签 scheduler + helm-template + virtual-machine)
仅做 helm template 本地渲染验证,不需要集群连接:
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| SCHED-IT-001 | 默认全量渲染 | 包含 mco-volcano-scheduler Deployment(--plugins-dir)、ConfigMap、SA/CR/CRB |
| SCHED-IT-002 | 关闭 mcoPlugin | mcoPlugin.enabled=false 后无 MCO 调度器资源 |
| SCHED-IT-003 | 一站式安装模式 | 包含 Volcano 标准资源 + mco-volcano-scheduler,默认 scheduler 被禁用 |
| SCHED-IT-004 | 接入已有 Volcano 模式 | 不包含 Volcano CRD/admission/controllers,包含 mco-volcano-scheduler |
| SCHED-IT-005 | ConfigMap 自动生成 | tiers[0] 含 mco-plugin + priority/gang/conformance,tiers[1] 含 overcommit/drf/predicates |
Filter/Score 集成测试(标签 scheduler-filter + with-workload-cluster)
需要至少 2 个节点的集群,通过 kubectl patch 注入 CR 数据验证调度行为:
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| SCHED-IT-006 | 数据源不可用时降级调度 | 删除 CR 后 Pod 仍可正常调度,调度器不阻塞 |
| SCHED-IT-007 | Filter_Kata 双标签运行时检查 | 节点 A 缺少 kata-ready 标签被排除,Pod 调度到双标签节点 B |
| SCHED-IT-008 | Filter_PSI Memory Full 硬排除 | 节点 A psiMemoryFull=5.0 被排除,Pod 调度到节点 B |
| SCHED-IT-009 | Filter_PSI IO 硬排除 | 节点 A psiIoSome=30.0 被排除,Pod 调度到节点 B |
| SCHED-IT-010 | Filter_PSI 不可用时跳过约束 | 节点 A psiAvailable=false 时 PSI 约束被跳过,Pod 可调度到 A |
| SCHED-IT-011 | Score_干扰等级评分 | 节点 A interferenceLevel=0.2 得分高,Pod 优先调度到 A |
| SCHED-IT-012 | Score_数据不完整时中性分回退 | 节点 A status=PARTIAL 得中性分 50,Pod 调度到正常评分节点 B |
全链路集成测试(标签 scheduler-fullpath + with-workload-cluster)
Ordered 测试,按顺序执行安装→验证→卸载:
| 用例编号 | 用例名称 | 说明 |
|---|---|---|
| SCHED-IT-014 | Helm 安装部署 | helm install 成功,Pod Running,日志无 panic/fatal |
| SCHED-IT-015 | 调度器接管 | Volcano Job 由 mco-volcano-scheduler 正常调度 |
| SCHED-IT-016 | Filter/Score 决策日志验证 | 日志包含 filter/score 决策记录 |
| SCHED-IT-017 | 卸载与资源清理 | Deployment/ConfigMap/SA/ClusterRole/CRB 被正确清理 |
调度插件部署参数
SchedulerPhaseHelmSets 自动注入:
--set volcano.enabled=true
--set mcoPlugin.enabled=true
--set kata-deploy.enabled=false
--set collector.enabled=false
--set analyzer.enabled=false
环境配置
- 复制
e2e/.env.template为e2e/.env - 确保
KUBECONFIG指向集群的 kubeconfig(默认~/.kube/config) - 如需覆盖 chart 来源:
MCO_CHART_PATH:chart 路径或 OCI URL(默认oci://cr.openfuyao.cn/charts/many-core-orchestrator)MCO_CHART_VERSION:chart 版本号(默认0.0.0-latest)
运行测试
cd e2e
# Kata Helm template 渲染测试(虚拟机可跑)
ginkgo -v --label-filter="helm-template && virtual-machine" ./many-core-orchestrator
# Kata 物理机集群测试
ginkgo -v --label-filter="physical-machine" ./many-core-orchestrator
# Collector/Analyzer 集成测试
ginkgo -v --label-filter="collector || analyzer" ./many-core-orchestrator
# 调度插件 Helm template 渲染测试(虚拟机可跑)
ginkgo -v --label-filter="scheduler && helm-template" ./many-core-orchestrator
# 调度插件 Filter 集成测试(需集群)
ginkgo -v --label-filter="scheduler-filter" ./many-core-orchestrator
# 调度插件全链路集成测试(需集群)
ginkgo -v --label-filter="scheduler-fullpath" ./many-core-orchestrator
# 全部调度插件测试
ginkgo -v --label-filter="scheduler" ./many-core-orchestrator
# 全部测试
ginkgo -v ./many-core-orchestrator
# 跳过临时禁用的测试
ginkgo -v --skip-label="skip-temporarily" ./many-core-orchestrator