本文发表于一年多前。旧文章可能包含过时内容。请检查页面中的信息自发布以来是否已变得不正确。
SIG Node CI 子项目庆祝测试改进两周年
确保 SIG Node 上游代码的可靠性是一项持续的努力,需要许多贡献者在幕后付出大量努力。Kubernetes、基础操作系统、容器运行时和测试基础设施的频繁发布导致了一个复杂的矩阵,这需要关注和持续投资才能“保持运行”。2020 年 5 月,Kubernetes 节点特殊兴趣小组(“SIG Node”)为节点相关代码和测试组织了一个新的持续集成(CI)子项目。自成立以来,SIG Node CI 子项目每周都会举行会议,甚至一整小时的时间通常也不足以完成所有错误、测试相关 PR 和问题的分类,并讨论该小组内所有相关的正在进行的工作。
在过去的两年里,我们修复了阻止合并和阻止发布的测试,由于减少了测试的片状性,缩短了 Kubernetes 贡献者拉取请求的合并时间。刚开始时,Node 测试作业的通过率只有 42%,通过我们的努力,现在我们确保了稳定的 >90% 的作业通过率。我们关闭了 144 个测试失败问题,并仅在 kubernetes/kubernetes 中合并了 176 个拉取请求。我们还帮助子项目参与者提升了 Kubernetes 贡献者阶梯,新增了 3 名组织成员、6 名新评审员和 2 名新批准人。
Node CI 子项目是帮助新贡献者开始使用 SIG Node 的一个容易入门的第一站。新贡献者解决高影响力的错误和测试修复的门槛很低,尽管贡献者要爬完整个贡献者阶梯还有很长的路要走:花了超过一年的时间才为该小组建立了两个新的批准人。为 Kubernetes 节点及其测试基础设施提供动力的所有不同组件的复杂性,要求开发人员在很长一段时间内持续投入,才能深入理解整个系统,无论是在高层次还是低层次的细节。
然而,我们有几位固定贡献者参加会议;我们的评审员和批准人池仍然很小。我们的目标是继续增加贡献者,以确保工作的可持续分配,而不仅仅是落在少数关键批准人身上。
SIG 内部子项目是如何形成、运作和工作的,这并不总是显而易见的。每个子项目都对其赞助的 SIG 独一无二,并根据该小组旨在支持的项目进行定制。作为一个欢迎了许多首次 SIG Node 贡献者的团队,我们想分享过去两年的一些细节和成就,帮助揭开我们内部运作的神秘面纱,并庆祝所有敬业贡献者的辛勤工作!
时间线
2020 年 5 月。SIG Node CI 小组于 2020 年 5 月 11 日成立,有超过 30 名志愿者报名参加,旨在改善 SIG Node CI 信号和整体可观察性。Victor Pickard 专注于让 testgrid 作业通过,当时宁廖建议围绕这项工作成立一个小组,并提出了 原始小组章程文件。SIG Node 主席赞助了小组的创建,Victor 担任子项目负责人。Sergey Kanzhelev 不久后加入 Victor 担任联合负责人。
在启动会议上,我们讨论了首先要重点修复哪些测试,并讨论了阻止合并和阻止发布的测试,其中许多测试由于基础设施问题或有缺陷的测试代码而失败。
该子项目启动了每周一小时的会议,讨论正在进行的工作和分类。
2020 年 6 月。 Morgan Bauer、Karan Goel 和 Jorge Alarcon Ochoa 因其贡献被认定为 SIG Node CI 小组的评审员,对子项目的早期阶段提供了重要帮助。David Porter 和 Roy Yang 也加入了 SIG 测试失败 GitHub 团队。
2020 年 8 月。 所有阻止合并和阻止发布的测试都通过了,但有一些不稳定现象。然而,所有 SIG Node 测试作业中只有 42% 是绿色的,因为有许多不稳定和失败的测试。
2020 年 10 月。 Amim Knabben 因对子项目的贡献成为 Kubernetes 组织成员。
2021 年 1 月。 随着健康的预提交和关键定期作业通过,子项目讨论了清理其余定期测试并确保它们无故障通过的目标。
Elana Hashman 加入了该子项目,在 Victor 离开后主动帮助领导该项目。
2021 年 2 月。 Artyom Lukianov 因对子项目的贡献成为 Kubernetes 组织成员。
2021 年 8 月。 在 SIG Node 成功运行 bug scrub 清理其积压的 bug 后,会议范围扩大到包括 bug 分类,以提高整体可靠性,在问题影响 CI 信号之前预测问题。
子项目负责人 Elana Hashman 和 Sergey Kanzhelev 都被 SIG Node 和 SIG Testing 认可为所有节点测试代码的批准人。
2021 年 9 月。 在 Francesco Romani 主导的 1.22 版本中串行测试取得了显著的去片状化进展后,子项目设定了在 1.23 版本发布日期前让串行作业完全通过的目标。
Mike Miranda 因对子项目的贡献成为 Kubernetes 组织成员。
2021 年 11 月。 整个 2021 年,SIG Node 没有出现合并或发布阻塞的测试失败。许多过去版本中的不稳定测试在完全清理后从发布阻塞仪表板中移除。
Danielle Lancashire 被认可为 SIG Node 子小组的测试代码评审员。
最终的节点串行测试已完全修复。串行测试包含许多具有破坏性和耗时的测试,这些测试容易出现片状性且难以排查。在 1.23 版本冻结之前,最后的串行测试已修复,并且作业通过时没有片状性。
1.23 版本因测试质量和 CI 信号而受到特别表扬。SIG Node CI 子项目很自豪能够为如此高质量的发布做出贡献,部分原因在于我们在 Node 及其他方面识别和修复片状性所做的努力。
2021 年 12 月。 在 1.23 版本发布时,估计有 90% 的测试作业通过(高于 2020 年 8 月的 42%)。
Dockershim 代码从 Kubernetes 中移除。这影响了 SIG Node 近一半的测试作业,SIG Node CI 子项目迅速做出反应并重新定位了所有测试。SIG Node 是第一个完成 Dockershim 测试迁移的 SIG,为其他受影响的 SIG 提供了示例。绝大多数新作业在引入时都通过了,无需进一步修复。从 Kubernetes 移除 Dockershim 的工作仍在进行中。随着我们发现更多对 Dockershim 的依赖,Dockershim 移除仍然存在一些问题,但我们计划在 1.24 版本发布时稳定所有测试作业。
统计数据
过去几个月我们定期会议的出席者和子项目参与者
- Aditi Sharma
- Artyom Lukianov
- Arnaud Meukam
- Danielle Lancashire
- David Porter
- Davanum Srinivas
- Elana Hashman
- Francesco Romani
- Matthias Bertschy
- Mike Miranda
- Paco Xu
- Peter Hunt
- Ruiwen Zhao
- Ryan Phillips
- Sergey Kanzhelev
- Skyler Clark
- Swati Sehgal
- Wenjun Wu
kubernetes/test-infra 源代码仓库包含测试定义。仅该仓库中 Node PR 的数量
CI 看板上已分类的问题和 PR(包括从子小组范围外分类)
未来
仅仅“保持运行”是一项艰巨的任务,我们致力于改善这种体验。我们正在努力简化 SIG Node 的分类和审查流程。
具体来说,我们正在努力改进测试的组织、命名和跟踪
- https://github.com/kubernetes/enhancements/pull/3042
- https://github.com/kubernetes/test-infra/issues/24641
- Kubernetes SIG-Node CI Testgrid 跟踪器
我们还在不断改进测试的可调试性和去片状化。
如果您对此感兴趣,我们非常欢迎您加入我们!调试测试失败有很多值得学习的地方,它将帮助您熟悉 SIG Node 维护的代码。
您始终可以在 SIG Node 页面找到有关该组的信息。我们会在维护者专题会议上提供小组更新,例如 KubeCon + CloudNativeCon Europe 2021 和 KubeCon + CloudNative North America 2021。加入我们的使命,保持 kubelet 和其他 SIG Node 组件的可靠性,并确保平稳顺利的发布!