在互联网与云计算技术发展的日新月异过去五年中,应用研发人员对效率与敏捷的极致追求,终于把业界带进了一个崭新的云原生时代。而云原生理念的迅速普及,火了 Docker,红了 Kubernetes ,也间接让一个编程语言成为了如今服务端的“当家花旦”。不消多讲,这位在云原生领域里正红的发紫的“角儿”,就是 Golang。

不过,正如同 “PHP 不一定是最好的编程语言”一样,Go 语言本身也不是“万能钥匙”。Go 语言之所以能够乘上云原生这趟高速列车,究其原因,更多是与它如下几个特质密切相关:

  • 语法简单,容易上手。云原生社区是一个对开源和贡献者非常看重的生态,这就使得很少需要纠结于语法细节的 Go 语言迅速成为了这个社区的“不二之选”。否则的话,云原生 CNCF 社区里大量项目都得忙着讨论这个指针那个引用,什么 Kubernetes CRD 之类的创新设计估计都得凉。

  • golang.org 库非常丰富。咱们现代软件开发行业,讲究的就是“面向 library” 编程,谁没事儿都不会手撸一个 HTTP 框架或者并发库。开箱即用的库越多,咱研发效率就越高。在这一点上,Go 语言不仅有先天优势,而且雪球越滚越大,已然是云原生一霸了。

  • 部署简单。Go 语言项目开发完了,一个静态文件就可以运行了,特别适合直接扔在 Docker 里跑。大家可以想象一下如果 Kubernetes 是 Python 或者 Ruby 开发的,这玩意儿线上部署得多头疼。

  • 性能还不错,优化也相对简单。Go 语言不能说是性能之王,但它很好的平衡了性能和程序员的心智负担。对于 Docker、Kubernetes 这几个项目的定位来说,这个平衡点恰到好处。

所以到了 2020 年,Go 语言已经成为了”云原生“这个圈子最重要的一枚“入场券”:Linux 内核不懂,咱还有机会慢慢学;Go 语言不会?您可就真要寸步难行了。

而俗话说得好:要想语言学得好,动手练习不能少!咱们云原生社区最大的一个好处,就是 Go 语言开源项目多,优质的 Go 语言开源项目更多!从最底层的 containerd,到编排层的 Kubernetes,再到如今正红的发紫的 Istio,随便拿出一个来,那就足够咱们好好钻研一阵子了。

不过,这些知名项目现在大多已经比较成熟,基本上很少接受大颗粒的 feature 进去。而且即使提 Pull Request(PR)上去了,它的合并速度也是慢的令人发指。所以大家都在问,在云原生领域中,还有哪些比较早期的、热门的 Go 语言项目还能让咱们广大的 YAML 工程师们”一展宏图“呢?

这不,就在刚刚结束的、云原生领域最权威的 KubeCon 北美峰会 2020 上,由 Open Application Model (OAM)社区发布的 KubeVela 开源项目,着实让人眼前一亮。

更令人咋舌的是,仅仅在宣布开源的第四天,KubeVela 就直接登上了 GitHub 趋势榜 Go 语言区榜首的位置,其发展潜力可见一斑!

1.png

而在 KubeCon 上的三场 KubeVela/OAM 相关的技术演讲中,KubeVela 项目更是受到了 “360 度”的关注与好评。比如,在 CNCF 应用交付领域小组对 KubeVela 项目进行介绍的过程中,来自 Airbnb 的“网红” 云原生工程师 Melanie 全程直播了这个演讲,最后给 KubeVela 项目点了个大大的赞!

“如果我想要一个 K8s 上的 Heroku,该怎么办?”  
“那就用 KubeVela 吧!”

2.png

看到这,相信你已经对这个项目充满了好奇。GitHub 趋势榜 Go 语言第一,这个项目到底是什么来头

KubeVela 是什么?

一言以蔽之,KubeVela** 是一个简单易用且高度可扩展的应用管理平台与核心引擎**。KubeVela 是基于 Kubernetes 与 Open Application Model(OAM) 技术构建的。

详细地讲,KubeVela 是一个非常低心智负担的云原生应用管理平台,核心功能是让开发人员方便快捷地在 Kubernetes 上定义与交付现代微服务应用,无需了解任何 Kubernetes 本身相关的细节。在这一点上,KubeVela 可以被认为是云原生社区的 Heroku

再通俗点说,如果你是一个应用开发人员,想要在 K8s 上部署应用,再也不需要去学习复杂的 K8s 知识啦,只需要使用 KubeVela 就可以简单的上手各种 K8s 的功能。

另一方面,对于 PaaS 平台团队来讲,KubeVela 是一个强大并且高可扩展的云原生应用平台核心引擎。基于这样一个引擎,平台团队可以快速、高效地以 Kubernetes 原生的方式在 KubeVela 中植入任何来自云原生社区的应用管理能力,从而基于 KubeVela 打造出自己需要的云原生平台,比如:云原生数据库 PaaS、云原生 AI 平台、甚至 Serverless 服务。在这一点上,KubeVela 可以被认为是一个“以应用为中心”的 Kubernetes 发行版,以 OAM 为核心,让平台团队可以基于 KubeVela 快速打造出属于自己的 PaaS、Serverless 乃至任何面向用户的云原生平台项目。

为什么能这么火?

在不久前 KubeVela 项目负责人接受国内某技术媒体的专访中提到:“目前,很多业务用户对‘云原生’、Kubernetes 的价值其实普遍缺乏体感,这个情况在整个社区里都是个让人头疼的问题。这里最根本的原因,在于 Kubernetes 与用户之间,还存在着一层名叫“应用层”抽象亟待填补”。

诚然,Kubernetes 和云原生技术的各种核心概念,距离业务用户其实很遥远。通过这些技术实际的落地过程也不难看出,仅仅有基础设施层抽象,离云原生“丝般顺滑”的云端应用管理与交付体验,还是存在着巨大的鸿沟。

而 Open Application Model(OAM)开放应用模型,以及它的 Kubernetes 实现 KubeVela 项目,正是阿里云联合微软等云原生社区中坚力量,共同推出的“以解决用户侧诉求”为核心的云原生应用层项目。其中,OAM 的设计思想是为包括 Kubernetes 在内的任何云端基础设施提供一个统一、面向最终用户的应用定义模型;而 KubeVela,则是这个统一模型在 Kubernetes 上的完整实现

“只有当业务研发接触到的是‘代码’、‘应用’,而不是 ‘Pod’、‘StatefulSet’ 时,让研发专注于写代码’这个美好、朴素的云原生愿望,才能够真正得以实现”,张磊这样表示。

我能成为 KubeVela 项目的贡献者吗?

当然!

而成为 KubeVela 贡献者的主要基础,自然是 Go 语言啦。详细的说, KubeVela 对如下几个 Golang 生态工具有依赖:

  • Golang 开发环境:1.13+;
  • Ginkgo 1.14.0+ ,Ginkgo 是 KubeVela 运行 E2E 测试的依赖;
  • Golangci-lint 1.31.0+,Golangci-lint 是 KubeVela 检查你的代码风格和规范是的依赖。

除此之外,KubeVela 会希望你对 Kubernetes 有一些基本的了解。当然了,成为 Kubernetes 专家大可不必:有了 Go 语言这枚”入场券“,你还有啥可担心的。

另外,贡献 KubeVela 之前,请你一定要详细阅读它的贡献者文档,这个文档里还链接了 KubeVela 的详细设计文档,这个应该说是贡献者必读的一篇参考资料。

那么 KubeVela 项目中,又有哪些技术点可以贡献呢?

作为一个”高可扩展“的云原生应用平台,KubeVela 是一个几乎每一个特性都是可扩展、可插拔,有着很高可玩度的一个项目。

这不,就在 KubeVela 开源的第二天,来自社区的贡献者就已经为 KubeVela 加上了Contour Ingress 控制器的支持。而且这个 PR 已经被合并,这也意味着下个 Release 里,KubeVela 就会原生支持基于 Envoy 的应用访问路由。类似的,KubeVela 里的其他特性比如 Autoscaler 等,都以 Kubernetes 原生的方式提供了大量的可扩展的空间。

另一方面,整个 KubeVela 平台的设计是由 Workload Type (工作负载类型)和 Trait (应用特征)组成的。所以,你可以自由地为 KubeVela 里添加各种各样的 Workload Type 和 Trait,比如 StatefulSet 工作负载,CloneSet 工作负载,蓝绿发布 Trait,流量管理 Trait 等等。对于这部分应用管理能力,只有你想不到,没有你做不到,未来的 KubeVela 具备什么能力,抽象怎么设计,你说了算!

然后是用户接口与模型层。即 KubeVela 的 Appfile 与它背后的 OAM 模型引擎。这部分是 KubeVela 中最核心的部分,但是一般来说比较稳定,比较适合对 KubeVela 和 OAM 有一定了解的中级开发者。尤其是已经在内部场景中进行过 OAM 落地的同学,大可以在这个领域继续一展身手。

最后,也是最重要的,是任何 KubeVela 相关的分享与案例文章。是的,贡献 KubeVela 项目大可不必从代码开始,任何一篇对 KubeVela 使用、集成甚至吐槽的分享,都是对整个社区价值巨大的贡献,我们对此无比期待!

KubeVela 遵循 CNCF 贡献者阶梯,设计了两级 Maintainer 级别。具备一定贡献量的项目贡献者,将被现有 Maintainer 提名为 Reviewer,获得一定的项目维护权限并成为 KubeVela 项目 Member. 而 Reviwer 中表现突出的成员,将会被提名为 Approver,成为项目核心维护者。

KubeVela 即是现今阿里自身多个互联网级应用平台产品(比如阿里云 EDAS 服务)背后的核心引擎,也是一个诞生自云原生社区的开源项目。KubeVela 项目将在稳定之后,即整体捐赠给云原生社区中立基金会。

如果你有任何疑问,欢迎搜索钉钉群号:23310022 进群交流!