热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

KubeVela与PaaS的不同点有哪些

本篇内容介绍了“KubeVela与PaaS的不同点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习

本篇内容介绍了“KubeVela与PaaS的不同点有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

首先,我们先说结论: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 的“能力困境”。

KubeVela与PaaS的不同点有哪些

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

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

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

  • 应用平台本身架构彻底模块化,其所有的能力都是可插拔的,而平台核心框架通过模型层提供标准化的能力封装与装配流程。

  • 该流程能够无缝接入云原生生态中的任何应用管理能力,使得平台工程师完全专注于能力本身的研发和基于该模型的能力封装过程,使平台团队在为用户带来简单易用的平台层抽象的同时,快速、敏捷地响应用户千变万化的应用管理诉求。

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

KubeVela 整体架构如下图所示:

KubeVela与PaaS的不同点有哪些

在架构上,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 来将它注册:

KubeVela与PaaS的不同点有哪些

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

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

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

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

KubeVela与PaaS的不同点有哪些

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

KubeVela与PaaS的不同点有哪些

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

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

  • 如何定义能力之间的冲突关系与协作关系?

  • 如何快速的定义 CUE 模板文件?

  • 如何基于 CUE 语言定义出功能强大的“能力模块”,然后把这些模块安装到 KubeVela 中?

  • 等等 ……

“KubeVela与PaaS的不同点有哪些”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程笔记网站,小编将为大家输出更多高质量的实用文章!


推荐阅读
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 掌握PHP编程必备知识与技巧——全面教程在当今的PHP开发中,了解并运用最新的技术和最佳实践至关重要。本教程将详细介绍PHP编程的核心知识与实用技巧。首先,确保你正在使用PHP 5.3或更高版本,最好是最新版本,以充分利用其性能优化和新特性。此外,我们还将探讨代码结构、安全性和性能优化等方面的内容,帮助你成为一名更高效的PHP开发者。 ... [详细]
  • 微服务优雅上下线的最佳实践
    本文介绍了微服务上下线的正确姿势,避免使用 kill -9 等粗暴手段,确保服务的稳定性和可靠性。 ... [详细]
  • 深入解析 Lifecycle 的实现原理
    本文将详细介绍 Android Jetpack 中 Lifecycle 组件的实现原理,帮助开发者更好地理解和使用 Lifecycle,避免常见的内存泄漏问题。 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • 本文探讨了利用Python编程语言开发自动化脚本来实现文件的全量和增量备份方法。通过详细分析不同备份策略的特点,文章介绍了如何使用Python标准库中的os和shutil模块来高效地管理和执行备份任务。此外,还提供了示例代码和最佳实践,帮助读者快速掌握自动化备份技术,确保数据的安全性和完整性。 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 在基于.NET框架的分层架构实践中,为了实现各层之间的松散耦合,本文详细探讨了依赖注入(DI)和控制反转(IoC)容器的设计与实现。通过合理的依赖管理和对象创建,确保了各层之间的单向调用关系,从而提高了系统的可维护性和扩展性。此外,文章还介绍了几种常见的IoC容器实现方式及其应用场景,为开发者提供了实用的参考。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 本文详细解析了Java类加载系统的父子委托机制。在Java程序中,.java源代码文件编译后会生成对应的.class字节码文件,这些字节码文件需要通过类加载器(ClassLoader)进行加载。ClassLoader采用双亲委派模型,确保类的加载过程既高效又安全,避免了类的重复加载和潜在的安全风险。该机制在Java虚拟机中扮演着至关重要的角色,确保了类加载的一致性和可靠性。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有