作者:OpenYurt 社区
背景
2021 年,中国开源软件推进联盟 COPU 牵头发布了《2021 中国开源发展蓝皮书》,涵盖当今全球开源的总体情况分析、开发者分析、项目分析、领域案例,绘制了一副"开源数字生态地图"。让我们全面地看到了开源领域的中国力量。报告指出:国内的企业,阿里开源活跃度排名第一,有的指标值甚至是其它公司之和,并且在社区化/开放等方面也做得不错。
同年,在中国科学院软件研究所面向高校学生发起的第二届“开源软件供应链点亮计划系列暑期活动”,即“开源之夏”中,阿里云原生开源大家族共有 14 大开源项目加入其中。通过积极参与活动,同学们在顶级开源导师的指导下,深度体验了真实世界的软件开发,感受到了开源技术共建的魅力,同时也为国内优秀开源软件社区的蓬勃发展贡献出了一己之力。
虽然距“开源之夏”已过了大半年的时间,由阿里云原生开源的 OpenYurt 项目,以其非侵入的设计思想、部署过程中的丝滑体验、被多次提到的“易用性”、社区活跃开放的氛围以及富有前景的发展方向仍然吸引着越来越多热爱开源的伙伴参与其中。在“开源之夏——OpenYurt 体验中心”,同学们能够以低门槛的方式快速上手并参与到项目当中,解决实际问题。从旁观者到社区贡献者的角色转变之间,让我们通过采访内容,一起看看他们的真实感受,以及有哪些意想不到的收获。
采访问答
陈涛,浙江大学软件学院在读研究生刘佳文,浙江大学软件学院在读研究生陈璐,同济大学软件学院在读研究生
- 请做个自我介绍,让大家很好地认识你~
陈涛:大家好,我叫陈涛,现在是一名浙江大学软件工程的在读研究生。
刘佳文:大家好,我是刘佳文,目前是浙江大学软件学院研二的学生。
陈璐:Hi, 大家好,我是陈璐。现在是同济大学软件学院一名研究生。
- 平时有什么爱好?从什么时候开始喜欢上编程?以及如何接触到“开源”文化?
陈涛:平时的爱好主要就是读书,看电影,跑步。抛开高中的计算机课程,真正了解深入编程还是因为本科选择了软件工程这个专业。作为小白,起初在建立与计算机之间的“沟通”过程中,遇到了很多困难,但是随着专业知识面的不断拓展,逐渐喜欢上了编程这种直接、富有逻辑性的人机沟通方式。
计算技术的发展日新月异,许多技术问题可能并不是在书里就可以找到,在解决问题的过程中,会很自然地接触到开源项目,因为你遇到的问题很可能在最新的讨论中加以解决,这种开放、共享的开源文化,也是我认为计算机技术快速发展的重要创新来源。
刘佳文:日常除了搬砖,一般就是刷刷剧。编程的话是因为专业的原因,慢慢接触,有所产出的时候就带来了正反馈,促使自己不断学习新知识。在这个过程中,就接触到了开源项目。
陈璐:平时喜欢阅读,乒乓球,追剧,篮球(排名已分先后: >)。接触编程还是因为大学选择了计算机专业,但是后来幸运地发现当初误打误撞选的专业意外地契合自己喜欢折腾的 nerdy 气质。
接触开源自然也是“折腾”路上一件顺理成章的事情。在服务器上搭博客,尝试个人 RSS 服务,踩坑后去 StackOverflow 搜回答,去 GitHub 提 issue,有时遇到解决不了的问题自己写 PR。在这个过程里不自觉地就参与了开源社区。
- 为何选择参加“开源之夏”,希望得到哪些收获?
陈涛:之前自己在社区里主要处于潜水状态,大部分时间只是看看有没有可用的“轮子”来解决问题,但是心里其实一直有造轮子的想法,也是希望参加开源之夏的过程中,从一位旁观者转变为贡献者。
刘佳文:在参加开源之夏之前,我已经在参与 OpenYurt 社区的工作,后来看到 OpenYurt 也参与了开源之夏,所以就选择参加了这个活动。一方面想要更加深入了解相关的技术,另一方面也能够更加积极参与社区贡献。
陈璐:“开源之夏”活动是受同学安利参加的。当初参加这个活动只是抱着试试看的心态给自己暑假找点事做,现在看来这个活动给我的收获远超过我最初的期待。
- 在参加开源之夏活动前,对 OpenYurt 是否有过了解?在众多项目中为什么选择 OpenYurt?
陈涛:由于研究生的方向是边缘计算方向,就把目光锁定在了与边缘计算相关的项目上,选择 OpenYurt 是因为其非侵入的设计思想。刚接触 OpenYurt 时,自己只使用过 Docker、 Kubernetes,原本下意识会感觉涉及到边缘的项目使用起来会比较复杂,但是无论部署还是使用过程都十分的丝滑,与 Kubernetes、容器等云原生技术做到了很好地融合。我认为在支持众多边缘特性和场景的同时,能够兼容云原生特性,是一个很好地设计模式。
陈璐:参加活动之前,我完全是一个边缘云原生领域的小白,只在几篇技术文章中对 OpenYurt 略有耳闻,OpenYurt 于我还处于“犹抱琵琶半遮面”的状态。选择 OpenYurt 也是希望能通过这个项目到一个新的领域“见见世面”,开拓一片新地图。
- 如何看待 OpenYurt 所在的边缘云原生这个领域的技术价值?
陈涛:随着云计算能力的不断下沉,将分散但总量丰富的边缘计算资源纳管进来已经成为趋势。同时云原生技术作为云背景下诞生而出的一系列技术,可以充分利用云计算资源,已逐渐成为标准。因此在纳管边缘设备的过程中,如何利用云原生技术屏蔽底层设备差异,使得云上云下环境统一,是一个十分具有挑战和价值的方向。
刘佳文:OpenYurt 相比于其他方案,由于它对 Kubernetes 的非侵入性,开发者和使用者都能感受到它的易用性。另外,针对边缘场景的难题,OpenYurt 也设计了各种方案解决,给边缘云原生这个领域中的难题提供了不同的解决思路。
陈璐:OpenYurt 致力于打造一个边缘云原生领域的基础设施平台。由于 Kubernetes 作为云原生事实上的标准最初是为数据中心设计的,并没有考虑很多边缘场景的特殊需求(比如不稳定的网络环境等)。OpenYurt 在做的事情是去针对这样的场景对 Kubernetes 做一些非侵入式的改进和拓展。
- 在刚刚上手 OpenYurt 这个项目的时候,是否遇到过什么困难?如果有,请展开介绍下吧~
陈涛:刚开始遇到的困难主要在源码阅读方面,这是我第一次面对较大的架构,面对许多组件,不知道从哪里入手,可能看某个特性的过程中,就会飘到其他的代码里,甚至会出现读着读着就忘记之前代码的情况......对初窥门径的我来说确实会造成一定挫败感,但我认为这是接触每一个陌生项目时都必须经历的阶段。后来慢慢熟悉过程中也逐渐产生了一些自己的经验,例如:把握主要脉络,不要沉溺到不重要的细节中;巧用调试,在运行过程中可以很好地观察运行逻辑;以及多做笔记,将关键点和思考记录下来。
刘佳文:刚上手的时候遇到的困难主要还是集群的搭建,当时社区集群搭建的工具功能比较简单,过程中遇到的问题还是需要自己手动排查。不过现在社区相关工具已经很完善了,对新手也很友好。
陈璐:坦率讲,OpenYurt 是有一定学习成本的。首先它要求对 Kubernetes 有一个基本的了解,要理解它的设计背景还需要结合一些边缘计算的知识,然后想要上手体验又至少需要一个分布式环境和一定动手能力。当然现在社区也注意到这些问题,比如我参与的体验中心项目尝试去做的事情就是希望降低 OpenYurt 的使用门槛。
- 了解到您主要参与贡献的部分是 OpenYurt 开发者体验中心,请向大家介绍下这个组件,包括设计的背景、实现方式、面临的挑战,解决的问题等
陈涛:OpenYurt 自开源以来,就吸引了许多关注边缘计算领域的开发者与使用者,但是由于使用者的背景不同,可能缺少 Kubernetes 等云计算领域的相关知识,当使用、搭建 OpenYurt 集群时,就会出现各种各样的问题,无法发挥出 OpenYurt 的能力。
在这个背景下,OpenYurt 社区考虑推出一个 OpenYurt 体验中心,用户只需要通过体验中心申请账号,就可以获得并连接上一个 OpenYurt 集群。与此同时,由于体验账户并非在生产环境中,也为了提高资源利用率,OpenYurt 体验中心将采用软多租技术,实现多个租户共享一个 OpenYurt 集群,确保用户看到完整 OpenYurt 集群的同时,保证资源的隔离与安全性。
在这个项目中,我主要负责开发 operator 管理租户和相关资源的生命周期,包括对租户 CRD 的设计、controller 的开发、租户证书签发等。其中印象较深的挑战可能涉及到租户证书这方面,因为要进行租户的身份认证,必须在证书上添加相关的租户信息,因此需要短时间内梳理整个 Kubernetes 和 OpenYurt 相关的证书管理逻辑,同时设计在非侵入的情况下,完成认证信息的注入,这在当时花了较长时间。
刘佳文:OpenYurt 体验中心由多个部分组成,我主要负责多租组件的设计开发,简单来讲就是根据请求中租户的信息对其请求进行检查以及修改,使得租户无法看到其他租户的资源情况。
在设计开发的过程中需要全面的考虑租户的各类请求以及对应的请求如何处理,最终对于租户来说体验中心能够有较高的安全性。另外,为了实现请求处理的整个流程,还需要对 API-Server 处理请求的流程有详细的了解,所以就要求在较短的时间内对 API-Server 源码的阅读,并能够掌握运用。这对我来说是一个不小的挑战。
陈璐:体验中心的架构比较复杂,具体设计和实现可以参考 OpenYurt 体验中心[1]介绍文档。我主要负责其中 yurt-dashboard 的部分,实际上是一个包含前后端的 Web 应用。由于该项目的前后端开发都由我一个人完成,所以对我开发能力提出了很高的要求。在设计与实现过程中也遇到了一些 trivial 的问题,这里我举一个例子:
如何设计 Kubernetes API Client?为了在项目中更便捷的使用 client-go 提供的访问 Kubernetes API 的能力,如何设计一套满足易用性,可拓展性的访问接口。这个问题困扰了我很久,针对这部分的逻辑,我前后重构了几个版本,希望找到一个合理的方案。
a. 直接调用 client-go 中提供的接口函数,抽象出常用函数,不进行类的封装。(可扩展性不足,代码冗余严重,难以测试) b. 抽象出一个 resourceClient 类,所有访问请求经过该类发出。(可扩展性不足,不同资源需要不同请求逻辑时通过 switch 来区分,不满足 *拓展大于修改* 的设计原则) c. 为每个资源定义一个 Client 类,将所有资源共用逻辑放到 baseClient 基类。(有一定冗余,可拓展性强)
另外,与我之前熟悉的“面向答辩编程”的玩具项目不同,这个项目最终会上线供实际用户试用,这种直面用户的压力对我的编码规范性,设计合理性提出了很高的要求。在开发过程中,很多地方都需要仔细考量是否符合实际,会不会影响系统可用性,是否会影响系统的可扩展性。软件开发领域有一句著名的谚语,“Make it work, make it right, make it fast”。如果说我之前的开发经历大多停留在 "make it work" 的阶段, 这个项目让我站上更高的地方,能尝试从 "make it right, make it fast" 的角度来思考。当然受限于个人水平,最终实现效果也只是差强人意,但能在开源之夏项目中拥有这样珍贵的机会,我十分感激。
- 现在距离 2021 年开源之夏的举办已经过了大半年的时间,是什么动力让你一直留在 OpenYurt 社区并参与贡献?
陈涛:除了自身的研究方向以外,还因为社区活跃开放的氛围,富有前景的发展方向。在 OpenYurt 社区里,可以找到自己感兴趣的点进行深入参与,从刚开始解决一些 good-first-issue,到承担重要特性并被认可的过程中,可以收获极大的成就感。
刘佳文:一方面因为自身研究方向为边缘云原生这方面,日常的学习工作都围绕这一块内容;另一方面选择一个优质的开源项目并持续贡献,也会让自己很有成就感。
陈璐:动力当然是体验中心在不断迭代的需求(逃 >哈哈,开个玩笑。我觉得是 OpenYurt 很棒的社区氛围让人乐在其中,一句话来总结就是“一群专业的人,相互信任,做一件有价值的事”。
- 回顾在 OpenYurt 社区的贡献经历,是否达到了你参与开源之夏活动的预期?有什么意料之外的收获,或者有意思的故事和大家分享吗?
陈涛:已经完美达到了我的预期,即从一个旁观者转变为参与者。意料之外的收获可能就是在代码以及文档被不断 review 的过程中,越来越规范,以前可能不会太过注重这方面,但是参与到该 OpenYurt 以后,自己写代码的过程中就会不知不觉的考虑易用性、可移植性等方面,我认为这是我一个比较大的收获。
刘佳文:意料之外的收获的话,应该是在报名这个活动刚开始,以为只是针对需求进行开发,项目结束就是终点。没想到活动结束之中并且之后,社区仍然不断跟进我们的项目,让我们有机会给大家分享。这些持续性的反馈更让我感受到了开源的魅力。
陈璐:就像之前提到的,从这个项目得到的收获远远超出我的预期。在完成项目的过程中,昌蒲和新胜两位导师给了我很多帮助,在系统设计,原型设计,具体实现细节等各个方面都给予了我很多积极的反馈和有效的建议,而且不厌其烦地帮我这个 Kubernetes 初学者解答一些 silly questions。这个项目的完成离不开他们的指导与帮助。 另外由于本项目还涉及与陈涛和佳文两位同学的合作,所以我们还会有定期的 sync 会议来同步进展。大家一起分析、解决问题的经历也十分愉快,让我认识了这些新的朋友。
- 最后,有什么话想对正在参与开源社区贡献,或是参加开源之夏活动的同学说吗?
陈涛:通过此次经历,我体会到,在参与开源的过程中,不仅仅是单纯地解决问题,由于开源项目开放的特点,所有合入的代码都要考虑到易读性、可扩展性等,包括规范代码、怎样设计可以更加优雅与通用以及编写相关文档等项目的方方面面。而在代码、文档被不断 review 和修改的过程中,也会极大地提升自己在复杂项目中参与合作的能力。
刘佳文:我觉得对于已经参与过开源社区贡献的同学来说,可能会更加注重在社区中更加主动、积极的参与到社区的讨论中,提升自己的参与度。对于还没有参与过贡献的同学来说,以我为例,我当时不知道为社区贡献什么、怎么贡献,结合我自己的经历来看,如果身边有参与开源的同学,可以多问问,如果没有,也可以大胆的在社区提交 issue 寻求帮助。
陈璐:不必有太多顾虑,放轻松,参与社区的门槛一定没你想的那么高。参与一次讨论,提一个修 typo 的 PR,这些都是你在为社区变得更好做出的贡献。而一旦你度过最初的陌生阶段,社区最终会回馈你意想不到的收获。
关于 OpenYurt
OpenYurt 基于原生 Kubernetes 构建,由阿里云于 2020 年 5 月开源,并于同年 9 月份入选 CNCF SandBox 项目,是业界首个对 Kubernetes 无侵入的边缘计算云原生开源平台。
OpenYurt 主打 “云边一体化” 的概念,针对边缘计算场景中的网络环境复杂、大规模应用交付、运维困难等痛点,提供了边缘自治、云边运维通道、单元化部署、一键式集群转化等能力,通过将云边节点统一管理,使得边缘节点拥有与云端相同的能力,帮助开发者轻松完成在海量边缘资源上的大规模应用交付、运维、管控。
在过去两年内,OpenYurt 已实现全网覆盖和本地覆盖的全场景落地,全网覆盖的应用场景如 CDN、音视频直播、物联网、物流、工业大脑、城市大脑等;本地覆盖的应用场景和案例如阿里云 LinkEdge、优酷、盒马、AIBox、银泰商城等。
欢迎加入 OpenYurt 体验中心
OpenYurt 作为边缘云原生项目,涉及到边缘计算和云原生两个领域,许多边缘计算的开发者不熟悉云原生相关的知识。为了降低 OpenYurt 的使用门槛,帮助更多地开发者快速上手 OpenYurt,社区推出了 OpenYurt 体验中心这一平台。想要尝试 OpenYurt 能力的新用户无需从头搭建 OpenYurt 集群,只需要在平台上申请一个测试账号,即可马上拥有一个可用的 OpenYurt 集群。
相关链接
[1]OpenYurt 体验中心:
https://openyurt.io/docs/installation/openyurt-experience-center/overview
[2] OpenYurt 官网:
点击此处,立即了解 OpenYurt 项目!