为Kubernetes贡献的正确姿势
这是个好问题,开源的意义之一就是让大家参与进来。
首先需要明确的一点:对k8s作贡献,可不只是单单提pr和修复bug,其实有非常多的方案/渠道。前面给个例子,后面会讲到具体有哪些实现方式,希望有兴趣者能参与进来
就我而言,由于我目前的工作是基于kubernetes的CSI接口做的开发,因此对Kubernetes的存储这方面有点研究,本着为了学习和交流的目的,加了k8s社区的很多交流渠道,可以分享下。
举个栗子🌰
场景:我要向CSI下的一个项目中加入我们的插件,https://github.com/kubernetes-csi/,下面是具体操作
这个项目是属于Kubernetes的存储组,通过邮件和slack和该项目owner Saad Ali沟通后,摸清楚了整个流程,现梳理如下。
步骤如下:
一、添加issue & PR
早期的时候维护组人员可能会帮忙直接添加,比如DigitalOcean和OpenSDS,但是现在这个列表越来越多人,所以需要自己提issue和PR了(ps:别看这个小事,其实很多人都不知道还有这种操作😂,当时我们还是国内第一家成功往里面添加的。。。随后看到阿里也参与进来了)
二、Fork kubernetes-csi/docs到自己帐号下
注意完成修改后是不能直接合并到主分支下的,因为流程不对,帐号没做认证,会直接检测不通过
三、完成CNCF的CLA认证流程(重要)
步骤如下:
1.用当前帐号Github注册Linux Foundation ID(或者其他邮箱注册,但是注册完要关联github)
2.用刚注册的Linux Foundation ID登录portal添加CNCF-你的组织/个人,如果是新加组织的话需要个人信息,邮箱和组织成员
https://identity.linuxfoundation.org/node/285/organization-signup
3.添加个人签名,电子或者拍照或者手写都可以
确定完成后可以看到组织
4.添加企业域名(不知道是不是必须的,反正我没添加之前merge会验证不通过)
四、完成CNCF认证后继续回到项目上,重新修正提交信息
鉴于前面第二部已经把代码push和病merge到meter下,再次确认本次commit信息要使用刚才认证的github帐号和名字,如果不是的话,请重新commit并push -f 强制推送到远程端
因为前面我已经提交PR,开始merge到官方主分支之后才添加的认证,所以前面没通过,
此时需要评论点东西比如“I signed it”,他们的ci-robot才重新检测新的commit信息并标注是否检测通过
等到其他的组员review完成会添加/lgtm和/approve 即可合并到主分支
总结:社区有对贡献者还是十分友好的,但没硬性要求测试报告之类,但是需要提交CNCF的机构组织身份用于验证协作者,无论贡献大小,小到一个字母的修改,大到一个project的重构。因此,完成CNCF-CLA是必须的,因此这里花点篇幅介绍。
说明:CNCF协作协议,主要是版权,发布,原创,法律相关的规定
贡献
直接和社区的交流
包括slack频道,Google 讨论组和 Zoom,都是非常实用和高效率的
当有问题或者idea需要交流的时候,直接找到相关的人员沟通可以说是最高效的了,但是Kubernets项目这么大,不可能每个人都对所有的领域都了解,因此K8S会有不同的兴趣组(SIG,Special Interest Groups)
如图所示,根据自己的关注点去找到对应的组就好
找到组织后记得到以下地方去溜达:
具体日程以及owner整理如下
参与测试
测试包括很多类型包括
- 单元测试
- 集成测试
- 端到端测试(e2e,End-to-end)
提issue
如果发现bug或者异常,可以尽可能地复现并提交bug,或者提供自己的解决方案也是一种贡献
修bug或者review
如果可以编码去修复一些已知的bug,那也是极好的做法。但是记得无论修改了什么,最好还是添加相应的单元测试来保证代码质量。说到代码质量,其实review别人的代码对自己以及社区都是一种帮助,收获也不小。
网上分享知识
现在能坚持写技术博客的人,都是有前途的,毕竟一来需要我们进行知识总结,消化,然后形成自己的知识体系,对自己学习很有帮助。同时,也是造福他人的行为。因此通过写文章分享知识也是值得称赞的👍。
另外,除了写自己的公众号文章和博客这些,在公共论坛比如stack overflow或者Google groups上面共享自己的经验也是极好的。
写在最后
不积硅步无以至千里,每一个脚印都是有价值的。上面仅提供了一些参考,能使自己价值有所体现的行动有千千万万种。但是如果还能顺便留下点痕迹,贡献出自己的力量,何乐而不为。
参考链接:
https://github.com/kubernetes-csi/docs/pull/108
https://github.com/kubernetes-csi/docs/issues/104
https://github.com/kubernetes/community/blob/master/CLA.md#the-contributor-license-agreement
https://kubernetes-csi.github.io/docs/Drivers.html