本文已发布一年以上。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。
SIG Node CI 子项目庆祝测试改进两周年
确保 SIG Node 上游代码的可靠性是一项持续的努力,需要许多贡献者在幕后付出大量努力。Kubernetes、基础操作系统、容器运行时和测试基础设施频繁发布,导致一个复杂的矩阵,需要关注和持续投入才能“保持正常运行”。2020 年 5 月,Kubernetes 节点特别兴趣小组(“SIG Node”)组织了一个新的子项目,用于节点相关代码和测试的持续集成 (CI)。自成立以来,SIG Node CI 子项目每周举行一次会议,甚至一个小时的时间通常都不足以完成所有错误、与测试相关的 PR 和问题的分类,并讨论子组内所有相关的正在进行的工作。
在过去的两年中,我们修复了阻止合并和阻止发布的测试,由于减少了测试波动,从而缩短了 Kubernetes 贡献者的拉取请求的合并时间。当我们开始时,Node 测试作业仅在 42% 的时间内通过,通过我们的努力,我们现在确保了一致的 >90% 的作业通过率。我们仅在 kubernetes/kubernetes 中就关闭了 144 个测试失败问题,并合并了 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 作业 通过,而 Ning Liao 建议围绕这项工作成立一个小组,并提出了 原始小组章程文档。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 月。 所有阻止合并和阻止发布的测试都通过了,有一些波动。但是,只有 42% 的 SIG Node 测试作业是绿色的,因为存在许多波动和失败的测试。
2020 年 10 月。 Amim Knabben 因其对子项目的贡献而成为 Kubernetes 组织成员。
2021 年 1 月。 在预提交和关键的定期作业通过后,该子项目讨论了其清理其余定期测试并确保它们在没有波动的情况下通过的目标。
Elana Hashman 加入了该子项目,在 Victor 离职后,她挺身而出帮助领导该项目。
2021 年 2 月。 Artyom Lukianov 因其对子项目的贡献而成为 Kubernetes 组织成员。
2021 年 8 月。 在 SIG Node 成功运行 bug 清理以清理其 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
- 赵瑞文
- 瑞安·菲利普斯
- 谢尔盖·坎哲列夫
- 斯凯勒·克拉克
- 斯瓦蒂·塞加尔
- 吴文俊
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 页面上找到有关该组的信息。我们在维护者跟踪会议中会提供小组更新,例如 2021 年欧洲 KubeCon + CloudNativeCon 和 2021 年北美 KubeCon + CloudNativeCon。加入我们,共同致力于保持 kubelet 和其他 SIG Node 组件的可靠性,并确保顺利且无意外的发布!