开源小白到核心开发——我与 sealer 的成长故事

本文涉及的产品
MSE Nacos/ZooKeeper 企业版试用,1600元额度,限量50份
函数计算FC,每月15万CU 3个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 下面将以作者本人与 sealer 的一段成长故事来带领大家体验从小白到核心功能开发者的开源之旅,同时本文也作为一篇引领开源小白入门的文章供大家参考。

作者:周欣元


个人简介


大家好,我是周欣元,本科就读于杭州师范大学,今年 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,我想有三个坚定不移的原因:


  1. sealer 是 CNCF Sandbox 项目。相信大家多多少少见过 CNCF 的 Landscape 全景图,以及项目成长三个阶段:Sandbox,Incubating,Graduated。我想是否能让一个从沙箱到孵化最终到毕业的项目陪伴我的成长。 


  1. sealer 具有“集群镜像”这一创新力。作为一个 docker 用户,我赞叹于 dockerfile 以及 docker 镜像技术带来的便利。看到集群镜像后,我又不由自主的想象 sealer 是如何将云基础设施封装于 Kubefile。 


  1. 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 的开发。


1.png


逐步参与社区会议


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 社区交流钉群!


2.png


此处,立即了解 sealer 项目!

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
国内开源镜像站点
阿里开源镜像站:https://opsx.alibaba.com/mirror 网易开源镜像站:http://mirrors.163.
39193 1
|
10月前
|
API
Istio 使用ingress和gateway两种方式公开服务
本文档指导您完成Istio网关的部署与配置。首先安装`istiod`(步骤略过)。接着,创建`ingress.yaml`文件,定义Istio入口网关的服务、部署及权限设置,通过`kubectl apply -f ingress.yaml`命令应用。最后,创建Ingress资源,指定主机名、后端服务及TLS配置,实现对外部请求的路由管理。
871 1
|
10月前
|
网络协议 应用服务中间件 网络安全
odoo17在线聊天报错提示 Couldn‘t bind the websocket...
当 Odoo 17 报错 "Couldn't bind the websocket..." 时,通过检查和配置 WebSocket 端口、防火墙规则、代理服务器以及 Odoo 配置文件,可以有效解决此问题。确保每一步操作准确无误,最终重启相关服务,使配置生效。希望这些步骤能帮助您快速恢复 Odoo 的在线聊天功能。
341 1
|
运维 测试技术
拆分软件测试流程,一张图秒杀所有面试
本文主要介绍了软件测试流程的核心内容,包括需求分析、测试用例编写、测试执行、缺陷提交及回归测试等关键步骤。以迭代测试为例,详细说明了每个环节的具体操作和注意事项,并提供了一张测试流程图以便理解。测试流程确保了软件质量,是面试中常见的考察点。
742 7
拆分软件测试流程,一张图秒杀所有面试
|
Windows
Windows平台如何修改监听的服务名称?
【8月更文挑战第15天】在Windows平台上可透过注册表编辑器、命令提示符或第三方工具修改服务的显示名称。首先,通过注册表编辑器找到`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services`下的目标服务,修改其“DisplayName”键值。或者,在命令提示符中使用`sc config`命令来变更服务名称。此外,利用第三方工具如Windows Service Manager也能简化此过程。修改前请确保了解可能的影响并做好备份。
537 4
|
数据采集 算法 关系型数据库
在 MySQL 中使用 SOUNDEX?
【8月更文挑战第6天】
224 0
在 MySQL 中使用 SOUNDEX?
|
监控 JavaScript 前端开发
JavaScript与Nest.js:打造高性能的服务器端应用
Nest.js是Node.js的渐进式框架,融合OOP、FP和FRP,提供模块化、装饰器和依赖注入,助建高性能服务器应用。选择Nest.js的原因包括模块化设计、简洁的装饰器API和高性能基础(如Express或Fastify)。开始使用需安装Node.js和`@nestjs/cli`,创建项目、编写控制器。深入学习涉及模块化、服务的依赖注入及中间件。安全性优化涵盖HTTPS、CORS策略、限流和性能监控。
335 0
|
存储 移动开发 前端开发
HTTP请求中token、cookie、session有什么区别
HTTP请求中token、cookie、session有什么区别
449 0
|
移动开发 运维 安全
AIX操作系统下应用系统的维护与性能优化
AIX操作系统下应用系统的维护与性能优化
170 0
|
云安全 安全 网络协议
网络安全产品之认识防火墙
防火墙是一种网络安全产品,它设置在不同网络(如可信任的企业内部网和不可信的公共网)或网络安全域之间,通过监测、限制、更改跨越防火墙的数据流,尽可能地对外部屏蔽网络内部的信息、结构和运行状况,以此来实现网络的安全保护。
735 0