当我在IBM产品安全事件响应团队工作时,我于2018年10月开始为Kubernetes(K8s)做出贡献。我被分布式系统所吸引,但在日常工作中无法与它们合作,因此我的导师Lin Sun建议我在业余时间为开源分布式系统做出贡献。我对K8感兴趣,再也没有回头!
我主要在Kubernetes特殊兴趣小组(SIG)参与 sig-testing,sig-storage 和 sig-release 中工作。我最引人关注的代码贡献是在Saad Ali的领导下实现了插件管理器。插件管理器是一个管理插件注册/注销的控制器,当插件(例如CSI或设备插件)注册失败时,这将为 Kubelet 提供插件注册重试和指数退避逻辑。
我于2019年1月成为K8s的成员,并于2019年7月加入IBM Open Technology 团队,成为开源贡献者和开发者倡导者,IBM Open Technology 团队目前主要在为 Knative 做出贡献,Knative 是一个基于 Kubernetes、用于部署和管理无服务器工作负载的平台。
欢迎新的Kubernetes贡献者,如果您想遵循我的道路,并开始在业余时间贡献力量,请继续阅读。
K8s的源代码托管在GitHub上,因此了解如何使用Git或其他版本控制系统非常重要。首先,请熟悉这些常见命令。
我来自C / C ++背景,在开始之前不了解任何Golang。如果您熟悉面向对象的编程,那么Golang应该相当容易掌握。我建议您在学习K8s代码库时学习Go。我的同事 Wei Huang 向我介绍了Ultimate Go编程 视频系列,这极大地帮助了我。
在您的提交的代码可以合并到K8s代码库中之前,您必须签署贡献者许可协议(CLA)。另外,请注意 Kubernetes 的 GitHub 存储库中的“ 开始之前 ”中所述的相关事项,如了解社区准则,代码规范,如何设置开发环境以及其他事项等。
在 Kubernetes 中找到需要处理的事情的第一种方法是查看 "open issue " 列表。您可以按标签过滤问题列表,例如“good first issue”和“help wanted”,这表明该问题是对新手友好的。有时,问题可能贴错标签;也许问题的技术复杂性被低估了,并且被错误地标记为“good first issue”。因此,如果“good first issue”似乎比您预期的要复杂,请不要感到惊讶。
查找需要处理的事情的第二种方法是在代码库中搜索“ TODO”。有数百个待办事项用于降低优先级。这是学习代码库并从某人的TODO列表中剔除一项的好方法-双赢!
阅读任何 链接的问题 或 request(PR),以帮助您了解问题的背景和问题。如果问题描述不清楚,请确保在投入时间去研究问题之前与问题的创建者联系以获得更清晰的理解。如果这是一个 bug,请确认您可以重现该bug。请注意,这可能会花费大量时间。我花了很多时间来设置环境以尝试重现bug。
一旦您有了解决方案的想法,最好在提交PR之前,在Slack上与问题创建者联系以验证您的方法。如果您一周内未收到创作者的回音,请进行PR,以便该人员可以使用具体解决方案进行审查。
起初,我感到困惑的是,在就某个问题打电话给Dib之后,我应该在多久之后提交一份PR。由于我必须在全职工作之外从事 K8s 的工作,所以我也想知道这将如何影响我的工作与生活平衡。在查看了问题和其他PR之后,我发现我需要至少在两周内提供PR或状态更新。我认为,如果您的初始实施(initial implementation)尚未经过测试,则可以放心提交你的初始PR,这样就可以尽快获得有关您是否步入正轨的反馈。
在开发解决方案时,请确保添加单元测试或集成测试以确认该错误已修复或该功能按预期工作。K8S使用 Prow 来做持续集成/不断发展(CI / CD)系统,它会针对那些带有 ok-to-test 标签的 PR 运行所有单元和集成测试。如果您不是Kubernetes项目的成员,CI作业将不会对你的PR自动运行测试任务。在这种情况下,我建议您首先在本地运行测试,然后在相关的SIG Slack频道上要求Kubernetes GitHub组织的成员在您的PR上发表评论“/ ok-to-test”。
对于日常交流沟通,Kubernetes Slack非常适合直接与其他贡献者进行交流并提出问题。我建议您加入您最感兴趣的SIG channel(例如sig-cli,sig-storage,sig-testing等)。
KubeCons 是与其他贡献者面对面交流的好地方。2019 年 和2020年 11月在北美分别有1个,3月/ 4月在欧洲有1个,7月在亚洲有一个。我强烈建议所有有抱负的新手和经验丰富的贡献者参加以下两项活动:
除了编写代码外,还有许多其他贡献方式。审查代码很重要,因为它可以帮助现有的审查者和维护者减轻他们的审查工作量,并提供各种意见。这也是学习K8s代码库的最佳方法之一!
您也可以作为“影子(shadow for a role) ”加入发布团队,为Kubernetes的发布过程做出贡献。访问角色手册以了解有关发布团队中不同角色的更多信息。我遮蔽了Test Infra潜在客户的两个版本,直到我们使流程自动化并取消了角色。
成为“影子”使我学到了很多东西,包括有关CI / CD自动化和项目管理的知识,这些产品背后是影响世界各地的公司的高度可见的产品。发布团队继续努力自动化任务并消除所有角色的手动任务,以获得更好的CI / CD,这给我留下了特别深刻的印象。
如果您有兴趣成为“影子”,请查看正式的申请流程。
如果您在业余时间使用Kubernetes,请注意以下几点:有每周一次的发布团队会议,但是不需要参加所有会议的影子。会议通常在美国太平洋时区的工作时间内进行,持续半小时。幸运的是,我的工作足够灵活,我可以每周两次或两次预定会议室来参加发布团队的会议。
设置每周花费多少个小时用于K8s贡献的时间是很有帮助,否则你很容易陷入日常的开发事务中。当您的日常工作或生活忙碌时,请不要为K8贡献力量,这也很重要。K8s开发社区中的停机时间通常与发布削减之前的发布代码冻结期一致。这将是您休息的好时机,因为在此期间其他贡献者的参与较少,因此您不太可能收到有关PR或Slack消息的回复。
让您的团队和经理了解您的新爱好也是一件好事,因为分享您的知识可能会有所帮助。如果您的团队或公司使用Kubernetes(或任何容器技术),则您将从了解K8的内部结构中受益。即时你的团队或公司没有使用任何容易,与您的开发团队分享Kubernetes中的行业趋势,软件工程设计模式和体系结构设计决策仍然是很棒的。考虑举办有关这些主题的每月讲座,或介绍您在KubeCon和其他会议上学到的知识。
贡献给K8s是我有过的最有意义的经历之一。编程过去只是工作,但现在也成了业余爱好。如果您的日常工作不太苛刻,我强烈建议您尝试一下。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系外文翻译,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。