本文发布已超过一年。较旧的文章可能包含过时的内容。请检查页面信息自发布以来是否仍准确无误。

SIG Node 焦点

引言

在 Kubernetes 中,一个 Node 代表集群中的一台机器。SIG Node 负责这个非常重要的 Node 组件,并支持各种子项目,例如 Kubelet、容器运行时接口 (CRI) 等,以支持 Pod 和主机资源如何交互。在这篇博客中,我们总结了与 Elana Hashman (EH)Sergey Kanzhelev (SK) 的对话,他们向我们介绍了成为 SIG 一员的各个方面,并分享了一些关于其他人如何参与进来的见解。

对话总结

能否请您简单介绍一下 SIG Node 的工作职责?

SK: SIG Node 是一个垂直 SIG,负责支持 Pod 和主机资源之间受控交互的组件。我们管理被调度到节点上的 Pod 的生命周期。这个 SIG 的重点是支持广泛的工作负载类型,包括具有硬件特定或性能敏感要求的工作负载。同时,我们维护节点上 Pod 之间的隔离边界,以及 Pod 与主机之间的隔离。这个 SIG 维护相当多的组件,并有许多外部依赖(如容器运行时或操作系统功能),这使得我们处理的复杂性非常巨大。我们驯服这种复杂性,并致力于持续提高节点可靠性。

“SIG Node 是一个垂直 SIG”,能否请您进一步解释一下?

EH: SIG 分为两种:水平 SIG 和垂直 SIG。水平 SIG 关注 Kubernetes 中每个组件的特定功能:例如,SIG Security 考虑 Kubernetes 中每个组件的安全方面,或者 SIG Instrumentation 关注 Kubernetes 中每个组件的日志、指标、跟踪和事件。这类 SIG 通常不拥有大量代码。

另一方面,垂直 SIG 拥有一个单一组件,并负责审批和合并对该代码库的补丁。SIG Node 拥有“Node”垂直领域,涉及 kubelet 及其生命周期。这包括 kubelet 本身的代码,以及节点控制器、容器运行时接口和相关子项目,例如节点问题检测器 (node problem detector)。

CI 子项目是如何启动的?这是 SIG Node 特有的吗?它对 SIG 有何帮助?

SK: 这个子项目是在某个版本发布因大量关键测试失败而受阻后启动的跟进措施。这些测试并非突然全部失败,而是由于持续缺乏关注导致测试质量缓慢下降。SIG Node 始终将质量和可靠性放在首位,成立这个子项目正是为了突出这一重点。

作为按 Issue 和 PR 数量计算的第三大 SIG,您的 SIG 如何应对如此繁重的工作?

EH: 有条不紊地组织工作很有帮助。当我于 2021 年 1 月增加对 SIG 的贡献时,我发现自己被大量的 Pull Request 和 Issue 压得喘不过气来,不知道从何开始。我们已经在 CI 子项目看板上跟踪与测试相关的 Issue 和 Pull Request,但这遗漏了许多 Bug 修复和功能开发工作。因此,我开始为其余的 Pull Request 组织了一个 triage 看板,它允许我根据状态和需要采取的行动对每个 Pull Request 进行排序,并记录了其用法供其他贡献者参考。在过去两个版本中,我们通过这两个看板关闭或合并了超过 500 个 Issue 和 Pull Request。Kubernetes devstats 显示,我们的工作效率因此得到了显著提高。

在六月,我们举办了首次 bug scrub 活动,以处理针对 SIG Node 提交的积压 Issue,确保它们得到正确分类。在这个为期 48 小时的全球活动中,我们关闭了超过 130 个 Issue,但在撰写本文时,我们仍然有 333 个开放 Issue。

为什么新贡献者和现有贡献者应该考虑加入 SIG Node?

SK: 作为 SIG Node 贡献者,您将获得非常有价值且实用的技能和认可。了解 kubelet 的底层原理有助于架构更好的应用、调优和优化这些应用,并在问题排查方面获得优势。如果您是新贡献者,SIG Node 将为您提供关键的基础知识,帮助您理解为什么其他 Kubernetes 组件被设计成现在的样子。现有贡献者也可能会受益,因为许多功能迟早会需要 SIG Node 的改动。因此,成为 SIG Node 贡献者有助于更快地在其他 SIG 中构建功能。

SIG Node 维护着众多组件,其中许多组件依赖于外部项目或操作系统功能。这使得入职过程相当漫长且要求较高。但如果您乐于接受挑战,这里总有您的位置,也有一群人支持您。

你们如何帮助新贡献者入门?

EH: 在 SIG Node 入门可能会令人望而生畏,因为有很多工作要做,我们的 SIG 会议规模很大,而且可能很难找到一个开始的地方。

我总是鼓励新贡献者从他们已经有所投入的事情入手。在 SIG Node 中,这可能意味着自愿帮助修复一个您个人受到影响的 Bug,或者按优先级帮助 triage 您关注的 Bug。

要快速熟悉任何开源代码库,有两种策略可以采用:深入探索某个特定的 Issue,并根据需要沿着它扩展您的知识边界;或者尽可能多地快速查看 Issue 和变更请求,以获得组件工作原理的更高层次的概览。最终,如果您想成为 Node 的 reviewer 或 approver,您需要同时采用这两种方法。

Davanum Srinivas 和我分别主持了一组集体辅导,帮助新贡献者学习成为 Node reviewer 所需的技能,如果有人感兴趣,我们可以努力寻找导师再举办一期。我还鼓励新贡献者参加我们的 Node CI 子项目会议:参与者较少,而且我们不录制 triage 会议,因此这是一种更容易入门 SIG 的方式。

你们特别希望招募具有哪些技能的人才?SIG Node 的贡献者可能会学到哪些技能?

SK: SIG Node 在非常不同的领域进行着许多工作流。所有这些领域都属于系统层面。对于典型的代码贡献,您需要热衷于构建和利用低级 API,以及编写高性能且可靠的组件。作为贡献者,您将学习如何调试、排查问题、性能分析和监控这些组件,以及由这些组件运行的用户工作负载。通常,对 Node 的访问是有限甚至没有的,因为它们正在运行生产工作负载。

另一种贡献方式是帮助编写 SIG Node 功能的文档。这种贡献需要对功能有深入的理解,并能够用简单的术语解释它们。

最后,我们一直在寻求关于如何最好地运行您的工作负载的反馈。请来详细说明您工作负载的特点,以及 SIG Node 组件中的哪些功能可能有助于更好地运行它。

您收到了哪些积极反馈?SIG Node 的下一步计划是什么?

EH: 过去一年,SIG Node 采用了一些新的流程来帮助管理我们的功能开发和 Kubernetes 增强提案,其他 SIG 也向我们寻求管理大型工作负载的启发。我希望这是我们可以继续提供领导力并进一步迭代的领域。

我们目前正在开发新功能和进行弃用工作,两者之间保持着很好的平衡。弃用未使用或难以维护的功能有助于我们控制技术债务和维护负担,例如 dockershim 和 DynamicKubeletConfiguration 的弃用。新功能将为最终用户的集群解锁更多功能,包括对 cgroups v2、swap memory、优雅节点关机和设备管理策略等令人兴奋的功能支持。

您还有什么想分享的结束语/资源吗?

SK/EH: 融入任何开源社区都需要时间和努力。SIG Node 最初可能会因参与者众多、工作量巨大和项目范围广泛而让您感到不知所措。但这绝对是值得的。加入我们热情的社区吧!SIG Node GitHub Repo 包含许多有用的资源,包括 Slack、邮件列表和其他联系方式。

总结

SIG Node 在 KubeCon + CloudNativeCon Europe 2021 上举办了一场演讲,对他们出色的 SIG 进行了介绍和深入探讨。加入 SIG 的会议,了解最新的研究成果、未来一年的计划,以及如何作为贡献者参与上游 Node 团队!