使用Crossplane构建专属PaaS体验:Kubernetes,OAM和CoreWorkflows

关键点:

•许多组织的目标是构建自己的云平台,这些平台通常由内部部署架构和云供应商共建完成。

•虽然Kubernetes没有提供开箱即用的完整PaaS平台式服务,但其具备完整的API,清晰的技术抽取和易理解的扩展性,可以让其他的完备功能组件在其上运行。

•Crossplane是一个开源的云控制组件,让工程师能够直接通过Kubernetes管理一些基础架构或者云服务。该控制组件为用户提供了唯一的交互入口,通过该入口可以实现策略下发、安全防护以及实施审计。

•可以使用K8s资源自定义(CRD)和YAML配置基础结构,也可以通过建立工具(如kubectl)或Kubernetes API本身对其进行管理,作为工作流的最佳实践(如GitOps)。

•开源应用程序模型(OAM)描述了核心软件交付角色,定义了清晰的职责:开发人员,应用操作人员和基础架构人员。Crossplane是规范Kubernetes最佳实现。

近期,InfoQ访谈了Upbound的创始人兼首席执行官Bassam Tabbara,探讨了如何跨多个云和基础架构来构建应用平台。

这个话题的前提条件是每一个软件提供商将应用程序部署到一个平台上,他们是否愿意使用这个平台。当前Kubernetes作为许多“云原生”架构的基础平台,虽然Kubernetes并未提供开箱即用的完整平台式服务(PaaS)体验,但其具备完整的API,清晰的技术抽取和易理解的扩展性,可以让其他的完备功能组件在其上运行。

Tabbara 表示Crossplane这个开源项目,让工程师可以直接在Kubernetes上管理任何基础架构或云服务。这种“跨云的控制组件”是构建在Kubernetes(https://www.alauda.cn/product/detail/id/240.html)原生配置声明上,它允许工程师定义架构以利用现有的K8s工具链。访谈也提到了开源应用程序模型(OAM),探讨了Crossplane如何成为以团队为中心的基于Kubernetes构建云原生应用的最佳实践。

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

许多公司的目标是打造自己的云平台,通常都是通过自己部署基础架构或云供应商组建。这些公司的领导认识到,降低部署过程中的冲突,缩短交付时间,以及提供稳定和安全,可以提升自身的竞争优势。同时,他们还认识到,任何成功的企业通常都需要将现有的“资产”应用程序和基础架构构建在一个公共的平台上。许多公司还希望平台支持多个云供应商,避免被一家绑定以寻求降低成本,和跨供应商实施容灾。

平台团队也希望为应用开发和操作人员提供自助服务。但是,也要考虑平台如何兼容安全性、合规性和法规要求。所有大型公共云供应商,像Amazon Web Service(AWS),Microsoft Azure和Google Cloud Platform(GCP)都是通过控制组件提供类似服务的。该控制组件包含用户交互(UI),命令行交互(CLI)和程序接口(API),让平台团队和操作人员可以完成基于底层基础数据的配置和部署。尽管云控制组件采用的是典型的全局分布模式,但最终呈现给用户的是集中展现。该控制组件为用户提供了唯一的交互入口,通过该入口可以实现策略下发、安全防护以及实施审计。

正如Zimki,Heroku和Cloud Foundry这样的先驱组织一样,应用程序开发人员非常希望获得类似平台即服务(PaaS)的经验来定义和部署应用程序。部署一个新的应用只需要通过简单的“git pushheroku master”,毫不费力就能完成。应用操作人员和SRE团队希望能够轻松的构建、运行和维护应用或者是完成各自的管理配置。

Tabbara 提示到,如果组织选择不当,这些需求会让组织花费昂贵的成本来维护PaaS:“现代商业PaaS常常满足组织80%的要求,这就意味着基础架构团队需要创建额外的平台资源来满足其他20%的要求。”

2 构建PaaS平台的体验

构建PaaS平台不是一件容易的事。需要花费时间和探究技术,考虑如何将所有相关角色的需求抽取为技术实现。著名的Google公司有上千名训练有素的工程师打造这个平台,Netflix也拥有庞大的专家团队专注于内部PaaS平台的构建与维护,甚至像Shopify这样的小公司也有专门的PaaS平台团队。抽取的技术实现范围很广,从Libcloud和OpenStack 提供大众化的功能,到通常的工作流,甚至像HashiCorp的Terraform或Pulumi这样完整的云特定配置组件。传统的PaaS抽取的技术实现在云领域也很常见,典型的如GCP的App Engine,AWS的ElasticBeanstalk或Azure的Service Fabric。

许多公司正在选择以Kubernetes为基础构建平台。不管怎样,正如Tabbara在Twitter提示的那样,这可能需要大量的前期投入,再加上80%用户场景挑战,这可能导致“PaaS困境 ”:

“PaaS的困境就是您的PaaS完成了想要的80%需求,我就需要花费80%的时间来维护kubernetes。”

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

Crossplane是“cross”云控制“plane”的融合。我们想用这个名字来表示连接不同云提供商并充当跨连接的控制组件。Cross表示“跨云”,plane增加“控制水平”。

通过构建在被大家广泛应用的Kubernetes(https://www.alauda.cn/product/detail/id/240.html)原生样式基础上进行配置,提供现成的基础架构组件和注册共享其他资源两种方式,这样就减轻了基础架构和应用程序操作员的负担。另外,通过提供一套完整的API,封装了关键基础架构技术抽取,可以分离平台操作员(不依赖“API”工作的)和应用程序开发、操作员(依赖“ API”工作的)关注点。

“开发人员只需关注工作负载,而不必担心实现细节、环境约束或者策略。管理员可以定义环境细节和策略。这就可以实现更高的可重用性,降低复杂度。”

3 Crossplane:通过Kubernetes控制基础架构

Crossplane作为Kubernetes附加组件的实现方式,通过提供和管理云基础架构、服务和应用程序来扩展集群能力。Crossplane使用Kubernetes的样式声明、API驱动配置和管理来控制本地或云的基础架构。通过这种方法,可以使用资源自定义(CRD)和YAML来配置基础架构,也可以通过建立工具(如kubectl)或Kubernetes API本身对其进行管理。使用Kubernetes还允许通过RBAC或Gatekeeper的开放策略代理(OPA)来定义安全控制。

作为Crossplane安装的一部分,Kubernetes资源控制器对资源的整个生命周期进行管理,负责准备、健康检查、扩展、故障转移、以及积极响应偏离所需配置的外部变化。Crossplane整合了持续交付(CD)流水线,可以使应用的基础架构配置储存在单个控制集群中。团队可以使用像GitOps等云原生CD最佳实践来创建,跟踪和审批更改。Crossplane让应用程序和基础架构配置共存在同一个Kubernetes集群上,从而降低了工具链和部署流水线的复杂性。

PIC1.jpg

通过OAM模型,展现了整个工作情况,清晰的技术抽取、对不同角色的使用,以及“线上线下”处理方式。

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

开放应用程序模型(OAM)规范最初由Microsoft,阿里巴巴和Upbound创建,它定义了一个模型,开发人员负责定义应用程序组件,应用程序操作员负责创建这些组件的实例并为其配置,而基础架构操作员则是负责声明,安装和维护平台上可用的基础服务。Crossplane是规范Kubernetes的最佳实现。

使用OAM,平台构建者可以以Components,Traits和Scopes的格式提供可重用的模块。允许平台将它们打包在预定义的应用程序配置文件中。用户可以通过选择配置文件来选择如何运行其应用程序,例如,高服务水平目标(SLO)要求的微服务应用程序,拥有持久卷的有状态应用程序或具有自动扩缩容的事件驱动功能。

在OAM规范介绍文档中,描述了一个典型的应用交付生命周期实践的例子。

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

2、应用程序操作员部署该应用程序的实例,并为其配置操作特性,像自动扩缩容等;

3、基础架构人员决定基于哪种技术来完成部署和操作。

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

为了运行和操作应用程序,应用程序操作员为组件设置参数,并在应用配置的YAML中定义,例如副本数,自动扩缩容策略,入口点和流量路由规则。在OAM中,这些操作特性称为特征,编写在部署应用配置文件中,用于部署应用程序。底层平台根据工作负载和应用配置文件定义的操作特征进行创建。

基础架构人员负责声明,安装和维护平台上可用的基础服务。例如,基础架构人员可能会选择特定的负载均衡器来暴露服务,或者完成一个数据库配置来确保数据全局范围内进行加密和复制。

5 探索典型的Crossplane工作流程

为了使讨论更加聚焦,让我们探索一个典型的Crossplane工作流程,从项目的安装到使用。

首先,安装Crossplane并创建一个Kubernetes集群。接下来,安装提供程序并配置凭据。原生架构可以从预分配的提供商获得(例如GCP,AWS,Azure,Alibaba或者是用户自己建立的基础设施。)

平台操作员使用YAML 定义声明,组合和发布自己的基础架构资源,从而将自己的基础架构CRD添加到Kubernetes API中以供应用程序使用。

应用程序开发人员发布应用程序组件,表明服务必须的、建议的或者是可选的需求,以及基础架构需求。

应用程序操作员将基础架构和应用程序组件,通过定义配置关联在一起,然后运行该应用程序。

6 小结

Kubernetes(https://www.alauda.cn/product/detail/id/240.html)是许多“云原生”平台构建的基础,因此,团队与平台交互和集成底层组件,这两个模型对于公司是至关重要的,并且具有潜在的竞争优势。正如Nicole Forsgren博士等在Accelerate中所述,高绩效组织是能够缩小交付周期和增加部署频率的。正是与此,平台起着至关重要的作用。

Crossplane是一个不断发展的项目,随着社区的扩展,希望看到越来越多的反馈意见。工程师们可以访问Crossplane网站来使用这个开源项目,也可以在Crossplane Slack中共享反馈情况。

K8S中文社区微信公众号

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址