重要要点
许多组织的目标是组装自己的云平台,该平台通常由内部部署基础架构和云供应商组成。
尽管Kubernetes并没有提供开箱即用的完整平台式服务(PaaS)体验,但是良好定义的API,清晰的抽象和全面的扩展点的结合使它成为了完美的基础组件建立在。
Crossplane是一种开源云控制平台,使工程师能够直接从Kubernetes管理任何基础架构或云服务。该控制平面为用户交互提供了单个入口点,可以在其中执行策略,应用防护栏并进行审核。
可以使用K8的自定义资源定义(CRD)和YAML配置基础结构。也可以通过完善的工具(如kubectl)或Kubernetes API本身对其进行管理,并利用工作流最佳实践(如GitOps)。
开放应用程序模型(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)组成。尽管云控制平面的实现通常是全局分布的,但对于最终用户来说似乎是集中的。
正如Zimki,Heroku和Cloud Foundry之类的开创者一样,应用程序开发人员通常希望获得类似平台即服务(PaaS)的体验来定义和部署应用程序 。通过简单的“ git push heroku master”部署新应用程序是一种功能强大且毫不费力的方法。应用程序运营商和站点可靠性工程(SRE)团队希望轻松组成,运行和维护应用程序及其各自的配置。
Tabbara警告说,这些要求导致组织购买PaaS,除非适当选择,否则维护起来可能会很昂贵:
“现代商业PaaS经常满足组织80%用例的需求。但是,这意味着基础架构团队仍然必须创建额外的平台资源来满足其他20%的需求。”
建立PaaS(类似的体验)
构建PaaS并不容易。这样做需要时间和技巧,并且定义和实现满足所有相关角色要求的技术抽象是一项挑战。著名的Google是内部平台上数千名训练有素的工程师,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是“跨”云控制“ plane”的融合。我们想使用一个名词,指负责连接不同云提供商并充当它们之间的控制平面的实体。十字表示“跨云”,“平面”引入“控制平面”。
通过在广泛接受的Kubernetes风格原语基础上进行配置,并提供现成的基础架构组件和用于共享其他资源的注册表,这减轻了基础架构和应用程序运营商的负担。另外,通过提供一个封装了关键基础结构抽象的定义明确的API,可以将平台操作员(在“ API线以下”工作的人)与应用程序开发人员和操作员(在“ API线以上”工作的人)之间的关注点分开。 。
“开发人员可以定义工作负载而不必担心实现细节,环境约束或策略。管理员可以定义环境细节和策略。这可以实现更高的可重用性并降低复杂性。”
跨平台:通过Kubernetes控制基础架构
Crossplane被实现为Kubernetes附加组件,并通过提供和管理云基础架构,服务和应用程序的能力扩展了任何集群。Crossplane使用Kubernetes样式的声明式和API驱动的配置和管理来控制本地或云中的任何基础架构。通过这种方法,可以使用自定义资源定义(CRD)和YAML 配置基础结构。还可以通过完善的工具(如kubectl)或Kubernetes API本身进行管理。使用Kubernetes还允许使用通过Gatekeeper实施的开放策略代理(OPA)通过RBAC或策略来定义安全控制。
作为Crossplane安装的一部分,Kubernetes资源控制器被配置为负责资源的整个生命周期:供应,运行状况检查,扩展,故障转移,并主动响应偏离所需配置的外部更改。Crossplane与持续交付(CD)管道集成在一起,因此应用程序基础结构配置存储在单个控制集群中。团队可以使用云本地CD最佳实践(例如GitOps)创建,跟踪和批准更改。Crossplane使应用程序和基础结构配置可以共存于同一Kubernetes集群上,从而降低了工具链和部署管道的复杂性。
清晰的抽象,角色使用以及“上下线”方法很大程度上借鉴了开放应用程序模型内进行的工作。
OAM:以团队为中心的标准,用于构建云原生应用
开放应用程序模型(OAM)规范最初由Microsoft,阿里巴巴和Upbound创建,描述了一个模型,开发人员负责定义应用程序组件,应用程序操作员负责创建这些组件的实例并为其分配应用程序配置,而基础架构操作员则是负责声明,安装和维护平台上可用的基础服务。Crossplane是Kubernetes规范的实现。
使用OAM,平台构建者可以以Components,Traits和Scopes的格式提供可重用的模块。这允许平台执行诸如将它们打包在预定义的应用程序配置文件中的操作。用户可以通过选择配置文件来选择如何运行其应用程序,例如,具有高服务水平目标(SLO)要求的微服务应用程序,具有持久卷的有状态应用程序或具有水平自动缩放功能的事件驱动功能。
在OAM规范出台文件提出,探索的典型应用交付生命周期的一个故事。
开发人员创建一个Web应用程序;
应用程序操作员将部署该应用程序的实例,并为其配置操作特性,例如自动缩放;
基础架构运营商决定使用哪种基础技术来处理部署和操作。
为了交付应用程序,应用程序开发人员将程序的每个单独组件描述为Component YAML。该文件封装了工作负载以及运行它所需的信息。
为了运行和操作应用程序,应用程序操作员为开发人员的组件设置参数值,并在ApplicationConfiguration YAML中应用操作特性,例如副本大小,自动缩放策略,入口点和流量路由规则。在OAM中,这些操作特征称为特征。编写和部署ApplicationConfiguration等同于部署应用程序。基础平台将根据ApplicationConfiguration规范创建已定义工作负载的实时实例,并将工作特征附加到工作负载。
基础架构运营商负责声明,安装和维护平台上可用的基础服务。例如,基础架构运营商可能会在公开服务时选择特定的负载平衡器,或者是确保数据在全局范围内进行加密和复制的自定义数据库配置。
探索典型的Crossplane工作流程
为了使讨论更加具体,让我们探索一个典型的Crossplane工作流程,从项目的安装到使用。
首先,安装Crossplane并创建一个Kubernetes集群。接下来,安装提供程序并配置您的凭据。可以从任何提供者(例如GCP,AWS,Azure,Alibaba和(自定义创建的)本地)提供基础结构原语。
平台操作员使用声明性YAML 定义,组合和发布您自己的基础结构资源,从而将您自己的基础结构CRD添加到Kubernetes API中以供应用程序使用。
应用程序开发人员发布应用程序组件以交流我们服务及其基础结构要求的任何基本,建议或可选属性。
应用程序操作员将基础结构组件和应用程序组件,规范配置联系在一起,然后运行该应用程序。
结论
Kubernetes被用作许多“云原生”平台的基础,因此,投资于两个模型来研究团队如何与该平台交互以及如何组装基础组件对于组织至关重要且具有潜在的竞争优势。如Nicole Forsgren博士等在Accelerate中所述,将交付周期(从构想到价值)的最小化和部署频率的提高与高绩效组织相关。该平台在这里起着至关重要的作用。
Crossplane是一个不断发展的项目,随着社区的扩展,正在寻求越来越多的反馈。工程团队可以访问Crossplane网站开始使用开源项目,并且可以在Crossplane Slack中共享反馈。
关于作者
Daniel Bryant在Datawire担任产品架构师,在InfoQ担任新闻经理,并在QCon London担任主席。他目前的技术专长集中于“ DevOps”工具,云/容器平台和微服务实现。丹尼尔(Daniel)是伦敦Java社区(LJC)的负责人,为多个开源项目做出了贡献,为InfoQ,O'Reilly和DZone等知名技术网站撰写文章,并定期在QCon,JavaOne,和Devoxx。