开源项目的演进会遇到哪些“坑”?KubeVela 从发起到晋级 CNCF 孵化的全程回顾
Aliware 一个开源项目的发起,其最核心的是明确项目的目标和定位。 OAM/KubeVela 诞生之初的 2018-2019 年,当时我们判断:随着云原生技术逐渐统一基础设施和工作负载层面的抽象,如何进一步简化和标准化应用交付与管理层面的操作和功能,会成为接下来一个非常自然的演化方向,也会成为市场的下一个焦点。这里面我们主要考虑了四个方面:
- 受众
- 定位和空间
-
行业格局
- 技术储备
Aliware 开源项目的早期通常是沿着最初设定的目标去补齐核心功能,在此之前我们可能需要回答一个问题:“ 为了让我们的开源项目与众不同,我们该遵循怎样的设计原则? ” KubeVela 项目的第一个年头是核心技术功能初步形成的阶段,设计之初我们给项目定下的关键原则是:
- Kubernetes 原生
- 可扩展
- 可编程
Aliware KubeVela 基本上就是在 OAM 社区的众多用户呼声下诞生的,那些早期参与贡献的工程师们,他们其实也同时是公司里面积极推进 OAM 落地的平台构建者,他们不仅提供了大量的建议和代码贡献,还通过自身的实际场景帮助社区做验证。我们知道一个新技术的推广,很重要的一点是 在解决原有问题的同时,尽可能降低采纳的成本,也就是不引入新的问题。 所以当 KubeVela 发布的第一个版本的时候,我们的早期采纳者他们更多的是在做一个自身 OAM 实践的升级,而不是使用一个全新的系统。同样地,在后续的项目迭代过程中,对兼容性的考量一直都放在首要的位置。 当 KubeVela 项目的第一阶段功能实现完成,并被开源社区逐步采用的过程中。根据大量的用户反馈和调研,我们发现,除了基础的工作负载和运维需求之外,用户还会有诸如多集群高可用、资源共享、资源回收等应用管理策略的需求,而看似非常碎片化和复杂的各类应用交付场景,其背后确实存在一个非常本质的模型,那就是“工作流”。我们很快就开始同时演进 OAM 模型本身,并且在 KubeVela 实现了一个非常轻量级的工作流引擎。而“工作流”这个特性本身就又与 Kubernetes 和 GitOps 生态天然互补, KubeVela 的工作流步骤可以任意扩展,而声明式 API 面向终态的语义也可以很好的描述工作流的状态机,这使得 KubeVela 的工作流几乎可以满足任何交付场景的需要 ,所以这个创新后来也成为了 KubeVela 被大量采用的“杀手锏”。
Aliware KubeVela 的理念是业界领先的,所以我们一直在做大量布道,许多用户被我们吸引过来。然而许多用户反馈说,看了 KubeVela 项目官网,看不懂这个项目是做什么的。此时我们意识到,项目的易用性出了问题。我们把自己从项目维护者的身份中走出来,开始作为用户审视这个项目,对于首次接触项目的新用户,我们问自己三个问题:
- 第一个问题:我能一下子看明白项目解决的是什么问题吗?
- 第二个问题:我能一下子联想到我的场景是否能够用它吗,或者它能满足我的需求吗?
- 第三个问题:我想试一下项目的实际运行效果,我能在几分钟只能快速体验完整的 Demo 吗?
Aliware 随着项目的逐步成熟,社区会迎来一批又一批的用户,而开源项目成功的核心就是大量的用户采纳。KubeVela 很幸运,一直有阿里巴巴内部大量的场景可以帮助打磨孵化,而我们也非常注重社区用户的需求。除了每周定期举办国内外社区会议,还会组织跟不同企业的点对点交流会,甚至帮助他们制定完整的平台架构。而这个过程的积累也是相互的,KubeVela 维护团队从各行各业的头部企业中了解了行业的现状和差异化痛点,得以从更广阔的视野做功能的设计。 在社区用户的过程中,我们也总结了一些关键经验: 1. 如何给到开源用户安全感? 对于基础设施类的开源项目,一旦采纳就会成为企业内部核心架构的一部分,相比于企业内部自建,采纳开源往往会缺乏一些安全感,开源项目本身如何给到企业安全感至关重要。首先是 项目维护团队的多样化、长期稳定性以及高活跃 ,KubeVela 是 CNCF 托管的孵化项目,背后有阿里云、招商银行、Napptive 等多个公司在持续维护。同时要 持续对代码质量保持较高的要求、注重安全问题和稳定性 ,KubeVela 有 40 多项持续集成测试条目,总体测试覆盖率超过 60%,核心场景的覆盖率在 90% 以上,基本上每个合并的代码都能保证兼容性,同时对代码贡献者本身的能力也有较高的要求。而团队对安全问题的上报和稳定性问题也始终保持高度敏感,一旦发现会第一时间发布修复版本。最后是 提供确定性,有明确的里程碑、发版计划 ,并且坚定的执行。 KubeVela 发布至今每隔 2-3 个月发布一次大版本,每隔 1-2 周发布一个小版本,社区一直保持极高的活跃度,至今已经发布了超过 150 个版本,每个版本都有清晰的变更文档。 2. 如何平衡社区用户的小众需求? 社区用户在落地过程中由于场景的差异,必然会产生相对小众的需求。对于这一点,我们的策略是 Blocker Issue 优先,即如果由于一些功能设定和实现直接阻碍了场景落地,那么这类问题要第一时间解决。对于功能新增类的需求,则交由社区一同评估等待更多的反馈,确认是一个相对普遍的需求再加入到版本计划中。例如 KubeVela 早期有一些用户希望对接他们企业内部的统一认证平台,这可能并不是标准的协议模式,通过社区 Issue 的来会讨论,有贡献者指出采用了 Dex 作为企业单点登录的统一方式,不同企业自行对接 Dex 即可。这使得项目能够群策群力,着眼于长远发展。 3. 如何获得海外用户? 基础设施领域的开源项目,要想获得真正意义上的成功,如何打开国际化市场是一个绕不开的话题。一方面,项目本身要始终着眼于领域的最前沿,保持技术的先进性,聆听国外用户的使用场景和习惯,对技术发展趋势做出敏锐的判断。另一方面,KubeVela 的核心团队均在国内,也克服了包括时差、语言、文化在内的诸多客观困难,一直坚持在北美相对合适的时间召开社区会议,持续在 KubeCon 等各类海外大会布道,文档、文章始终用中英文双语发布,同时积极活跃在 Slack、Issue 中答疑,满足国外用户希望点对点沟通交流的诉求。 这不仅需要项目维护者有较强的综合实力,也需要对项目真正的热爱。 团队也在积极培养海外贡献者,随着 KubeVela 生态的不断繁荣,Napptive、Guidewire 等企业合作伙伴也在陆续加入社区,共同承担项目维护的职责。
Aliware 最后我们要谈一谈社区生态,因为做好一个开源项目绝不仅仅是做一项前沿的技术,它更像是在目标领域打造一款好的产品。除了打磨产品功能,我们还需要通过对项目持续运营、对社区治理,得到更多开发者的认可,让他们参与进来贡献。要实现这样的目标,就需要让开发者对 KubeVela 形成共识、主动加入并参与协作。 KubeVela 诞生于 OAM 社区,也是第一个将“以应用为中心”的设计理念落地的项目。因此早期,我们首先要让大家理解 OAM 模型的思想,大家才会有意愿开始了解 KubeVela 是什么。我们做了大量的布道,并联合 CNCF 发布业界首个“云原生技术公开课”,介绍 OAM“以应用为中心”的理念如何解决云原生时代应用开发问题,得到了越来越多开发者的共鸣。发展到 2021 年 5 月,阿里云联合信通院发布业内首个以 OAM 为核心的“云计算开放架构”标准,将 OAM “模型”化虚为实,也对 KubeVela 发展起到关键作用。 为使社区保持持续的生命力,2021 年 7 月,KubeVela 正式加入 CNCF ,项目受众也扩大至全球。我们投入了很多精力做海外运营,比如联动 CNCF TAG App Delivery,以及 Argo、FluxCD、Prometheus、K3s 等生态伙伴举办社区会议、在主流的海外开发者社区建立团队账号,渐渐将影响力渗透到北美、日本、西班牙、英国等多个国家。为了让周边生态繁荣起来,以便能够让项目在更大的领域得到广泛的传播,为此我们专门建立了一个插件(Addon)体系,方便社区里的开发者可以将生态项目的集成,方便地制作成一个具备版本、统一仓库、可发现、可分发、一键安装的插件包。
Aliware [1] KubeVela https://kubevela.net/ [2] Helm/Kustomzie 应用管理 、 多集群应用交付 https://www.infoq.cn/article/sbwSX8ypxgID2-SB723K [3] Terraform Controller 项目 https://github.com/kubevela/terraform-controller [4] CUE 配置语言 https://cuelang.org/ [5] VelaD https://github.com/kubevela/velad