写点什么

使用 Crossplane 构建自己的 PaaS:Kubernetes、OAM 和核心工作流

  • 2020-09-17
  • 本文字数:4044 字

    阅读完需:约 13 分钟

使用Crossplane构建自己的PaaS:Kubernetes、OAM和核心工作流

本文要点


  • 很多企业想要构建自己的云平台,通常由内部基础设施和云供应商组成。

  • 尽管 Kubernetes 没有提供完整的开箱即用的平台即服务(PaaS)体验,但其定义良好的 API、清晰的抽象和全面的扩展点让它成为完美的基础组件。

  • Crossplane 是一个开源的云控制平面,工程师可以直接用它来管理基于从 Kubernetes 的基础设施和云服务。这个控制平面为用户交互提供了单个入口点,可以在其中执行策略,应用防护和审计。

  • 可以使用 k8s 的资源定义(CRD)和 YAML 来配置基础设施,也可以通过完善的工具(如 kubectl)或 Kubernetes API 本身来管理基础设施,并遵循一些工作流最佳实践(如 GitOps)。

  • 开放应用模型(Open Application Model,OAM)规范描述了一种模型,它定义了核心软件交付角色,并规定了明确的职责范围:​​开发人员、应用程序运维人员和基础设施运维人员。Crossplane 是 Kubernetes 规范的实现。


最近,InfoQ 采访了 Upbound 创始人兼首席执行官 Bassam Tabbara,讨论了如何构建跨多个云供应商和内部基础设施的应用程序平台。


采访从探讨企业在平台上部署应用程序开始。目前,Kubernetes 是很多“云原生”平台的基础。尽管 Kubernetes 并未提供完整的开箱即用的平台即服务(PaaS)体验,但其定义良好的 API、清晰的抽象和全面的扩展点让它成为完美的基础组件。


Tabbara 还讨论了Crossplane,这是一个开源项目,工程师可以直接用它来管理基于 Kubernetes 的基础设施和云服务。这种“跨多云控制平面”是基于 Kubernetes 的声明式配置原语构建的,工程师可以自定义基础设施,以便利用已有的 k8s 工具链。采访内容还涵盖了开放应用模型(OAM),并探讨了 Crossplane 如何成为以团队为中心的标准的 Kubernetes 实现。

每个工程团队都需要一个平台

很多企业想要构建自己的云平台,通常由内部基础设施和云供应商组成。这些企业的领导者认识到,最小化部署摩擦并减少应用程序的交付时间,同时又能提供安全性,可以提升竞争优势。这些团队还认识到,成功的企业通常都需要将现有的“遗留”应用程序和基础设施包含在平台中。很多公司还希望支持多个公共云供应商,目标是避免被锁定、套利成本或实施灾难恢复策略。


企业内的平台团队通常希望为应用程序开发人员和运维人员提供自助服务,但他们也希望平台保持适当的安全性、合规性和监管能力。所有的大型公共云供应商,例如 Amazon Web Service(AWS)、Microsoft Azure 和 Google Cloud Platform(GCP)都通过控制平面提供服务。控制平面由用户界面(UI)、命令行接口(CLI)和应用程序编程接口(API)组成,平台团队和运维人员用它们来配置和部署基础设施服务的基础“数据平面”。尽管云控制平面的实现通常是分布式的,但对于最终用户来说是集中式的。控制平面为用户交互提供了单个入口点,可以在其中执行策略,应用防护和审计。


应用程序开发人员通常希望获得类似平台即服务(PaaS)的体验来定义和部署应用程序,就像ZimkiHerokuCloud Foundry之类的开创者一样。通过简单的“git push heroku master”命令来部署应用程序是一种功能强大且毫不​​费力的方法。应用程序运维人员和站点可靠性工程(SRE)团队希望能够轻松地组装、运行和维护应用程序及其配置。


Tabbara 说,这些需要企业购买 PaaS,如果选择不当,其维护成本可能会很高:


“现代商业 PaaS 通常可以满足企业 80%的场景需求,这意味着基础设施团队必须创建额外的平台资源来满足其他 20%的需求。”

构建 PaaS 风格的体验

构建 PaaS 平台并不容易,它需要时间和技能,而且定义和实现满足所有相关角色要求的技术是一项巨大的挑战。谷歌的内部平台有数千名训练有素的工程师,Netflix 拥有庞大的专家团队,他们专注于内部 PaaS 的创建和维护,甚至连 Shopify 这种规模较小的公司也有专门的平台团队。技术抽象的范围很广,从“最低公分母”(Libcloud 和 OpenStack 所采用的)一直到提供通用工作流程和完整的云特定配置(HashiCorp Terraform 或 Pulumi)。传统 PaaS 抽象在云领域也很常见,但通常是特定于供应商,例如 GCP App Engine,AWS Elastic Beanstalk 或 Azure Service Fabric。


很多企业选择 Kubernetes 作为构建平台的基础。但是,正如 Tabbara 在 Twitter 上指出的那样,这可能需要大量的前期投入,再加上 80%的应用场景挑战,可能会陷入“PaaS困境”:


“PaaS 的困境——你的 PaaS 完成了我想要的 80%,而我的 PaaS 花费了 80%的时间来维护 Kubernetes”。


Tabbara 表示,开源 Crossplane 项目旨在成为一种通用的多云控制平面,用于构建定制的 PaaS 体验。


Crossplane 是“跨”云“控制平面”的融合。我们想用一个名词来命名这个实体,它负责连接不同云提供商,并充当跨云控制平面。“cross”表示“跨云”,“plane”表示“控制平面”。


在 Kubernetes 风格原语基础上构建配置,并提供现成的基础设施组件和用于共享其他资源的注册表,减轻了基础设施和应用程序运维人员的负担。另外,通过提供封装了关键基础设施抽象的 API,可以将平台运维人员(在“API 层”之下工作的人)与应用程序开发人员和运维人员(在“ API 层”之上工作的人)之间的关注点分开。


“开发人员可以定义工作负载,不需要担心实现细节、环境约束或策略。由管理员来定义环境细节和策略。这可以实现更高的可重用性,并降低复杂性。”

Crossplane:通过 Kubernetes 来控制基础设施

Crossplane 作为一个 Kubernetes附加组件,通过提供和管理云基础设施、服务和应用程序来扩展集群能力。Crossplane 使用 Kubernetes 风格的声明式和 API 驱动式配置来控制本地或云端的基础设施。通过这种方式,我们可以使用自定义资源定义(CRD)和 YAML 来配置基础设施,还可以通过完善的工具(如 kubectl)或 Kubernetes API 本身来实现管理。Kubernetes 还允许使用RBAC或策略来定义安全控制(使用开放策略代理,OPA)。


作为 Crossplane 的一部分,可以配置一个 Kubernetes 资源控制器负责管理资源的生命周期:配置、健康检查、伸缩、故障转移,并主动对偏离配置的外部变更做出响应。Crossplane 与持续交付(CD)管道集成在一起,因此应用程序基础设施配置存储在单个控制集群中。团队可以使用GitOps等云原生 CD 最佳实践来创建、跟踪和批准变更。Crossplane 让应用程序和基础设施配置可以共存于同一个 Kubernetes 集群中,从而降低了工具链和部署管道的复杂性。



清晰的抽象、角色使用以及“上下分界线”方法很大程度上借鉴了开放应用模型的原理。

OAM:以团队为中心构建云原生应用程序的标准

开放式应用程序模型(OAM)规范最初由微软、阿里巴巴和 Upbound 创建,它描述了一种模型,开发人员负责定义应用程序组件,应用程序运维人员负责创建这些组件的实例并为其分配应用程序配置,而基础设施运维人员则负责声明、安装和维护平台上可用的基础服务。Crossplane 是 Kubernetes 规范的实现。


借助 OAM,平台构建者可以通过“组件”、“特征”和“范围”的格式提供可重复使用的模块。平台可以将它们打包在预定义的应用程序配置文件中。用户可以通过选择配置文件来选择如何运行应用程序,例如,具有高 SLO 的微服务应用程序、具有持久卷的有状态应用程序或具有水平自动伸缩功能的事件驱动功能。


OAM规范文档提供了一个案例,探讨了典型的应用程序交付生命周期。


  1. 开发人员创建一个 Web 应用程序;

  2. 应用程序运维人员将部署该应用程序的实例,并为其配置属性,例如自动缩放;

  3. 基础设施运维人员决定使用哪种基础技术进行部署和运维。


为了交付应用程序,应用程序开发人员将程序的每个单独组件描述为 Component YAML。该文件封装了工作负载以及运行它所需的信息。


在应用程序运维方面,应用程序运维人员为开发人员的组件设置参数值,并在 ApplicationConfiguration YAML 中配置属性,例如副本大小、自动伸缩策略、入口点和流量路由规则。在 OAM 中,这些属性被称为特征。编写和部署 ApplicationConfiguration 等效于部署应用程序。底层平台将为已经定义好的工作负载创建实时实例,并根据 ApplicationConfiguration 规范将配置属性附加到工作负载上。


基础设施运维人员负责声明、安装和维护平台上可用的基础服务。例如,基础设施运维人员可能会在公开服务时选择特定的负载均衡器或者可确保数据是全局加密的自定义数据库配置。

一个典型的 Crossplane 工作流

为了更加具体一点,我们来看一个典型的 Crossplane 工作流程——从项目的安装到使用。


首先,安装Crossplane,并创建一个 Kubernetes 集群。 接下来,安装 Provider 并配置凭据。基础设施原语可以来自任意一个供应商,例如 GCP、AWS、Azure、阿里巴巴和自定义本地部署。


平台运维人员使用声明性 YAML 定义、组合和发布自己的基础设施资源,从而将自己的基础设施 CRD 添加到 Kubernetes API 中,供应用程序使用。


应用程序开发人员发布应用程序组件,应用服务及其基础设施的基本、建议或可选属性。


应用程序运维人员将基础设施组件和应用程序组件、规范配置联系在一起,然后运行应用程序。


结论

Kubernetes 被作为很多“云原生”平台的基础,因此,对于企业来说,在团队与平台交互方式以及如何组装基础组件这两方面的投入是至关重要的。正如 Nicole Forsgren 博士等人所说的那样,最小化交付周期(从构想到产生价值)和提高部署频率与搞绩效的组织息息相关。平台在这里起着至关重要的作用。


Crossplane 是一个不断发展的项目,随着社区的扩展,正在寻求越来越多的反馈。工程团队可以访问Crossplane网站开始使用这个开源项目,并在 Crossplane Slack 中提供反馈。


作者介绍:


Daniel Bryant 在 Datawire 担任产品架构师,在 InfoQ 担任新闻板块经理,并在 QCon London 担任主席。他目前的技术专长集中在“DevOps”工具、云/容器平台和微服务实现。Daniel 是伦敦 Java 社区(LJC)的负责人,为多个开源项目做出了贡献,为 InfoQ、O’Reilly 和 DZone 等知名技术网站撰写文章,并定期在 QCon、JavaOne 和 Devoxx 等国际技术大会上演讲。


原文链接


Build Your Own PaaS with Crossplane: Kubernetes, OAM, and Core Workflows


2020-09-17 12:133921

评论

发布
暂无评论
发现更多内容

掌握渗透测试,从Web漏洞靶场搭建开始

华为云开发者联盟

测试 渗透测试 漏洞 漏洞靶场 wavsep

写给Java开发的小程序布局指南,震惊

Java 程序员 后端

作为程序员一定不要仅仅追求物质,Javaweb面试宝典

Java 程序员 后端

你有过迷茫吗,java的网络编程教程视频,这些知识点你会吗

Java 程序员 后端

你的技术真的到天花板了吗,值得推荐!

Java 程序员 后端

全栈系统化的学习路线,基于SpringCloud微服务化开发平台项目

Java 程序员 后端

关于Java性能优化的几点建议,图灵学院4期百度网盘,附项目源码

Java 程序员 后端

作为一名程序员我不忘初心,听说你在找SpringBoot整合案例

Java 程序员 后端

你不知道这份超详细JVM内存结构,京东校招Java面试题

Java 程序员 后端

你连基础的JVM运行时内存布局都忘了,springmvc实战教程

Java 程序员 后端

架构实战营-模块一

Aha hello xzy

架构实战营 「架构实战营」

关于SQL书写建议-&索引优化的总结,真香警告

Java 程序员 后端

其实Zookeeper的选举机制也不难理解,今日头条Java后端面试

Java 程序员 后端

作为一名程序员我不忘初心,java学习路线尚硅谷,Java工程师进阶之路

Java 程序员 后端

写给即将正在找工作的Java攻城狮,5分钟搞定

Java 程序员 后端

全套教程百度云,java菜鸟教程多态,Mybatis源码解析

Java 程序员 后端

作为一名程序员我不忘初心,2021年是做Java开发人员的绝佳时机

Java 程序员 后端

写给Java软件工程师的3条建议,百度笔试题百度校招面试经验,开源新作

Java 程序员 后端

你不知道这份超详细JVM内存结构,Java吊打面试官系列

Java 程序员 后端

你头秃都没想到还能这样吧,Java这些高端技术只有你还不知道

Java 程序员 后端

你还搞不定分布式系统流控、熔断吗,2021年最新Java面试点梳理

Java 程序员 后端

做Java程序员真的没有春天吗,12年高级工程师的“飞升之路”

Java 程序员 后端

云图说|初识云数据库GaussDB(for Redis)

华为云开发者联盟

数据库 redis 开源 华为云 GaussDB(for Redis)

关于Java性能优化的几点建议,java编程书籍合集百度云,终局之战

Java 程序员 后端

保持稳定迭代的秘密:基于Spinnaker的全自动渐进式交付

博文视点Broadview

作为字节跳动面试官,linux菜鸟教程pdf下载,深度集成!

Java 程序员 后端

你想学的都在这里,开课吧java架构师百度云,阿里Java开发面试解答

Java 程序员 后端

入职3个月的Java程序员面临转正,原来SqlSession只是个甩手掌柜

Java 程序员 后端

全靠我啃烂了这份2021最新面试题,系统盘点Java开发者必须掌握的知识点

Java 程序员 后端

再见SpringMVC,linux教程第四版实验答案,Java全栈面试题

Java 程序员 后端

写给互联网大厂员工的真心话,MySQL优化原理分析及优化方案总结

Java 程序员 后端

使用Crossplane构建自己的PaaS:Kubernetes、OAM和核心工作流_服务革新_Daniel Bryant_InfoQ精选文章