本文已超过一年。较旧的文章可能包含过时内容。请检查页面信息自发布以来是否已失效。
SIG Node CI 子项目庆祝两年来的测试改进
确保 SIG Node 上游代码的可靠性是一项持续的努力,需要许多贡献者在幕后付出大量精力。Kubernetes、基础操作系统、容器运行时和测试基础设施频繁发布,导致形成一个复杂的矩阵,需要持续关注和投入才能“保持运转”。2020 年 5 月,Kubernetes 节点特别兴趣小组("SIG Node")组织了一个新的子项目,专门负责与节点相关的代码和测试的持续集成(CI)。自成立以来,SIG Node CI 子项目每周都举行会议,但即使一个小时也常常不足以完成所有 bug、测试相关的 PR 和 issue 的分类,并讨论小组内所有相关的持续工作。
在过去的两年里,我们修复了阻塞合并和阻塞发布的测试,由于减少了测试不稳定现象(flakes),缩短了合并 Kubernetes 贡献者拉取请求(pull requests)所需的时间。当我们开始时,节点测试作业只有 42% 的通过率,通过我们的努力,现在我们确保了稳定的 >90% 作业通过率。我们仅在 kubernetes/kubernetes 中就关闭了 144 个测试失败问题,合并了 176 个拉取请求。我们还帮助子项目参与者在 Kubernetes 贡献者阶梯上晋升,产生了 3 名新的组织成员、6 名新的 Reviewer 和 2 名新的 Approver。
Node CI 子项目是帮助新贡献者入门 SIG Node 的一个易于上手的起点。新贡献者解决高影响力的 bug 和测试修复的门槛较低,尽管要爬升整个贡献者阶梯还有很长的路要走:该小组花费了一年多时间才产生了两位新的 Approver。构成 Kubernetes 节点及其测试基础设施的各种组件的复杂性要求开发人员长期持续投入,才能深入理解整个系统,包括高层和底层细节。
我们的会议有几位固定贡献者,但是,我们的 Reviewer 和 Approver 人数仍然很少。我们的目标是继续培养贡献者,以确保工作的可持续分配,避免工作仅落到少数关键 Approver 身上。
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 担任联合负责人。
在启动会议上,我们讨论了首先要重点修复哪些测试,并讨论了阻塞合并和阻塞发布的测试,其中许多测试由于基础设施问题或有 bug 的测试代码而失败。
子项目启动了每周一小时的会议,讨论正在进行的工作和进行分类。
2020 年 6 月。 Morgan Bauer、Karan Goel 和 Jorge Alarcon Ochoa 因其贡献被认可为 SIG Node CI 小组的 Reviewer,对子项目早期阶段提供了显著帮助。David Porter 和 Roy Yang 也加入了 SIG test failures GitHub 团队。
2020 年 8 月。 所有阻塞合并和阻塞发布的测试均已通过,但仍有一些不稳定现象(flakes)。然而,所有 SIG Node 测试作业中只有 42% 是绿色的,因为存在许多不稳定现象和失败的测试。
2020 年 10 月。 Amim Knabben 因其对子项目的贡献成为 Kubernetes 组织成员。
2021 年 1 月。 在健康的 presubmit 和关键周期性作业都通过后,子项目讨论了清理其余周期性测试并确保它们在没有不稳定现象(flakes)的情况下通过的目标。
Elana Hashman 加入了子项目,在 Victor 离开后挺身而出帮助领导该项目。
2021 年 2 月。 Artyom Lukianov 因其对子项目的贡献成为 Kubernetes 组织成员。
2021 年 8 月。 在 SIG Node 成功进行了一次 bug 清理以清理其 bug 积压后,会议范围扩大到包括 bug 分类,以提高整体可靠性,在问题影响 CI 信号之前预测问题。
子项目负责人 Elana Hashman 和 Sergey Kanzhelev 在 SIG Node 和 SIG Testing 的支持下,都被认可为所有节点测试代码的 Approver。
2021 年 9 月。 在由 Francesco Romani 牵头在 1.22 版本中针对串行测试取得了显著的去不稳定(deflaking)进展后,子项目设定了在 1.23 版本发布日期之前使串行作业完全通过的目标。
Mike Miranda 因其对子项目的贡献成为 Kubernetes 组织成员。
2021 年 11 月。 整个 2021 年,SIG Node 没有出现阻塞合并或阻塞发布的测试失败。许多过去版本中的不稳定测试(flaky tests)由于已完全清理,被从阻塞发布仪表板中移除。
Danielle Lancashire 因其在 SIG Node 子小组(测试代码)中的贡献被认可为 Reviewer。
最后剩余的节点串行测试已完全修复。串行测试包含许多具有破坏性且缓慢的测试,这些测试往往不稳定且难以排查。到 1.23 版本冻结时,最后剩余的串行测试已修复,作业通过且没有不稳定现象(flakes)。
1.23 版本因其测试质量和 CI 信号获得了特别赞誉。SIG Node CI 子项目为能助力这样一个高质量版本的发布感到自豪,这部分归功于我们在节点及其他方面识别和修复不稳定现象(flakes)的努力。
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 源代码仓库包含测试定义。仅在该仓库中,节点 PR 的数量
CI 看板上已分类的 issue 和 PR(包括分类到子小组范围之外的)
未来展望
仅“保持运转”是一项艰巨的任务,我们致力于改进这一体验。我们正在努力简化 SIG Node 的分类(triage)和评审流程。
具体而言,我们正在改进测试的组织、命名和跟踪
- https://github.com/kubernetes/enhancements/pull/3042
- https://github.com/kubernetes/test-infra/issues/24641
- Kubernetes SIG-Node CI Testgrid 追踪器
我们也在不断改进测试的可调试性和去不稳定(de-flaking)。
如果你对这些感兴趣,我们非常欢迎你加入我们!调试测试失败有很多东西可以学习,这将帮助你熟悉 SIG Node 维护的代码。
你可以在 SIG Node 页面找到关于小组的信息。我们在维护者专题会议(maintainer track sessions)中提供小组更新,例如 欧洲 KubeCon + CloudNativeCon 2021 和 北美 KubeCon + CloudNative 北美 2021。加入我们,共同完成确保 kubelet 和其他 SIG Node 组件可靠、并保障顺利发布的使命!