作者:周欣元
个人简介
大家好,我是周欣元,本科就读于杭州师范大学,往年 9 月将去往云南大学进行研究生学习。本科钻研方向为 docker 容器在网络攻防中的利用,目前作为 sealer member 退出了外围模块 sealer runtime 的研发工作。
个人主页:https://github.com/starComingup
引言
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 的一段成长故事来率领大家体验从小白到外围性能开发者的开源之旅,同时本文也作为一篇引领开源小白入门的文章供大家参考。
参加 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 buy in all”,开源代码和社区并不是 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 的设计稿,设计稿曾经写得蛮分明了,但因为要介绍,同时要承受社区维护者的发问,发言的时候有一丝缓和。最终参加下来,发现大家都和颜悦色,并没有提出质疑,相同给我了很多倡议促成了思考。
作为老手如何参加开源的社区
第一种是有明确指标的,开源社区制订的 RoadMap。这种状况下开源社区个别会通过一些开源流动来招募社区志愿者,这样的机会每年都有,例如国内外开源之夏,以及各个互联网厂商定期给出的开源命题,这些命题大多数违心给学生机会。
第二种是在应用过程中发现错误并定位到代码,或者发现官网文档的形容不精确。这种时候能够通过提 Issue 并提交 PR 来引起社区对集体的关注。
当然,如果有很大的趣味要参加开源社区,学会发送一封自荐的邮件是迈向社区的重要一步,同时在参加过程中,要及时的和社区维护者进行沟通交流,这样本人会播种更多的思路。
总结
开源是一种容纳和凋谢的模式,援用《开源法令》中的一句话来说:“开源并不是收费的代名词,他是技术凋谢的成功实践,是翻新得以继续倒退的原动力,充斥着时机和危险。”
参加开源社区并不是一件轻松的事件,特地是想要将社区保护得更好。作为开源的老手,当没有丰盛的代码教训和开源教训的时候,首先容易劝退的就是本人的心田。但作为新人我想:sealer 当初很优良,那我能够在社区中吸取养分,当成长到肯定的水平,那我也能够反过来推动 sealer 的提高。回顾参加社区的这一个半月,当初面对 sealer 问题的时候,我能够轻松的在 Github 上提出或评论 Issue,也能够在 Maintainer Group 参加探讨,sealer 社区从代码标准、正文标准、功能设计、协同建设等方方面面给予了我疾速成长的空间。
从软件应用到提 Issue 再到发动 Pull Request,从用户转变为开发者,如此一个参加开源的切入点是开源小白不错的起步形式。
当然,sealer 也在用户和开发者的共同努力下朝着更加稳固的方向提高。在这里,也让咱们一起期待 sealer 的生态将在将来更加弱小。
欢送钉钉扫描下方二维码或搜寻群号 34619594 退出 CNCF sealer 社区交换钉群!
戳此处,立刻理解 sealer 我的项目!