这篇文章已经发布一年以上。较旧的文章可能包含过时的内容。请检查页面中的信息自发布以来是否已变得不正确。

音乐和数学:Kubernetes 1.17 版本发布访谈

每次 Kubernetes 发布列车停靠在车站时,我们都喜欢请发布负责人花点时间反思他们的经验。这采用了在每周 Kubernetes Podcast from Google 上的访谈形式,我与 Craig Box 共同主持。如果您不熟悉该节目,我们每周都会总结云原生生态系统中的新内容,并与来自更广泛的 Kubernetes 社区的有趣嘉宾进行深入的讨论。

在 12 月发布 1.17 版本时,我们 与发布团队负责人 Guinevere Saenger 进行了交谈。我们 分享了 以前 Kubernetes 博客上对先前访谈的文字记录,我们很高兴今天再次分享另一份。

下周,我们将为您带来 Kubernetes 1.18 的最新消息,因为我们正在为下个月发布的 1.19 版本做准备。 订阅节目,无论您在哪里收听播客,以确保您不会错过那次聊天!


ADAM GLICK:您作为一名软件工程师的背景并不传统。 您能解释一下这个背景吗?

GUINEVERE SAENGER:我的第一份职业是 合作钢琴家,这是一种学术性的说法,意思是“钢琴伴奏”。我是一位受过古典训练的钢琴家,她的大部分时间都在舞台上,为其他人伴奏并使他们的声音听起来很棒。

ADAM GLICK:这是钢琴相当于结对编程吗?

GUINEVERE SAENGER:以前没有人这样对我说过,但是现在我头脑中各种事情开始变得有意义。我认为这是一种非常棒的说法。

ADAM GLICK:这是一个非常有趣的背景,因为我也具有音乐背景。是什么让您决定进入软件开发领域?

GUINEVERE SAENGER:我发现自己处于一种生活状态,需要更稳定的收入来源,而教音乐和为各种演出机会表演实际上已经无法满足需求了。我发现自己工作非常非常努力,但却没有太多收获。我有很多朋友是软件工程师。我住在西雅图。当您住在西雅图时,这会发生在您身上——您会以某种方式认识一群软件工程师。

我遇到的那些人都很可爱,他们说,嘿,我很乐意向您展示如何用 Python 编程。所以我做了一段时间,然后我听说了这个名为 Ada Developers Academy 的项目。这是一所为期一年的编码学校,专门针对那些希望在技术领域从事第二职业的女性和非二元人士。所以我申请了该课程。

CRAIG BOX:您能告诉我们关于该课程的信息吗?

GUINEVERE SAENGER:首先,它非常有选择性。它在西雅图非常受欢迎,并且享有很高的声誉。我尝试了三次才被录取。他们每年开设两个班级,因此我等了一段时间才收到我的回复,上面写着“祝贺您,我们很高兴欢迎您加入第 6 期学员”。我认为,Ada Developers Academy 与其他训练营式编码项目不同的地方在于三件事,我认为?最重要的是,如果您被录取,您无需支付任何学费。整个项目由公司赞助商资助。

CRAIG BOX:好的。

GUINEVERE SAENGER:真正让我信服的另一件事是,11 个月的项目中,有 5 个月是行业实习,这意味着您将获得实践经验、指导以及最终的潜在工作机会。

CRAIG BOX:因此,很像滑铁卢大学学位的浓缩版,您可以在其中进行合作实习。

GUINEVERE SAENGER:很有趣。我不知道这一点。

CRAIG BOX:在滑铁卢生活了一段时间后,我认识很多做过这种事情的人。但是,您会说通过这种浓缩的计算机科学教育过程的优势是什么?

GUINEVERE SAENGER:我不确定浓缩过程是否一定是优势。我认为这是一种必然性。人们必须辞掉工作才能参加这个项目。这不是晚间学校的那种类型。

CRAIG BOX:好的。

GUINEVERE SAENGER:而且您的实习基本上是您在进行实习时的全职工作。Ada 真的很擅长的一件事是为我们提供与工作场所直接相关的实践经验。我们学习了如何使用 Git。我们学习了如何使用 Rails 设计网站。我们还学习了如何协作、如何结对编程。我们每周都会进行回顾,因此我们大致了解了实际工作场所的工作流程。此外,实习,我认为整体经验更“面向实际工作场所”,并且学术性稍弱。

当您完成此操作后,您不必重新学习如何与他人建立工作关系。您拥有一套先前的技能。有 Ada 毕业生以前是竞选律师、兽医、保姆、厨师,各种各样的人。事实证明,这些技能往往可以转换,并且往往很重要。

ADAM GLICK:凭借您的音乐背景,您认为这能给软件开发带来什么,而这可能是人们所经历的标准软件开发培训所缺少的?

GUINEVERE SAENGER:当我说我曾经是音乐家时,人们往往会真正将这些联系起来。当然,我仍然认为自己是音乐家,因为您永远不会真正停止成为音乐家。但是他们会说,“哦,是的,音乐和数学”,而且这只是相似的大脑。这太有道理了。我认为这有点道理。当您学习一段音乐时,您必须非常快地识别模式,几乎是凭直觉。

我认为这是转化为编程的主要技能——识别模式,找到有效的方法,找到无效的方法。对我而言,尤其是作为一名合作钢琴家,它是与人沟通,找出人们真正想要的东西,事情的发展方向,如何在开始编写第一行代码之前找出我们想要采取的总体方向。

CRAIG BOX:根据您在 Ada 的经验或您拥有的其他经验,您是否能够识别出您会推荐的其他人背景中的模式,“嘿,您擅长音乐,因此您可能需要考虑学习计算机科学之类的课程”?

GUINEVERE SAENGER:总的来说,我认为最终编写代码只是给计算机一组指令。我们每天都在日常生活中这样做。我们向孩子发出指令,我们向学生发出指令。我们做数学,我们编写教科书。当您作为律师在法庭上时,您会给一屋子的人发出指示。

实际上,Ada Developers Academy 的入学考试过去有来自 LSAT 的问题,以查看您是否有资格加入该课程。当我申请时,他们更改了这一点,但我认为这在某个时候发生过。因此,总的来说,我认为软件工程是一个比我们认为的更为多样的领域,而且您可以将您所谓的其他技能应用并纳入软件工程范畴的方式有很多种。

CRAIG BOX:我确实认为编程实际上是一半艺术,一半科学。需要应用创造力。可能有一种方法可以最有效地解决问题。但是您可以通过许多不同的方式选择表达您如何将某些内容编译成这种方式。

GUINEVERE SAENGER:是的,我的意思是,这绝对是真的。我认为您可能可以证明这一点的一种方法是,如果您在工作时编写代码,并且与其他人一起工作,那么您可能可以通过代码的编写方式、文档记录方式、样式或任何这些内容来判断您的哪个同事编写了哪个包。我真的认为人类的性格会体现出来。

ADAM GLICK:是什么让您对 Kubernetes 和开源感兴趣?

GUINEVERE SAENGER:老实说,什么也没有。回到我的编程学校——请记住,作为我培训的一部分,我必须进行为期五个月的实习——实习的工作方式是,该项目的赞助公司会根据他们赞助特定学生群体的多少来聘用实习生。

当时,三星和 SDS 提出在其云原生计算团队为两位实习生提供为期五个月的实习机会,作为他们的实践经验。我从一个 Ruby on Rails 全栈 Web 开发训练营出来,开始实习,他们说:“欢迎来到 Kubernetes。尝试启动一个集群。” 我说:“Kuber 是什么?”

CRAIG BOX:我们都偶尔会这么说。

ADAM GLICK:真是火的洗礼,哇。

GUINEVERE SAENGER:我想说,整个团队都非常棒,合作愉快,并且非常乐于助人。我将永远感激我在那个环境中获得的所有帮助和支持。那是一个学习的好地方。

CRAIG BOX:你现在在 GitHub 的 Kubernetes 基础设施上工作。显然,在 Kubernetes 出现之前就有 GitHub 了,所以发生了一次迁移。你能告诉我们关于 GitHub 迁移到在 Kubernetes 上运行的情况吗?

GUINEVERE SAENGER:这里要声明一下——我当时不在 GitHub,在迁移到 Kubernetes 的时候。但是,据我所知,决定迁移到 Kubernetes 并且人们决定,是的,我们想尝试 Kubernetes。我们想使用 Kubernetes。而且,剩下的主要决定就是,我们应该将哪个应用程序迁移到 Kubernetes?

CRAIG BOX:我以为 GitHub 是用 Rails 编写的,所以只有一个应用程序。

GUINEVERE SAENGER:[笑] 我们有很多隐藏的补充内容。

CRAIG BOX:我确定。

GUINEVERE SAENGER:但是,是的,GitHub 是用 Rails 编写的。它仍然是用 Rails 编写的。而且大多数的补充内容目前都在 Kubernetes 上运行。我们还有相当一部分目前不在 Kubernetes 上运行的东西。主要是 GitHub Enterprise 相关的东西。我不太了解这方面,因为我是在平台团队,帮助人们使用 Kubernetes 基础设施。但回到你的问题,当时的领导层决定,将 GitHub 的 Rails 网站作为第一个迁移到 Kubernetes 的项目是个好主意。

ADAM GLICK:高风险!

GUINEVERE SAENGER:这样做的原因是他们决定,如果他们不从大型项目开始,那么它就永远不会迁移。它真的不会发生。所以他们只是决定全力以赴,并且成功了,我认为这个教训可能是尽早提交,大规模提交。

CRAIG BOX:你从公司进行的迁移中学到了哪些其他经验,或者可以应用于那些正在考虑将公司从传统基础设施迁移到 Kubernetes 基础设施的人们?

GUINEVERE SAENGER:我不确定这是否是一个具体的教训,但我最近在做支持工作,结果发现,由于不可预见的情况和人为错误的混合,我们一个 Kubernetes 集群上的许多命名空间被删除了。

ADAM GLICK:哦,天哪。

GUINEVERE SAENGER:我应该提到,这不应该影响任何客户。但总而言之,我们几个人花了几个小时才几乎完全从这次事件中恢复过来。我认为,如果没有 Kubernetes,这是不可能的。

CRAIG BOX:通常,删除类似的东西是相当灾难性的。我们看到许多其他供应商在有人做了类似的事情时遭受了大规模的停机,这就是为什么我们在 Twitter 上一直看到#hugops

GUINEVERE SAENGER:人们确实给我发了 #hugops,这是真实发生的事情。但总的来说,这样的事情是一个有趣的压力测试,并证明它远没有最坏情况那么灾难性。

CRAIG BOX:GitHub 运行自己的数据中心。Kubernetes 主要构建用于在云上运行,但很多人选择在自己的裸机上运行它。你们如何管理集群和运行的机器的配置?

GUINEVERE SAENGER:当我开始时,我的入职项目是取消一个旧集群的配置,确保所有流量都转移到可以继续运行的地方,配置一个新的集群,然后将网站流量转移到新集群上。这是一个非常令人兴奋的入职项目。当时,我们使用 Puppet 配置裸机机器。我们现在仍然在某种程度上这样做,但我认为现在运行我们计算资源的团队实际上在裸机和 Kubernetes 节点之间插入了虚拟机作为额外的层。

同样,我不是这个决策的内在参与者,但我的理解是,这只是为了提高整体的可靠性和可重复性。我们遇到了一些有趣的硬件依赖问题,虚拟机基本上可以避免这些问题。

CRAIG BOX:你使用 Kubernetes 已经有几年了。你是如何参与到发布过程中的?

GUINEVERE SAENGER:当我刚开始参与这个项目时,我从贡献者体验特别兴趣小组开始,主要是因为我当时的一位同事 Aaron Crickenberger 是一个 Kubernetes 社区的重要人物。现在仍然是。

CRAIG BOX:我们邀请他参加过节目,进行过其中一次发布采访!

GUINEVERE SAENGER:事实上,这是真的!所以 Aaron 和我实际上在三星 SDS 就认识了。无论如何,Aaron 建议我应该为 Kubernetes 项目写一份贡献,我说,我吗?他说,是的,当然。你将在KubeCon 上发言,所以你应该从一个 PR 或其他东西开始。所以我尝试了,这真的很难。我在一个公开的 GitHub issue 中抱怨了这件事,人们说,是的。是的,我们知道这很难。你想帮忙解决这个问题吗?

因此,我开始真正参与到新贡献者入门流程中,并取得了一些成功,从而在这个像 Kubernetes 这样庞大而多样的项目中站稳脚跟。从那时起,我开始与人交谈,了解他们。Kubernetes 社区的伟大之处在于,有很多指导可以提供。

ADAM GLICK:没错。

GUINEVERE SAENGER:有很多友好的人愿意提供帮助。当我与其他人谈论这件事时,这真的很有趣。他们说,你的同事是什么意思?我说,嗯,他真的只是一个同事。他真的在另一家公司工作。

CRAIG BOX:他算是正式的竞争对手。

GUINEVERE SAENGER:是的。

CRAIG BOX:但我们是朋友。

GUINEVERE SAENGER:但他完全帮助了我,当时我不知道如何 git patch 我搞砸的 pull request。所以这件事发生了。最终,有人建议我开始跟踪发布过程,并为发布团队中的某人做影子工作。当时,那个人是 Tim Pepper,他是 bug 分类主管,我为他做了影子工作。

CRAIG BOX:另一位播客嘉宾也加入到了采访行列中。

GUINEVERE SAENGER:一旦我向你解释了发布团队的影子过程,这个模式可能会更有意义。

ADAM GLICK:那么,让我们转向 Kubernetes 发布和发布过程。首先,1.17 版本的新增功能是什么?

GUINEVERE SAENGER:我们只有很少的新功能。我最兴奋的是,我们将IPv4 和 IPv6 双栈支持移到了 alpha 阶段。这是最重要的变化,而且我认为已经酝酿了一年半的时间。所以这是该功能的第一个版本,我对此非常兴奋。

CRAIG BOX:那些多年来一直被承诺 IPv6 但仍然没有真正看到它的人,这对他们来说意味着什么?

ADAM GLICK:最重要的是,为什么我们跳过了 IPv5 支持?

GUINEVERE SAENGER:我不知道!

CRAIG BOX:有关技术解释,请参阅本播客的附录

GUINEVERE SAENGER:拥有双栈配置显然可以让人们拥有更灵活的基础设施,而不必太担心做出会过时或可能过于复杂的决策。这基本上意味着 pod 可以拥有双栈地址,节点可以拥有双栈地址。这基本上只是让通信更容易了。

CRAIG BOX:那么那些没有进入发布的功能呢?在1.16 的采访中,我们与 Lachie 进行了对话,他提到了边车容器。不幸的是,它们没有进入该版本。而且我现在看到它们也没有进入这个版本。

GUINEVERE SAENGER:它们没有,我们实际上目前正在努力跟踪多次发布都未发布的功能。

作为一个社区,我们需要每个人的帮助。人们想要很多功能。还需要进行大量的清理工作。而且,我们之前在 KubeCon 上多次谈到过维护人员倦怠、审阅人员倦怠的问题,很难找到对你特定贡献的审阅,尤其是如果你不是社区的资深成员。而且很明显,这是整个社区需要改进的一个领域。

因此,不幸的事实是,有时生活会发生,人们很忙。这是一个开源项目。这不是公司强制要求的 OKR。特别是在北美地区一年的第四季度,但在世界各地,我们有很多假期。这是一年的结束。Kubecon 北美也发生了。这使得通常很难及时找到审阅者或为你增强提议争取到所需的支持。不幸的是,发布延期是相当常见的,而且在这一点上,是意料之中的。我们一开始有 42 项增强功能,最终只完成了大约一半

CRAIG BOX:我本来想问一下,由于一年第四季度世界大部分地区都有假期,导致时间表被缩短。你是否觉得 Q4 的版本总体上比其他版本小,如果不是因为它的时间短了一周的话?

GUINEVERE SAENGER:第四季度的发布版本通常较短,这是因为我们需要在年底假期前完成本年度的最后一个版本。通常,发布版本会受到 KubeCon 的压力,在 KubeCon 期间,如果你参会,寻找评审人员甚至抽出时间工作都很难。即使你不参会,你的评审人员可能也在参会。

去年有人提出,应该将最后一个版本更多地作为稳定性版本,意味着不包含新的 alpha 功能。实际上,对于本次发布,情况确实非常接近事实。我们有四个功能升级到 beta 阶段,并且我们的大部分功能都升级到了稳定版。我希望以此为先例,改变我们的流程,使以后的最后一个版本都成为稳定性版本。时间线符合,过去的经验也符合这个模型。

ADAM GLICK:除了正在进行的发布工作之外,还举办了 KubeCon。而且您还参与了贡献者峰会。这次峰会怎么样?

GUINEVERE SAENGER:这是我们第一次拥有组织完备的活动团队的贡献者峰会,包括活动组织负责人、手册和流程。而且我从很多人那里听到——这只是口口相传——这是他们最喜欢的贡献者峰会。

CRAIG BOX:有人负责帽子生产吗?每个人都戴着水手帽

GUINEVERE SAENGER:是的,所有活动工作人员都戴着带有 GitHub 用户名的水手帽,这太棒了。你可能在贡献者峰会的一些照片中看到我戴着帽子。那确实是贡献者峰会当天早上从一个盒子里拿出来的,没有人知道。但起初我有点怀疑,然后我戴上它照了照镜子。我想,是的。是的,这很准确。我们都应该戴上这些帽子。

ADAM GLICK:将大家聚集起来参加贡献者峰会对发布过程有帮助吗?

GUINEVERE SAENGER:并没有。实际上,恰恰相反。好吧,这话说得太绝对了。

ADAM GLICK:这仅仅是占用了时间的问题吗?

GUINEVERE SAENGER:这只是一个完全不同的关注点。老实说,这有助于与我目前仅在视频中互动的人面对面地认识。但我们确实不得不取消了贡献者峰会当天的发布团队会议,因为开会毫无意义。我们把它移到了周二,我相信是这样。

CRAIG BOX:发布团队负责人的角色被描述为服务型领导。您认为这个职位是主动的还是被动的?

GUINEVERE SAENGER:老实说,我认为这取决于谁是发布团队负责人,对吧?有些人非常警惕,会寻找趋势,试图在问题发生之前就检测到它们。我倾向于属于那一类,但我也知道有时不可能预测事情。有时会有最后一刻出现的 bug,有时则不会。如果出现了最后一刻的 bug,你必须准备好应对它。所以对我来说,我的方法是,我想确保我的优先级井然有序,并且如果我无法到场,我也有备用方案。

ADAM GLICK:对您来说,发布过程中最有趣的部分是什么?

GUINEVERE SAENGER:发布负责人必须先在发布团队中担任过其他角色,才能成为发布团队负责人。对我来说,看到其他角色负责什么,那些我以前没有从内部看到过的角色,比如文档、CI 信号,非常有趣。我曾帮助处理过一段时间的 CI 信号,但我想特别赞扬一下 CI 信号负责人 Alena Varkockova,她能够有效地、友好地与所有遇到测试中断、测试失败的人沟通。而且她非常有效地让我们的所有测试都运行起来了。

所以这实际上非常酷。是的,只是能看到更多团队的运作,对我来说,这很令人兴奋。当然,另一个令人兴奋的事情是看到所有正在发生的变化以及正在做出的所有努力。

CRAIG BOX:1.18 的发布负责人刚刚宣布是Jorge Alarcon。您会把他放在信封里的建议是什么?

GUINEVERE SAENGER:我希望 Jorge 真正重视确保每个提交变更的特别兴趣小组,为 1.18 版本做出增强,能够及时响应并遵守时间表。沟通往往是一个问题。我之前暗示过这一点,但有些增强功能之所以被遗漏,仅仅是因为没有足够的评审带宽。

更好地沟通时间表,并给予人们更多的时间和空间来提交他们的变更,或者至少,通过发送早期警告来表面上给予他们更多的时间和空间,这将有所帮助。当然,他的发布周期也会比我的稍长一些。这可能与第四季度特有的挑战有关。总的来说,我鼓励他多休息,更多地依赖他的发布影子,并以一种允许每个人轮流上阵并且每个人都可以休息的方式来分配工作。

ADAM GLICK:如果有人听到您的经验并受到启发想要参与 Kubernetes 发布或贡献过程,您会给他们什么建议?

GUINEVERE SAENGER:这是两个独立的问题。所以,让我先解决 Kubernetes 发布问题。在我看来,Kubernetes SIG Release 为新成员提供了一个非常好的入职计划。我们有所谓的发布团队影子计划。我们还有发布工程影子计划或发布管理影子计划。这些是 SIG Release 中的两个独立的子项目。每个子项目都有一个角色团队,每个角色可以有两到四个影子,他们基本上是该角色团队的成员,并在工作中学习该角色。

例如,如果我是发布团队中 bug 分流的负责人,我可能会有两到三个或四个人与我密切合作处理 bug 分流任务。这些人是我的影子。一旦他们作为一个影子服务了一个发布周期,他们现在就有资格担任该角色的负责人。我们有一个申请表格,它可能会在一月份发布。通常会在所有发布负责人确定后发布的第一个星期发布。

CRAIG BOX:您认为成为发布团队的成员是对 Kubernetes 项目整体而言的良好首次贡献吗?

GUINEVERE SAENGER:这取决于你的目标是什么,对吧?我相信是这样的。我相信,对我个人而言,它非常有助于深入了解我不太了解的项目角落,例如 API 机制、存储。能够查看我通常从不接触的所有代码区域,这真的很令人兴奋。

这取决于你想要从中获得什么。总的来说,我认为成为发布团队的影子是成为社区一员的非常非常好的跳板,因为它为贡献提供了一条铺平的道路。你所要做的就是参加会议,向你的负责人提问,负责人必须回答这些问题。

而且你也在做真正的工作。你真的在帮助,你真的在贡献。如果你查看存储库中的问题和拉取请求,你会看到“嗨,我叫某某。我正在为当前版本的 CI 信号负责人当影子。你可以在这里帮助我吗?”这是一个有价值的贡献,它会把你介绍给其他人。然后人们会认出你的名字。他们会看到你的拉取请求,他们会说,哦,是的,我认识这个人。他们是合法的。


Guinevere Saenger 是 GitHub 的一名软件工程师,并担任 Kubernetes 1.17 版本的发布团队负责人。

您可以在 Twitter 上@KubernetesPod找到来自 Google 的 Kubernetes 播客,您可以订阅,这样您就不会错过任何一集。