深入解读:KubeVela 与 PaaS 有何不同?

简介: 在 KubeVela 项目发布以后,很多国内外的社区同学们都会问到一个类似的问题:KubeVela 的体验真的非常棒,可以说是 Kubernetes 上的 Heroku 了。这么看来, KubeVela 跟 Heroku 这样的 PaaS 产品到底是不是一类项目呢?

头图.png

作者 | 邓洪超  阿里云高级技术专家

来源|阿里巴巴云原生公众号

在 KubeVela 项目发布以后,很多国内外的社区同学们都会问到一个类似的问题:KubeVela 的体验真的非常棒,可以说是 Kubernetes 上的 Heroku 了。这么看来, KubeVela 跟 Heroku 这样的 PaaS 产品到底是不是一类项目呢?

今天,我们就专门来聊一个这个话题:KubeVela 与 PaaS 有何不同?

备注:本文所提到的 PaaS,既包括 Heroku 这样的经典 PaaS 产品,也包括各种各样的基于 Kubernetes 的“云原生” PaaS。它们虽然底层实现不同,但是对用户提供的使用接口和体验是相似的。但 OpenShift 是一个例外,作为一个比 Kubernetes 本身还复杂的项目,OpenShift 不属于本文所讨论的简单易用、面向用户的 PaaS 之列,而是一个地道的 Kubernetes 发行版。

首先,我们先说结论:KubeVela 能够为用户带来非常接近 PaaS 的体验,但 KubeVela 并不是 PaaS

为什么说 KubeVela 不是 PaaS?

大多数 PaaS 都能提供完整的应用生命周期管理功能,同时也非常关注提供简单友好的用户体验,以及对研发效能的提升。在这些点上,KubeVela 跟 PaaS 的目标和提供的用户体验,是高度一致的。但如果你去研究 KubeVela 的实现细节,就不难发现 KubeVela 的整体设计与实现其实与各类 PaaS 项目的差别是非常大的。如果从用户视角来看,这些区别则会直接反应在整个项目的“可扩展性”上。

进一步来说,PaaS 的用户体验虽好,但却往往是不可扩展的。我们可以直接拿比较新的 Kubernetes PaaS,比如 Rancher Rio 项目来看。这个项目提供了很好的应用部署体验,比如 Rio run 来让你快速部署一个容器化应用、自动分配域名和访问规则等等。但是,如果我们想让 Rio 支持更多的能力以满足不同的用户诉求呢?

比如:

  • 能否帮助我运行一个 定时任务?
  • 能不能帮我运行一个 OpenKruise 的 CloneSet 工作负载?
  • 能不能帮我运行一个 MySQL Operator?
  • 能不能根据我的自定义 metrics 来做水平扩容?
  • 能不能基于 Flagger 和 Istio来帮我做渐进式灰度发布?
  • 能不能 ……

而这里的关键点在于,上述这些能力在 Kubernetes 生态中都是非常常见的的能力,有的甚至是 Kubernetes 内置就可以支持。可是到了 PaaS 这里,要支持上述任何一个能力,都必须对 PaaS 进行一轮开发,而且由于先前的一些假设和设计,甚至很可能需要大规模的重构

举个例子,我有一个 PaaS 系统,它所有的应用都是通过 Deployment 来执行的,那么这个 PaaS 的发布、扩容等功能,也都会直接按照 Deployment 来进行实现。而现在,用户提出了原地升级的诉求,需要让这个 PaaS 再支持 CloneSet,那整套系统很可能就得掀翻重来。再到运维能力这一侧,这个问题会更加严重,比如现在这个 PaaS 支持的是蓝绿发布策略,那么它跟流量管理、监控系统等依赖之间,都是需要大量交互和集成的。而现在我们要让 PaaS 支持一个新的策略叫做“金丝雀”发布,那么所有的这些交互和执行逻辑基本全得重重构一遍,工作量是巨大的。

当然,并不是所有的 PaaS 都完全没有可扩展性。工程能力比较强的 PaaS,比如 Cloud Foundry 和 Heroku,它们都提供了自己的插件能力和插件中心,在确保平台本身的用户体验和能力的可控制性的前提下开放一定的插件能力,比如允许用户接入自己的数据库,或者开发一些简单的 Feature 进去。但这种插件机制无论怎么做,说白了只能是这个 PaaS 专属的封闭小生态能力。而在云原生时代,我们开源社区已经有了 Kubernetes 生态这样一个近乎“无限”的能力池,在这个能力池面前,任何 PaaS 专属的小生态都显得太苍白无力了。 

上述问题,我们可以统称为 PaaS 的“能力困境”。

1.png

相比之下,KubeVela 的目标从一开始就是利用整个 Kubernetes 生态作为自己的“插件中心”,并且“有意”把它的每一个内置能力都设计成独立的、可插拔的插件。这种高度可扩展的模型,背后其实有着精密的设计与实现。比如,KubeVela 如何确保某个完全独立的 Trait 一定能够绑定于某种 Workload Type?如何检查这些相互独立的 Trait 间是否存在冲突?这些挑战正是 Open Application Model(OAM)作为 KubeVela 模型层的起到的关键作用,一言以蔽之:OAM 是一个高度可扩展的应用定义与能力装配模型

而且,大家设计和制作任何 Workload Type 和 Trait 的定义文件,只要存放在 GitHub 上,全世界任何一个 KubeVela 用户就都可以在自己的 Appfile 里使用这些能力。具体的方式,请参考 $ vela cap (即:插件能力管理命令)的使用文档

所以说,KubeVela 提倡的是一种面向未来的云原生平台架构,这种架构认为

  • 应用平台本身架构彻底模块化,其所有的能力都是可插拔的,而平台核心框架通过模型层提供标准化的能力封装与装配流程。
  • 该流程能够无缝接入云原生生态中的任何应用管理能力,使得平台工程师完全专注于能力本身的研发和基于该模型的能力封装过程,使平台团队在为用户带来简单易用的平台层抽象的同时,快速、敏捷地响应用户千变万化的应用管理诉求。

KubeVela 整体架构与能力可插拔机制

KubeVela 整体架构如下图所示:

2.png

在架构上,KubeVela 只有一个 controller 并且以插件的方式运行在 Kubernetes 之上,为 Kubernetes 带来了面向应用层的抽象,以及以此为基础的面向用户的使用界面,即Appfile。Appfile 乃至 KubeVela 运行机制背后的核心,则是其能力管理模型 Open Application Model (OAM) 。基于这个模型,KubeVela 为系统管理员提供了一套基于注册与自发现的能力装配流程,来接入 Kubernetes 生态中的任意能力到 KubeVela 中,从而以“一套核心框架搭配不同能力”的方式,适配各种使用场景(比如 AI PaaS,数据库 PaaS 等等)。

具体操作上,作为系统管理员或者平台开发者,上述能力装配流程允许他们把任意的 Kubernetes API 资源(含 CRD)以及对应的 Controller  作为“能力”一键注册到 KubeVela 中,然后通过 CUE 模板语言将这些能力封装成用户可用的抽象(即成为 Appfile 中的一部分)。

接下来,我们就来 Demo 一下如何将 kubewatch 这个社区中的告警机制直接插入到 KubeVela 中作为一个告警 Trait 来使用:

Step 1:将平台能力注册为 OAM 对象

首先,你需要确定 CRD 所表示的能力是对应一个 Workload Type 还是 Trait?这里的区别在于 Workload Type 指的是如何运行你的代码。而 Trait 指的是如何运维、管理或者操作已经运行起来的代码实例。

而 KubeWatch 作为一种告警机制,自然作为 Trait 来使用的。这时候,我们就可以通过写一个 TraitDefinition yaml 来将它注册:

3.png

KubeVela 内置的服务器端 Runtime 会识别监听的 TraitDefinition 注册事件,然后将该能力纳入平台管理中。

这一步完成,KubeVela 就已经注册完毕在 KubeVela 平台中可用了。但接下来我们还需要将它暴露给用户使用,所以需要定义这个能力对外的使用接口。

Step 2:编写 CUE template 来封装对外暴露接口

实际上,大多数社区能力虽然很强大,但对于最终用户来都比较复杂,学习和上手非常困难。所以在 KubeVela 中,它允许平台管理员对能力做进一步封装以便对用户暴露简单易用的使用接口,在绝大多数场景下,这些使用接口往往只有几个参数就足够了。在能力封装这一步,KubeVela 选择了 CUE 模板语言,来连接用户界面和后端能力对象,并且天然就支持完全动态的模板绑定(即变更模板不需要重启或者重新部署系统)。下面就是 KubeWatch Trait 的模板例子:

4.png

将这个模板放到 Definition 文件中并 $ kubectl apply -f 到 Kubernetes 中,KubeVela 就会自动识别和处理相关输入。这时候,用户就可以直接在 Appfile 中声明使用刚加进来的能力了,比如发送告警信息到指定的 Slack channel:

5.png

可以看到,这个 kubewatch 的配置是我们通过三方扩展进来的一个新的能力,通过 KubeVela 平台管理 Kubernetes 扩展能力就是这么简单快速。有了 KubeVela,平台开发人员就可以简单快速地在 Kubernetes 上搭建起一个 PaaS,且能够将任何一个 Kubernetes 能力快速封装成面向最终用户的上层抽象。

以上示例,仅仅是 KubeVela 可扩展性的“冰山一角”。在后续的文章中,我们会继续详细介绍 KubeVela 能力装配流程中更多的细节问题,比如:

  • 如何定义能力之间的冲突关系与协作关系?
  • 如何快速的定义 CUE 模板文件?
  • 如何基于 CUE 语言定义出功能强大的“能力模块”,然后把这些模块安装到 KubeVela 中?
  • 等等 ……

总结

原生的可扩展性与能力装配机制,是 KubeVela 与大多数 PaaS 项目的根本性不同,这也导致 KubeVela 背后的实现和模型跟它们相比也有着本质性的差异。所以说,KubeVela 的核心目标,乃是在为用户带来简单易用的应用管理体验的同时,为平台管理员提供完全 Kubernetes 原生的可扩展性与灵活度

KubeVela 项目是 OAM 社区的官方项目,由来自阿里、微软多位云原生社区资深成员共同维护,同时也是阿里云 EDAS 服务和内部多个双十一级应用管理平台背后的核心组件。KubeVela 旨在构建一个面向未来的云原生 PaaS 架构,将横向可扩展性和以应用为中心这些最佳实践带给大家,推动甚至引领云原生社区在应用层的发展。

想要了解更多?欢迎前往官方网站上学习更多示例:

作者简介

邓洪超  阿里云高级技术专家, 人称 “Kubernetes Operator 第二人”,OAM 与 KubeVela 项目核心维护者。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
数据采集 人工智能 安全
2026AI元年:AI 落地范式转移:已被反复验证的产业级实践共识
本文探讨AI从技术竞赛迈向产业落地的关键转型:2026年成规模化应用分水岭。强调落地核心不在模型参数,而在数据治理、工作流重构、RAG工程化、推理可控性、人类协同机制及四大落地准则——场景对齐、知识解耦、架构弹性、迭代闭环。
467 0
|
5月前
|
数据采集 人工智能 物联网
告别“炼丹”焦虑!4种大模型微调技术,总有一款适合你
本文系统解析大模型微调四大技术:全量微调、冻结微调、LoRA与QLoRA,结合原理、实战代码与选型指南,帮助开发者低成本打造专属AI助手,提升业务场景下的模型表现。
1712 14
|
12月前
|
缓存 人工智能 负载均衡
PAI 重磅发布模型权重服务,大幅降低模型推理冷启动与扩容时长
阿里云人工智能平台PAI 平台推出模型权重服务,通过分布式缓存架构、RDMA高速传输、智能分片等技术,显著提升大语言模型部署效率,解决模型加载耗时过长的业界难题。实测显示,Qwen3-32B冷启动时间从953秒降至82秒(降幅91.4%),扩容时间缩短98.2%。
|
11月前
|
人工智能 搜索推荐 Linux
ollama部署本地DeepSeek大模型
本地部署大模型具有省钱省心、数据安全、使用自由、无需联网、量身定制及响应高效等优势。DeepSeek 提供满血版与多种蒸馏版模型,适配不同硬件条件。通过 Ollama 可便捷部署,并结合客户端工具如 AnythingLLM 提升交互体验,打造个性化本地 AI 助手。
1361 0
|
负载均衡 监控 Go
使用Golang框架构建分布式系统
本文探讨了使用Golang构建分布式系统的方法。Golang因其高效、简洁的语法和并发支持成为理想的开发语言。文中列举了几个常用的Golang框架,如Echo、Gin、gRPC和NATS等,并强调了服务拆分、通信机制、负载均衡等构建分布式系统的关键要素。通过选择合适的框架,遵循需求分析、技术选型、服务设计等步骤,开发者可以构建出高性能、高可用和可扩展的系统。此外,文中还提供了一个使用gRPC和etcd的简单代码案例来说明实现过程。
1079 4
|
人工智能 JSON 自然语言处理
31.3K star!开源免费本地AI神器,一键部署多模态大模型!
LocalAI 是一款革命性的开源AI框架,专为本地化部署设计。它完美复现了OpenAI的API接口,支持运行各类开源大模型(如LLaMA3、Phi-2、Stable Diffusion等),无需GPU即可在普通电脑上实现:
1591 0
|
人工智能 Java 程序员
一文彻底拿下,赶紧本地部署DeepSeek体验一下最牛的大模型
本文介绍如何本地化部署DeepSeek大模型(deepseek-r1)及open-webui的安装过程,包括命令行操作、版本兼容性处理等详细步骤。DeepSeek号称“国运级”大模型,性能媲美OpenAI,支持直接对话,降低使用门槛。通过本教程,读者可以快速上手体验这一强大的推理模型。
1395 0
一文彻底拿下,赶紧本地部署DeepSeek体验一下最牛的大模型
|
缓存 网络协议 算法
Golang简单实现 分布式缓存+一致性哈希+节点再平衡(gossip + consistent + rebalance)
Golang简单实现 分布式缓存+一致性哈希+节点再平衡(gossip + consistent + rebalance)
583 0
|
安全 关系型数据库 Linux
盘一盘国内3款Linux 控制面板
本文对比分析了宝塔、cPanel 和 Websoft9 三款流行的 Linux 控制面板,重点介绍了它们的基本概况、功能特点、用户群体及应用场景。宝塔界面友好,适合新手;cPanel 国际化功能强大,适用于有跨境业务需求的企业;Websoft9 专注于开源应用的部署与维护,为开发者和科研机构提供了高效解决方案。文章旨在帮助用户根据自身需求选择合适的控制面板。
|
机器学习/深度学习 人工智能 运维
智能运维:AI驱动的IT运维革命###
【10月更文挑战第21天】 随着数字化转型的深入,智能运维(AIOps)正逐步成为企业IT管理的核心。本文将探讨AI技术如何赋能运维领域,通过自动化、智能化手段提升系统稳定性和效率,降低运营成本,并分享实施智能运维的最佳实践与挑战应对策略。 ###
1400 1