开源小白到核心开发——我与 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 社区,以及 http://sealer.io 社区,且后两个社区的项目可以说互相替代(KubeKey 和 sealer)。为什么最终聚焦在了 sealer,我想有三个坚定不移的原因:

  1. sealer 是 CNCF Sandbox 项目。相信大家多多少少见过 CNCF 的 Landscape 全景图,以及项目成长三个阶段:Sandbox,Incubating,Graduated。我想是否能让一个从沙箱到孵化最终到毕业的项目陪伴我的成长。
  2. sealer 具有“集群镜像”这一创新力。作为一个 docker 用户,我赞叹于 dockerfile 以及 docker 镜像技术带来的便利。看到集群镜像后,我又不由自主的想象 sealer 是如何将云基础设施封装于 Kubefile。
  3. 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 集群。

 

在完成参与开源的基本步骤后,我投入了核心模块 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 的生态将在未来更加强大。

作者:周欣元

原文链接

本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/510433.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全链路灰度新功能:MSE 上线配置标签推送

背景 微服务场景下,全链路灰度作为一种低成本的新功能验证方式,得到了越来越广泛的应用。除了微服务实例和流量的灰度,微服务应用中的配置项也应该具备相应的灰度能力,以应对灰度应用对特殊配置的诉求。 为什么需要配置标签推送…

万节点规模云服务的 SRE 能力建设

背景及现状 系统架构简介 上图为阿里云内部实际使用的系统架构,系统主要用途为实时数据流的计算和存储。使用阿里云的容器服务 ACK 作为系统底座,容器化的部署、发布、管控等全部基于 K8s 标准。使用自己开发的 Gateway service 作为系统流量入口&#…

阿里云 ACK 容器服务生产级可观测体系建设实践

ACK 可观测体系介绍 全景概要介绍 上图为 ACK 可观测体系全景图金字塔,从上至下可分为四层: 最上层是最接近用户业务的 Business Monitoring,包括用户业务的前端的流量、PV、前端性能、JS 响应速度等监控。通过容器服务的 IngressDashboard…

中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结

中仑网络在 2022 年完成了服务框架从 Dubbo 2 到 Dubbo 3 的全站升级,深度使用了应用级服务发现、Kubernetes 原生服务部署、服务治理等核心能力。来自中仑网络的技术负责人来彬彬对整个 Dubbo 3 的选型、升级过程及收益等做了深入总结。 来彬彬,2020 年…

基于 OpenYurt 和 EdgeX 的云边端协同新可能

2022 EdgeX 中国挑战赛暨中关村国际前沿科技创新大赛 EdgeX 专题赛正式拉开帷幕。本次大赛分设两大赛道:医疗、教育、消费行业赛道和能源、工业、供应链赛道。大赛致力于构建一个物联网及边缘计算的学习和分享平台,基于 EdgeX Foundry、OpenYurt 等开源技…

OSCAR 2022 开源产业大会PolarDB-X、 PolarDB-PG获奖揭晓

9月16日,OSCAR 2022 开源产业大会在京召开,会议由中国信息通信研究院、中国通信标准化协会主办,中国通信标准化协会云计算标准和开源推进委员会承办。此次会议以“千行百业 可信开源”为主题,邀请上百位专家大咖和国内主流的开源社…

App 隐私合规“免费”自动化检测

一、为什么要进行App隐私合规检测 2021年11月1日《个人信息保护法》正式生效;今年6月14日,国家互联网信息办公室公布《移动互联网应用程序信息服务管理规定》,这是针对App的最强监管新规,于8月1日起正式实施。新规要求应用程序提…

跨模态学习能力再升级,EasyNLP 电商文图检索效果刷新 SOTA

导读 多模态内容(例如图像、文本、语音、视频等)在互联网上的爆炸性增长推动了各种跨模态模型的研究与发展,支持了多种跨模态内容理解任务。在这些跨模态模型中,CLIP(Contrastive Language-Image Pre-training&#x…

EasyNLP 带你实现中英文机器阅读理解

导读 机器阅读理解是自然语言处理(NLP),特别是自然语言理解(NLU)领域最重要的研究方向之一。自1977年首次被提出以来,机器阅读理解已有近50年的发展史,历经“人工规则”、“传统机器学习”、“…

一文剖析 PolarDB HTAP 的列存数据压缩

前言 数据库迁移上云是大数据时代的一大趋势,PolarDB MySQL是阿里云自研的云原生数据库,主要处理在线事务负载(OLTP, OnLine Transactional Processing),深受企业用户的青睐。当下,数据分析对于企业的重要性越发显著:…

技术解读:现代化工具链在大规模 C++ 项目中的运用

编者按:C 语言与编译器一直都在持续演进,出现了许多令人振奋的新特性,同时还有许多新特性在孵化阶。除此之外,还有许多小更改以提高运行效率与编程效率。本文整理自全球 C 及系统软件技术大会上的精彩分享,接下来由作者…

如何将传统 Web 框架迁移部署到 Serverless 架构?

与其说 Serverless 架构是一个新的概念,不如说它是一种全新的思路,一种新的编程范式。 但是原生的 Serverless 开发框架却非常少。以Web框架为例,目前主流的Web框架“均不支持Serverless模式部署”,因此我们一方面要尝试接触Serv…

EasyNLP 发布融合语言学和事实知识的中文预训练模型 CKBERT

导读 预训练语言模型在NLP的各个应用中都有及其广泛的应用;然而,经典的预训练语言模型(例如BERT)缺乏对知识的理解,例如知识图谱中的关系三元组。知识增强预训练模型使用外部知识(知识图谱,字典…

PolarDB-X 源码解读系列:DML 之 INSERT IGNORE 流程

在上一篇源码阅读中,我们介绍了 INSERT 的执行流程。而 INSERT IGNORE 与 INSERT 不同,需要对插入值判断是否有 Unique Key 的冲突,并忽略有冲突的插入值。因此本文将进一步介绍 PolarDB-X 中 INSERT IGNORE 的执行流程,其根据插入…

原根(详解+代码实现+例题+快速求解一个数的原根)

1.原根定义 假设一个数g对于P来说是原根&#xff0c;那么g^i mod P的结果两两不同,且有 1<g<P, 1<i<P,那么g可以称为是P的一个原根简单来说&#xff0c;g^i mod p ≠ g^j mod p &#xff08;p为素数&#xff09;其中i≠j且i, j介於1至(p-1)之间则g为p的原根。简单的…

文娱行业搜索最佳实践

内容搜索的价值主要体现在两个方面&#xff1a; 对用户而言&#xff0c;用户将搜索作为寻找内容的工具&#xff0c;目标是“搜的到&#xff0c;搜的准”。用户更关心搜索结果的相关性、时效性和多样性。 对平台而言&#xff0c;搜索是内容消费、流量引导的核心入口&#xff0…

一文搞懂 SAE 日志采集架构

日志&#xff0c;对于一个程序的重要程度不言而喻。无论是作为排查问题的手段&#xff0c;记录关键节点信息&#xff0c;或者是预警&#xff0c;配置监控大盘等等&#xff0c;都扮演着至关重要的角色。是每一类&#xff0c;甚至每一个应用程序都需要记录和查看的重要内容。而在…

无需编写一行代码,实现任何方法的流量防护能力

背景 微服务的稳定性一直是开发者非常关注的话题。随着业务从单体架构向分布式架构演进以及部署方式的变化&#xff0c;服务之间的依赖关系变得越来越复杂&#xff0c;业务系统也面临着巨大的高可用挑战。疫情期间&#xff0c;大家可能都经历过以下的场景&#xff1a; 线上预…

使用日志上下文聚合插件使能上下文查询及 Livetail

背景 在排查业务故障时&#xff0c;用户往往需要查看业务日志文件来定位问题。然而&#xff0c;当用户在使用SLS收集业务日志时&#xff0c;同一个Logstore中往往存放着不同的日志&#xff08;例如同一台主机上不同目录下的文件&#xff0c;抑或是同一个K8S集群节点上不同容器…

Koordinator v0.7: 为任务调度领域注入新活力

Koordinator[1]继上次v0.6版本[2]发布后&#xff0c;经过 Koordinator 社区的努力&#xff0c;我们迎来了具有重大意义的 v0.7 版本。在这个版本中着重建设了机器学习、大数据场景需要的任务调度能力&#xff0c;例如 Coscheduling、ElasticQuota 和精细化的 GPU 共享调度能力。…