关键点:

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

•虽然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集群上,从而降低了工具链和部署流水线的复杂



通过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中共享反馈情况。

原文作者:Daniel Bryant(infoQ)

译者:赵淳

使用Crossplane构建专属PaaS体验:Kubernetes,OAM和CoreWorkflows的更多相关文章

  1. 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境

    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...

  2. 用Hyper-v 在win10下使用Docker-Desktop体验kubernetes

    首先开启Hyper-v ,会自动创建一个交换机. 开启internet共享,自动创建的那个交换机(虚拟的网络适配器)会分配一个默认的IP 192.168.137.1,这个IP你不爽,就用注册表搜索并修 ...

  3. 5分钟带你快速入门和了解 OAM Kubernetes

    什么是 OAM? OAM 的全称为开放应用模型(Open Application Model),由阿里巴巴宣布联合微软共同推出. OAM 解决了什么问题? OAM 本质是为了解耦K8S中现存的形形色色 ...

  4. rancher下的kubernetes之一:构建标准化vmware镜像

    学习kubernetes的时候,我们需要在kubernetes环境下实战操作,然而kubernetes环境安装并不容易,现在通过rancher可以简化安装过程,咱们来实战rancher下的kubern ...

  5. kubernetes下的Nginx加Tomcat三部曲之一:极速体验

    在生产环境中,常用到Nginx加Tomcat的部署方式,如下图: 从本章开始,我们来实战kubernetes下部署上述Nginx和Tomcat服务,并开发spring boot的web应用来验证环境, ...

  6. 阿里巴巴的 Kubernetes 应用管理实践经验与教训

    作者 | 孙健波(天元)  阿里巴巴技术专家 导读:本文整理自孙健波在 ArchSummit 大会 2019 北京站演讲稿记录.首先介绍了阿里巴巴基于 Kubernetes 项目进行大规模应用实践过程 ...

  7. Kubernetes GitOps 工具

    Kubernetes GitOps Tools 译自:Kubernetes GitOps Tools 本文很好地介绍了GitOps,并给出了当下比较热门的GitOps工具. 简介 在本文中,将回顾一下 ...

  8. 阿里巴巴 Kubernetes 应用管理实践中的经验与教训

    作者 | 孙健波(阿里巴巴技术专家).赵钰莹 导读:云原生时代,Kubernetes 的重要性日益凸显.然而,大多数互联网公司在 Kubernetes 上的探索并非想象中顺利,Kubernetes 自 ...

  9. 开放应用模型操作指南(一)| 云服务一键接入 OAM 体系

    作者 | 邓洪超  阿里云容器平台软件工程师 导读:Open Application Model(OAM)是阿里云联合微软等国际顶级技术团队联合发布的开放应用模型技术.旨在通过全新的应用定义.运维.分 ...

随机推荐

  1. Jenkins集成jira

    目录 一.Jenkins中Jira插件安装 二.Jenkins中Jira配置 一.Jenkins中Jira插件安装 点击 Manage Jenkins-->Manage Plugins--> ...

  2. react功能实现-组件创建

    这里主要从两个角度来分析创建一个组件需要怎么做,一个是元素,一个是数据.整理向,大量借鉴,非原创. 1.渲染组件. 我们先明确一点,所有的元素都必须通过render方法来输出渲染.所有,每个组件类最终 ...

  3. Django中提示消息messages的设置

    1. 引入messages模块 1 from django.contrib import messages 2. 把messages写入view中 1 @csrf_exempt 2 def searc ...

  4. mail如何在linux中发送邮件,使用163邮箱发信。

    如何在linux中发送邮件,使用163邮箱发信.   linux中,可以使用mail命令往外发送邮件,在使用前,只需要指定如下简单配置即可,这里演示用  163.com    邮箱发送至 qq.com ...

  5. JAVA根据A星算法规划起点到终点二维坐标的最短路径

    工具类 AStarUtil.java import java.util.*; import java.util.stream.Collectors; /** * A星算法工具类 */ public c ...

  6. VS2015常用的字体 和 插件

    Inconsolata 字体 自己常使用 Inconsolata 作为代码字体, 阅读代码非常舒适. 其他插件 GoToDef.vsix , 查看 声明非常方便. (ctrl+鼠标左键) Viasfo ...

  7. 【九度OJ】题目1195:最长&最短文本 解题报告

    [九度OJ]题目1195:最长&最短文本 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1195 题目描述: 输入多行字符串, ...

  8. 【LeetCode】423. Reconstruct Original Digits from English 解题报告(Python)

    [LeetCode]423. Reconstruct Original Digits from English 解题报告(Python) 标签: LeetCode 题目地址:https://leetc ...

  9. 防止 jar 包被反编译

    1.隔离Java程序 最简单的方法就是让用户不能够访问到Java Class程序,这种方法是最根本的方法,具体实现有多种方式.例如,开发人员可以将关键的Java Class放在服务器端,客户端通过访问 ...

  10. Centos 切换中文输入法

    切换输入法看起来是一个非常简单的操作,但是对于初学者来说,也并非那么简单,开始会发现按Ctrl+space无法切换中文输入法,原因是系统没有安装中文输入法,运行以下命令可以安装中文输入法: yum i ...