22
人物专栏
sealer是一款由阿里巴巴开源的集群镜像软件,是快速安装kubernetes的交付工具,能够短时间“一键”完成新集群的安装。sealer主打的“集群镜像”概念能够帮助使用docker的用户平滑的过渡到kubernetes。
项目编号:221b70470
项目链接:https://summer-ospp.ac.cn/#/org/prodetail/221b70470
项目导师:方海涛
sealer是一款由阿里巴巴开源的集群镜像软件,是快速安装kubernetes的交付工具,能够短时间“一键”完成新集群的安装。sealer主打的“集群镜像”概念能够帮助使用docker的用户平滑的过渡到kubernetes。
作为准研一“00后”,在2022年6月初,我怀着对开源的憧憬加入了sealer的Developers的队列,此时距离sealer启动已经有一年了,在2022年4月左右进入了CNCF sandbox阶段。
我相信很多人都一样,接触到Github大多是从上面克隆一个下来然后随便改改交个作业,至少本科如此。而真正的作为一个Github良好社区项目,需要有活跃的生态,活跃的提交(Pull Request),活跃的建议(Issues)。而我,凭借实习用起来的git commit/pull/clone/push对于加入社区来说无从下手。
下面就以我个人与sealer的一段成长故事来带领大家体验从小白到核心功能开发者的开源之旅,同时本文也作为一篇引领开源小白入门的文章供大家参考。
参与OSPP开源项目sealer开源的偶然与必然
大四上学期考完研后,我依靠本科项目经验所积累的Java、SpringBoot、docker等技术出来寻找工作。此时恰逢杭州的容器云岗位大量招募,我有幸进到了杭州谐云科技有限公司,并在一个机缘巧合下进入了和阿里云合作的云原生项目中,并在岗位上认识了团队的Leader--孙宏亮。后面恰逢技术调研需要,天天在Github上逛,发现团队正在运营开源的交付工具sealer,只不过仅仅听说了sealer大名--号称“三分钟通过集群镜像交付一套集群”。因此sealer在我脑海中蒙上了神秘的面纱,恰逢4月底录取通知发出,我想我今后是否能为开源贡献力量。
大概5月中旬,我确定了我去读研的计划,这个时候我比较迷茫,因为无法留在杭州,但又不舍坚持三年的云原生领域。偶然一次周会上听说sealer正在吸引开源志愿者参加开源之夏-2022(下称OSPP),我一听:这不是明摆的机会吗?于是我在5月底离开了团队,开始着手OSPP上sealer关于支持安装k0s的项目计划书。6月份的入选如期而至--当然,背后少不了宏亮的鼎力支持。
CNCF sealer对我的神秘引力
如果说通过OSPP参与开源是一种必然,那选择众多的项目中总要有一个理由。刚开始关注了三个均有云原生的社区,一个Java调试天花板Arthas社区,另一个kubesphere社区,以及sealer.io社区,且后两个社区的项目可以说互相替代(kubeKey和sealer)。为什么最终聚焦在了sealer,我想有三个坚定不移的原因:
-
sealer是CNCF Sandbox项目。相信大家多多少少见过CNCF的Landscape全景图,以及项目成长三个阶段:Sandbox,Incubating,Graduated。我想是否能让一个从沙箱到孵化最终到毕业的项目陪伴我的成长。
-
sealer具有“集群镜像”这一创新力。作为一个docker用户,我赞叹于dockerfile以及docker镜像技术带来的便利。看到集群镜像后,我又不由自主的想象sealer是如何将云基础设施封装于Kubefile。
-
sealer充满了更多的挑战,在社区和用户的共同推进中,项目中出现了一些不成熟的地方,这些问题罗列于RoadMap和Issue中,不止于OSPP的任务。
上手sealer开源的拦路虎
作为新人可以说,刚加入社区的我不会流畅的Git,不知道如何提交Issue,不会发起代码合并请求(Pull Request),甚至因为代码技术不够硬而不敢和社区人员交流,我相信大多数想参与开源的同学和我的处境比较相似。
中途加入社区虽然没有项目启动困难大,但对于一个新手来说也足够复杂。使用sealer安装集群体验其功能后,转型为Developer的重要一步就是熟悉代码,原以为对着代码编辑器Goland开冲就完事,但如同社区维护者所说,“Don't all buy in”,开源代码和社区并不是100%优秀。作为二进制安装工具,验证代码并不直观,单元测试不完善,也造成了验证代码逻辑的不少麻烦。
打虎第一棒:将官方文档和源码搭配食用
在6月的项目启动期,将官方文档和项目中的README以及源码结合起来看,是一种丝滑的体验方式。首先从官方文档我们能了解其架构,模块,功能,这些对于半路上车的新人至关重要。从个人来看,我更专注runtime及其相关的架构,官方文档中主要着重阅读集群镜像的构建,集群镜像仓库的设计。代码方面对照kubeadm的官方安装文档看runtime模块中的业务逻辑、从cobra命令行调用的接口跟随源代码至实现层。
打虎第二棒:对sealer的第一次Issue
第一个在sealer社区的Issue比较生猛,上来就提出Runtime模块耦合度高,对k0s、k3s、k8s的扩展支持不太友好,同时抽象出顶层的集群管理接口。第一次点击comment的时候反反复复用中英翻译软件把每个句子都检查了一遍,生怕语法和单词不对。不过很快社区维护者就给出了回应,并表示愿意把这个改造的机会给我,于是我就开始了长达半个月的K8s及其下游版本的安装调研以及改造。
打虎第三棒:对sealer的第一次Pull Request
加入一个CNCF认可的社区的好处是有CODE_OF_CONDUCT,CONTRIBUTING等等的引导文档,我很快学会了fork、rebase等Git技能。第一次的提交是关于修改错误反馈的Github Issue模板,也是首先把PR的流程熟悉起来。但在第一次提交PR的时候,关于DCO签名的第一项检查就失败了,在焦急中折腾了许久,终于把签名给弄好了,结果由于多次的提交,使得commits出现了分支。最终直接把这个PR又重新open了一次,第一次PR在3次意外后得到了社区的认可并合并。
逐步融入sealer
sealer支持k0s、k3s的安装功能将在不久后和大家见面了,以下是使用的简单演示,通过Kubefile将自己的应用打包进集群镜像中,通过sealer run即可启动一个k3s集群。
FROM k3s:v1.24.1
COPY imageList manifests
在完成参与开源的基本步骤后,我投入了核心模块runtime的重构,开发之前的设计稿打磨了很多个版本,在使用了Kubeadm、k0s、k0sctl、k3s-install等官方安装工具多次安装集群后,形成了各种集群的安装经验以及共性接口的抽象。其中也有不少问题的存在,例如:选用何种安装引导程序、管理集群的动作是否一致、配置文件修改镜像仓库为SeaHub:5000后能否从Registry中拉取镜像、如何制作k0s、k3s的集群镜像等等。
下图是我进行k0s、k3s、k8s引导程序调研时形成的草稿,通过研究k8s的各个下游版本的安装,帮助sealer完成了runtime模块的重构,补充了单元测试,方便后续扩展runtime的开发。
逐步参与社区会议
sealer社区每两周有一次Maintainer的会议,我非常喜欢这个会议,一群有着技术热情的同学,在这里处理一些Feature和Issue相关的问题,大家有不同的思路,为sealer的未来功能和Bug提出一些理解,帮助sealer社区建设地更好。记得第一次在社区会议发言比较慌张,刚好需要分享runtime的设计稿,设计稿已经写得蛮清楚了,但因为要介绍,同时要接受社区维护者的提问,发言的时候有一丝紧张。最终参与下来,发现大家都和蔼可亲,并没有提出质疑,相反给我了很多建议促进了思考。
参与开源之夏
第二种是在使用过程中发现错误并定位到代码,或者发现官方文档的描述不准确。这种时候可以通过提Issue并提交PR来引起社区对个人的关注。
当然,如果有很大的兴趣要参与开源社区,学会发送一封自荐的邮件是迈向社区的重要一步,同时在参与过程中,要及时的和社区维护者进行沟通交流,这样自己会收获更多的思路。
总结
开源是一种包容和开放的形式,引用《开源法则》中的一句话来说:“开源并不是免费的代名词,他是技术开放的成功实践,是创新得以持续发展的原动力,充满着机遇和风险。”
参与开源社区并不是一件轻松的事情,特别是想要将社区维护得更好。作为开源的新手,当没有丰富的代码经验和开源经验的时候,首先容易劝退的就是自己的内心。但作为新人我想:sealer现在很优秀,那我可以在社区中汲取营养,当成长到一定的程度,那我也可以反过来推动sealer的进步。回顾参与社区的这一个半月,现在面对sealer问题的时候,我可以轻松的在Github上提出或评论Issue,也可以在Maintainer Group参与讨论,sealer社区从代码规范、注释规范、功能设计、协同建设等方方面面给予了我快速成长的空间。
在此,感谢开源之夏提供的平台,感谢我的社区导师,感谢支持我硬件设备的父母。
当然,sealer也在用户和开发者的共同努力下朝着更加稳定的方向进步。在这里,也让我们一起期待sealer的生态将在未来更加强大。
文章评论