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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 从 Kubernetes 到“以应用为中心”的美好未来之间,全世界的 PaaS 工程师其实都在期待一项全新的技术能够弥补这之间的鸿沟。阿里云原生应用平台团队的做法是,通过为应用“建模”的方式来解决这个问题,这也正是 Open Application Model (OAM) 开源项目得以创建的重要目的。

0.png

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

前言

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

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

阿里巴巴的容器化之旅

1.png

阿里巴巴的容器化之旅始于 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.png

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)。

3.png

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

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

4.png

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

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

5.png

那么 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

加入钉钉讨论群:

6.png

3 群直播海报.png

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

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
Kubernetes 安全 Linux
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
Kubernetes 是一个开源系统,用于容器化应用的自动部署、扩缩和管理。它将构成应用的容器按逻辑单位进行分组以便于管理和发现。
2454 0
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
|
存储 运维 Kubernetes
【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
台湾作家林清玄在接受记者采访的时候,如此评价自己 30 多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色;第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰;进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正体味到了境界之美”。
【深度】阿里巴巴万级规模 K8s 集群全局高可用体系之美
|
存储 Kubernetes 安全
当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
8 月 26 日,我们发起了第 6 期 SIG Cloud-Provider-Alibaba 网研会直播。本次直播主要介绍了机密计算的概况, InclavareContainers 开源项目架构、已支持的功能和迭代计划,以及阿里云 ACK-TEE 的发展现状和规划。本文汇集了此次直播完整视频回顾及资料下载,并整理了直播过程中收集的问题和解答,希望能够对大家有所帮助~
当 Kubernetes 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
|
运维 资源调度 Kubernetes
阿里巴巴超大规模Kubernetes基础设施运维体系揭秘
在过去近三年时间,Kubernetes架构在阿里巴巴集团经历了飞速发展:既支持了集团统一调度超大规模场景,又支持了大批云上云产品用户,还在支持OXS区容器化。经过这些年的发展,我们也逐渐锤炼出了K8S Serverless全托管稳定性运维体系。这些运维和稳定性能力不是K8S原生就具备的,而是在大量实践和失败过程中的沉淀出来的系统稳定性加固能力。
|
Kubernetes 安全 Linux
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
508 0
【阿里云镜像】使用阿里巴巴开源镜像站镜像——Kubernetes 镜像
|
Kubernetes 容器
|
Kubernetes 安全 容器
《当 K8s 遇到机密计算,阿里巴巴如何保护容器内数据的安全?》电子版地址
当 K8s 遇到机密计算,阿里巴巴如何保护容器内数据的安全?
101 0
《当 K8s 遇到机密计算,阿里巴巴如何保护容器内数据的安全?》电子版地址
|
消息中间件 自然语言处理 监控
在阿里巴巴,我们如何先于用户发现和定位 Kubernetes 集群问题?
本文整理自阿里云高级研发工程师彭南光(光南) 在 KubeCon China 2021 大会的演讲实录,分享了阿里巴巴是如何通过自研通用链路探测+定向巡检工具 KubeProbe 应对大规模集群的稳定性挑战的。关于阿里云云原生团队在本次 KubeCon 上分享的全部内容沉淀于电子书《云原生与云未来的新可能》当中,可点击文末“阅读原文”下载。
在阿里巴巴,我们如何先于用户发现和定位 Kubernetes 集群问题?
|
运维 资源调度 Kubernetes
阿里巴巴超大规模 Kubernetes 基础设施运维体系揭秘
ASI 作为阿里集团、阿里云基础设施底座,为越来越多的云产品提供更多专业服务,托管底层 K8s 集群,屏蔽复杂的 K8s 门槛、透明几乎所有的基础设施复杂度,并用专业的产品技术能力兜底稳定性,让云产品只需要负责自己的业务,专业的平台分工做专业的事。
阿里巴巴超大规模 Kubernetes 基础设施运维体系揭秘
|
运维 资源调度 Kubernetes
阿里巴巴超大规模Kubernetes基础设施运维体系揭秘
ASI:Alibaba Serverless infrastructure,阿里巴巴针对云原生应用设计的统一基础设施。ASI 基于阿里云公共云容器服务 ACK之上,支撑集团应用云原生化和云产品的Serverless化的基础设施平台。
阿里巴巴超大规模Kubernetes基础设施运维体系揭秘

相关产品

  • 容器服务Kubernetes版