为Kubernetes贡献的正确姿势

Kubernetes是一个大型的项目,其代码全部开源,在github上都可以访问,理论上所有人都可以参与其中。不少人也是有过这样的疑问🤔️我是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到自己帐号下

注意完成修改后是不能直接合并到主分支下的,因为流程不对,帐号没做认证,会直接检测不通过

precla

三、完成CNCF的CLA认证流程(重要)

步骤如下:

1.用当前帐号Github注册Linux Foundation ID(或者其他邮箱注册,但是注册完要关联github)

2.用刚注册的Linux Foundation ID登录portal添加CNCF-你的组织/个人,如果是新加组织的话需要个人信息,邮箱和组织成员

https://identity.linuxfoundation.org/node/285/organization-signup

join_cncf

3.添加个人签名,电子或者拍照或者手写都可以

签名示例

确定完成后可以看到组织

org

4.添加企业域名(不知道是不是必须的,反正我没添加之前merge会验证不通过)

enterprise

四、完成CNCF认证后继续回到项目上,重新修正提交信息

鉴于前面第二部已经把代码push和病merge到meter下,再次确认本次commit信息要使用刚才认证的github帐号和名字,如果不是的话,请重新commit并push -f 强制推送到远程端

因为前面我已经提交PR,开始merge到官方主分支之后才添加的认证,所以前面没通过,

此时需要评论点东西比如“I signed it”,他们的ci-robot才重新检测新的commit信息并标注是否检测通过

signed

等到其他的组员review完成会添加/lgtm和/approve 即可合并到主分支

总结:社区有对贡献者还是十分友好的,但没硬性要求测试报告之类,但是需要提交CNCF的机构组织身份用于验证协作者,无论贡献大小,小到一个字母的修改,大到一个project的重构。因此,完成CNCF-CLA是必须的,因此这里花点篇幅介绍。

说明:CNCF协作协议,主要是版权,发布,原创,法律相关的规定

贡献

直接和社区的交流

包括slack频道,Google 讨论组和 Zoom,都是非常实用和高效率的

当有问题或者idea需要交流的时候,直接找到相关的人员沟通可以说是最高效的了,但是Kubernets项目这么大,不可能每个人都对所有的领域都了解,因此K8S会有不同的兴趣组(SIG,Special Interest Groups)

sig.png

如图所示,根据自己的关注点去找到对应的组就好

找到组织后记得到以下地方去溜达:

具体日程以及owner整理如下

| Name | Label | Chairs | Contact | Meetings | | ------------------------------------------------------------ | ---------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | | API Machinery | api-machinery | * Daniel Smith, Google
David Eads, Red Hat | * Slack
Mailing List | * Regular SIG Meeting: Wednesdays at 11:00 PT (Pacific Time) (biweekly)
* Kubebuilder and Controller Runtime Meeting: Wednesdays at 10:00 PT (Pacific Time) (monthly - second Wednesday every month)|

参与测试

测试包括很多类型包括

  • 单元测试
  • 集成测试
  • 端到端测试(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