作者:邓洪超 阿里巴巴应用交付专家

前言

通过 K8s,用户能够自定义基础设施,可以平行的替换或改造平台的已有功能,而非只能局限在平台提供的能力之上构建。但正是这样的“白盒化”体验,正在为越来越多的研发和运维带来“太复杂”的困扰。

从 Kubernetes 到“以应用为中心”的美好未来之间,全世界的 PaaS 工程师其实都在期待一项全新的技术能够弥补这之间的鸿沟。阿里云原生应用平台团队的做法是,通过为应用“建模”的方式来解决这个问题,这也正是 Open Application Model (OAM) 开源项目得以创建的重要目的。

阿里巴巴的容器化之旅

阿里巴巴的容器化之旅始于 2013 年。在 Docker 诞生之前,阿里巴巴基于 lxc 的容器引擎研发了容器技术 T4,用于在裸机上部署和管理应用程序。

2017 年, 阿里巴巴内部孵化了类似于 K8s 的容器编排引擎 Sigma 作为资源统一层,用于管理内部机器池,平均利用率达到 40%。

2018 年,Sigma 重新设计并迁移成兼容 K8s API,阿里巴巴重新编写了自定义控制器和调度算法,并向暴露声明式 API 给用户试用。

2019 年底,阿里巴巴中的大多数应用都在 K8s 上运行,并且在 K8s 之上构建了数十个原生框架,构筑 K8s 生态系统。而 2019 年的 双11 活动不仅仅是商业上的成功,更是 K8s 基础设施可以支持如此大规模的有力证明。

在解决了 K8s 中的规模化和稳定性问题之后,我们开始面临一个新的挑战:K8s API 过于复杂,开发人员很难学习。

导致 K8s API 复杂的 3 个原因

K8s API 之所以复杂,主要有以下三个主要原因:

1. K8s 缺乏以“应用”为中心的资源模型

K8s 中没有“应用”的概念,只有松散耦合的基础架构资源。部署应用需要编写 Pod、设置网络和存储之类的基础设施资源,非常底层。然而,对于开发人员来说,他们不想配置这些复杂的底层资源信息,他们想从开发层面指定应用部署规范,例如具有自动扩容、监控、Ingress 等功能的无状态服务组件。我们需要提供更高层级的应用层抽象和以应用程序为中心的资源模型,以弥合部署应用程序和配置之间的差距。

2. K8s API 中没有分离开发和运维的关注点

其次,K8s API 中没有分离开发和运维的关注点。从上图可以看出,K8s 将所有属于不同角色的字段封装在一个 API 中。例如,开发人员仅需指定容器映像、端口和运行状况检查;运维人员则负责配置副本大小、滚动更新策略、存储卷访问模式等。

对于 K8s API 来说这样的声明是没有问题的。K8s 意在公开基础架构功能,并用于构建其他平台。因此,它需要包含所有内容,并提供多合一的 API。但是,我们发现多合一 API 不适合写应用程序的终端用户。在 K8s API 之上,我们需要区分角色、将开发和运维的关注点分离开。

3. 在 K8s 上没有可移植的应用抽象定义

K8s 定义了使用基础资源的标准方法。但是如上所述,部署应用程序需要网络接入、监控、日志等。我们需要对那些应用程序操作接口进行标准化,实现可移植的应用层抽象。

OAM 开启下一代云原生 DevOps 技术革命

针对上述 K8s API 过于复杂、开发人员难学习的问题,这里来介绍一下由阿里巴巴联合微软在社区推出的用于构建和交付云原生应用的标准规范 -- 开放应用程序模型 OAM(Open Application Model)。

2019 年 10 月,阿里巴巴宣布联合微软共同推出开放应用模型项目(Open Application Model - OAM)。

所谓“应用模型”,其实是一个专门用来对云原生应用本身和它所需运维能力进行定义与描述的标准开源规范。所以对于 Kubernetes 来说,OAM 即是一个标准的“应用定义”项目(类比已经不再活跃的 Kubernetes Application CRD 项目),同时也是一个专注于封装、组织和管理 Kubernetes 中各种“运维能力”、以及连接“运维能力”与“应用”的平台层项目。

在 OAM 中,一个应用程序包含三个核心理念:
第一个核心理念是组成应用程序的服务组件(Component),它包含微服务、数据库、云服务等;
第二个核心理念是描述应用程序运维特征(Trait)的集合,例如,弹性伸缩和 Ingress 等功能。它们对应用程序的运行至关重要,但在不同环境中其实现方式各不相同;
最后,为了将这些描述转化为具体的应用实例,运维人员使用应用配置(Application Configuration)来组合组件和相应的特征,以构建可部署的应用交付实例。

如上图所示,我们可以看到开发人员定义了组件 (Component) 来描述服务单元。然后运维人员定义运维特征 (Trait),并将其附加到前面的组件上,最后构成 OAM 可交付物 -- ApplicationConfiguration。在图中最下方,底层的基础设施资源将通过 OAM 平台呈现。

那么 OAM 如何解决上述三个 Kuberntes API 的问题?首先,OAM 隐藏了底层基础架构细节(例如,是云还是物联网),专注于应用层抽象,提供以应用为中心的资源模型。其次,OAM 划分了应用交付路径上的开发、运维、基础架构三种角色,分离了关注点,让流程更加清晰和易于管理。第三,K8s 定义了基础架构的可移植抽象,而 OAM 站在 K8s 的肩膀上,提供了可移植的应用层抽象,让同一个应用可以跨平台运行。

OAM 还定义了一组核心工作负载/运维特征/应用范畴,作为应用程序交付平台的基石。并且,这些核心规范有一个开源实现 -- Crossplane。Crossplane 提供了让用户扩展其功能的机制。例如 Crossplane core 提供的 ContainerizedWorkload,在容器中运行应用程序并管理应用程序的生命周期。
此外,我们还可以添加更多工作负载(例如 FaaS)以运行无服务器功能,或者添加运维特性(例如 CronHPA)来定义 CronJob 类型的 HPA 策略。OAM 以标准的声明方式在单个平台中管理应用交付能力和流程。当模块化的 Workload 和 Trait 越来越多,就会形成组件市场。而 OAM 就像是这个组件市场的管理者,处理组件之间的关系,把许多组件集成起来变成一个产品交付给用户。OAM 加持下的 PaaS,可以像乐高积木一样灵活组装底层能力、运维特征、以及开发组件。使得应用管理变得统一,功能却更加强大!

结语

以上我们讨论了 OAM 的背景、动机和架构细节。值得注意的是,OAM 项目是开源中立、由社区驱动的。该规范和实现得到包括 Alibaba、Microsoft、Upbound 在内的开放社区的支持。我们欢迎更多的人参与其中,共同定义云原生应用交付的未来。

您可以在 github repos 上贡献:https://github.com/oam-dev/spec
加入邮件列表: https://groups.google.com/forum/#!forum/oam-dev

加入社区周会: Bi-weekly, Tuesdays 10:30AM PST

加入钉钉讨论群:

“阿里巴巴云原生关注微服务、Serverless、容器、Service Mesh 等技术领域、聚焦云原生流行技术趋势、云原生大规模的落地实践,做最懂云原生开发者的技术圈。”

电控 应用层开发 学习_阿里巴巴如何改善开发人员在 K8s 上的体验?相关推荐

  1. 阿里巴巴如何改善开发人员在 K8s 上的体验?

    作者:邓洪超 阿里巴巴应用交付专家 前言 通过 K8s,用户能够自定义基础设施,可以平行的替换或改造平台的已有功能,而非只能局限在平台提供的能力之上构建.但正是这样的"白盒化"体验 ...

  2. 恩施软件开发人员每月多少钱_恩施软件开发学习,恩施软件开发学习哪家好,恩施软件开发学习一般能拿多少工资...

    恩施软件开发学习,恩施软件开发学习哪家好,恩施软件开发学习一般能拿多少工资 首页 > 软件 > 恩施软件开发学习 作者:镀金池   发布时间:2017-11-22 18:54 因为cent ...

  3. 从Unix开源开发学习应对大型复杂项目开发

    封装与抽象 在 Unix.Linux 系统中,有一句经典的话,"Everything is a file",翻译成中文就是"一切皆文件".这句话的意思就是,在 ...

  4. 2021物联网开发学习——基于小熊派IoT开发板Bear-Pi-IOT、E53_IA1_智慧农业拓展板与小熊派-鸿蒙·季Bear-Pi-HM Nano并接入Hi-Link

    2021物联网开发学习--基于小熊派IoT开发板Bear-Pi-IOT.E53_IA1_智慧农业拓展板与小熊派-鸿蒙·季Bear-Pi-HM Nano并接入Hi-Link 目录 作者介绍 目的 用到的 ...

  5. web开发 学习_是否想学习Web开发但不知道从哪里开始?

    web开发 学习 by Rick West 由里克·韦斯特(Rick West) 是否想学习Web开发但不知道从哪里开始? (Want to learn web development but don ...

  6. 哈尔滨java开发工资_给哈尔滨Java开发初学者的几个学习建议

    对于初学者应该如何学习Java开发技术,纵观中国目前整体行业来说,互联网IT行业成为了拔尖的行业,IT互联网程序开发成了靠自己能力可以多挣一点钱,所以各个行业都在转行,其实互联网不存在饱和,只不过大多 ...

  7. python前端开发招聘_【天津前端开发招聘_最新天津前端开发招聘信息】-前程无忧...

    天津卓众信息技术有限公司天津-西青区0.6-1万/月11-23 学历要求:本科|工作经验:3-4年|公司性质:民营公司|公司规模:少于50人 1.根据产品设计实现产品的页面交互和数据逻辑展示,负责前端 ...

  8. 重庆找Java开发工作_重庆【Java开发程序员】

    重庆[Java开发程序员],提倡一切为了学员就业的办学思想,教学过程中坚持以练习企业项目为主,让学员真正能学到技术,毕业就能适应工作岗位. 重庆[Java开发程序员], Java 编程开发.而且很多软 ...

  9. 微信开发学习总结(三)——开发微信公众号的最基本功能——普通消息的接收和回复...

    2019独角兽企业重金招聘Python工程师标准>>> 一.微信公众平台消息管理接口介绍 要实现微信公众号的普通消息的接收和回复,我们需要先熟悉微信公众平台API中消息接口部分,点此 ...

最新文章

  1. GridView不能添加头布局,并且scrollView与GridView冲突导致一些页面无法融合
  2. 深入理解Java:注解(Annotation)自定义注解入门
  3. 42_ResNet (深度残差网络)---学习笔记
  4. 搭建K8s集群(kubeadm方式)-部署master节点
  5. 【汇编语言】王爽实验5(5)(6)的解答 建立数据类型匹配的观念
  6. BABOK - 开篇:业务分析知识体系介绍
  7. mysql基础测试_MySQL基础知识测试
  8. wifi弱口令检查(2)
  9. 吴恩达机器学习logistic回归作业(python实现)
  10. CFFI - ABI模式与API模式
  11. php读取xml的值,PHP读取XML值的代码(推荐)
  12. Python练习题四 for循环
  13. 汽车零部件开发工具巨头V公司全套应用层UDS协议栈源代码
  14. 2021年部分节假日放假安排公布
  15. 安卓8.1系统SDK去掉系统设置中的自动调节亮度
  16. 返款接口教程,转账到支付宝账户开通方法
  17. 怎么制作gif动态图 QQ动态表情包怎么制作
  18. chrome浏览器被360流氓捆绑,如何解决?
  19. python字典和集合对象可以进行索引操作吗_python 集合(set)和字典(dictionary)的用法解析...
  20. ElegantLatex:优美的 LATEX 模板 (对文章,书籍进行排版)

热门文章

  1. ajax中tooltip,工具提示插件——tooltip
  2. oracle中查询实现以下结果,如何在Oracle中为查询结果分配等级?
  3. 红橙Darren视频笔记 换肤框架1 获取其他apk中的资源
  4. LIF模型及其变种 Training Spiking Deep Networks for Neuromorphic Hardware
  5. 【数据库基础知识】数据库表格——主键和外键
  6. 重装jdk后运行java程序出现Error: could not open `C:\Program Files\Java\jre68\lib\amd64\jvm.cfg'的解决办法
  7. eclipse安装Android模拟器genymotion及其插件
  8. 模拟cmos集成电路设计_单级放大器中的噪声--CMOS模拟集成电路视频课程节选
  9. oracle当查询没有输出返回0,ORACLE技术问题专家问答五则
  10. html5 crosshair,嘿,纯正ROG血统 CROSSHAIR VIII IMPACT (开箱篇)最终版