OpenKruise:阿里巴巴 双11 全链路应用的云原生部署基座

本文涉及的产品
云原生网关 MSE Higress,422元/月
容器镜像服务 ACR,镜像仓库100个 不限时长
注册配置 MSE Nacos/ZooKeeper,182元/月
简介: Kruise 是 Cruise 的谐音,'K' for Kubernetes,寓意 Kubernetes 上应用的航行和自动巡行,它满载着阿里巴巴多年在大规模应用部署、发布与管理最佳实践,以及阿里云 Kubernetes 服务数千客户的需求沉淀。

来源 | 阿里巴巴云原生公众号

作者 | 王思宇(酒祝)

OpenKruise 是由阿里云于 2019 年 6 月开源的云原生应用自动化引擎,本质是基于 Kubernetes 标准扩展出来一个的应用负载项目,它可以配合原生 Kubernetes 使用,并为管理应用容器、sidecar、镜像分发等方面提供更加强大和高效的能力,从而在不同维度上通过自动化的方式解决 Kubernetes 之上应用的规模化运维和规模化建站问题,包括部署、升级、弹性扩缩容、Qos 调节、健康检查、迁移修复等等。

1.jpeg

Kruise 是 Cruise 的谐音,'K' for Kubernetes,寓意 Kubernetes 上应用的航行和自动巡行,它满载着阿里巴巴多年在大规模应用部署、发布与管理最佳实践,以及阿里云 Kubernetes 服务数千客户的需求沉淀。

OpenKruise: 阿里巴巴 双11 全链路应用的云原生部署基座

在阿里巴巴经济体的整体云原生化过程当中,阿里的技术团队逐渐沉淀出了一套紧贴上游社区标准、适应互联网规模化场景的技术理念与最佳实践。这其中,最重要的无疑是如何对应用进行自动化的发布、运行和管理。于是,阿里云容器团队将这些能力通过  OpenKruise 反哺社区,以期指引业界云原生化最佳实践,少走弯路。

今年 双11,阿里巴巴实现了核心系统的全面云原生化。截至 2020 年 双11,阿里巴巴内部已运行近十万 OpenKruise 的 workload、管理着上百万容器。

1. 内部运行的 OpenKruise 版本代码超 95% 来自社区仓库

下图展示了阿里巴巴内部运行的 OpenKruise 版本与开源版本之间的关系:

2.png

从上图可以看出:Github 上的 OpenKruise 就是我们主体的上游仓库,而内部的下游仓库只基于公共接口实现了极少数内部耦合功能(这部分代码只占据了不到 5%),也就是说阿里巴巴内部运行的 OpenKruise 其中 95% 以上的代码完全来自于社区仓库。

有两点值得说明:

  • 所有通用能力,我们都会直接基于开源仓库开发和提交,然后再同步到内部环境。
  • 社区成员为 OpenKruise 贡献的每一行代码,都将运行在阿里内部环境中。

2. 在 Kubernetes 上自动化应用程序工作负载管理

做上层业务的同学可能对 “应用负载(workload)” 缺乏概念,这里先简单做个介绍。不知道你是否有好奇过,每一次应用扩缩容、发布操作的背后是如何实现的呢?在云原生的环境下,我们都是通过面向终态的方式去描述应用的部署需求(需要的机器数、镜像版本等等),见下图:

3.png

应用负载(workload)主要指的就是这个 YAML 定义和对应的控制器:

当应用扩缩容时,PaaS(运维平台)会修改上述 YAML 对象中的需求机器数(比如扩容 10 台改为 110,再缩容 5 台则改为 105),然后控制器就会按照 workload 期望的数量来调整实际运行的 Pod(容器)数量。当应用触发发布或回滚时,PaaS(运维平台)则会修改上述 YAML 对象中的镜像版本和发布策略,控制器就会按照给指定的发布策略来将所有管理的 Pod(容器)重建为期望版本(这只是一些便于理解的简化描述,实际工作机制会复杂得多)。

也就是说,应用负载(workload)管理着应用所有容器的生命周期。不仅应用扩容、缩容、发布都依赖于 workload 的工作,workload 还负责持续维持应用运行时的 Pod(容器)数量,来保证持续有符合期望数量的实例在跑着。如果有宿主机发生故障、上面的应用实例被驱逐,那么 workload 会立即再为应用扩出新的容器。

3. 双11 核心应用全面基于 OpenKruise 部署

随着阿里巴巴经济体上云,双11 主体相关的电商类业务、以及中间件等应用都迁移到了云原生环境下,统一使用 OpenKruise 的应用负载能力做部署。OpenKruise 提供了多种不同类型的 workload 来支持不同的部署方式:

4.png

  • CloneSet:(无状态应用)这是规模最大的部分,绝大部分泛电商业务都是通过 CloneSet 来部署发布。
  • Advanced StatefulSet:(有状态应用)目前主要是用于中间件在云原生环境的部署。
  • SidecarSet:(sidecar 生命周期管理)可以将定义好的 sidecar 容器动态注入到新建的 Pod 中,云上的运维容器、 mesh 容器都是通过这种机制加入到业务 Pod 中。
  • Advanced DaemonSet:将宿主机级别的守护进程部署到所有节点上,包括各种用于给业务容器配置网络、存储的基础组件。

因此,我们看到从上层电商业务到中间件,再到运维容器、基础组件,整个上下游链路都是依赖于 OpenKruise 提供的 workload 做部署和运行。不管是应用运行时的机器数量、版本管理,还是紧急扩容、发布等操作,都有 OpenKruise 无时无刻在维护着。

可以想象,如果 OpenKruise 出现了故障会发生什么?

  • 如果只是控制器挂了,则应用扩缩容、发布操作全量失败。
  • 而如果控制器逻辑存在重大 bug,比如数量或版本号计算错误,甚至可能引起业务容器大规模误删或是升级为错误的版本。

当然,针对以上高危情况,我们做了很多重的防护措施,务必保障业务的稳定可用。

这就是阿里巴巴的云上部署基座,OpenKruise 几乎承载了全量 双11 业务的部署管理与运维职责。

4. 主要能力

OpenKruise 从何而来?或者说什么问题或需求促使了 OpenKruise 的诞生呢?

当上云成为大势、当云原生逐渐成为标准,我们却发现 Kubernetes 原生提供的 workload 能力根本无法满足阿里巴巴超大规模业务场景的需求:

  • 应用发布时,所有容器都要飘移重建:对于我们来说几乎无法接受,在发布高峰期如果阿里巴巴的大规模应用都在大规模重建,这是不管对于业务自身还是其他调度器、中间件、网络/存储组件都是一种灾难性的压力。
  • 无状态应用负载(Deployment)无法灰度升级容器。
  • 有状态应用负载(StatefulSet)无法并行升级容器。
  • 还有很多,这里不一一列举......

在这种背景下,OpenKruise 出现了。我们通过或是全新开发(CloneSet、SidecarSet),或是兼容性增强(Advanced StatefulSet、Advanced DaemonSet),来使得上层业务终于可以顺利落地云原生。

OpenKruise 首推的功能就是“原地升级”。通过这种能力,我们终于可以使应用发布不需要将容器飘移重建,而是在原地、原 Pod 上只升级需要更新的镜像。这样带来的好处太多了:

  • 发布效率大大提升。根据不完全统计数据,在大部分业务场景下原地升级至少比完全重建升级提升了 80% 以上的发布速度:不仅省去了调度、分配网络、分配远程盘的耗时,连拉取新版本镜像的时候都得益于 node 上已有旧镜像、只需要拉取较少的增量 layer。
  • 发布前后 IP 不变、升级过程 Pod 网络不断,并且 Pod 中除了正在升级容器之外的其他容器都一直保持正常运行。
  • Volume 不变,完全复用原容器的挂载设备。
  • 确保了集群确定性,使全链路压测通过后的集群拓扑为大促提供保障。

当然,除此之外我们还增强了许多其他的高级能力,满足了许多种面向大规模场景下的业务诉求,本文不做一一介绍,但下图可以看到 OpenKruise 与 Kubernetes 原生应用负载针对无状态、有状态应用的功能对比:

5.png

OpenKruise 已正式进入 CNCF Sandbox

2020 年 11 月 11 日,在这个特殊的时点,阿里巴巴技术人又迎来一件大事:经 CNCF 技术监督委员会全体成员投票,一致同意将阿里云开源的 OpenKruise 正式晋级为 CNCF 托管项目。

正如开篇所说,OpenKruise 已经完成了社区开源,并且内外的版本做到几乎完全一致。除此之外,我们还将 OpenKruise 提供到了阿里云容器服务的应用目录中,公有云上的任意客户都可以一键安装和使用 OpenKruise,真正实现 OpenKruise 在阿里集团内部业务、云产品、开源社区中的“三位一体”。目前在 ACK 上使用 OpenKruise 的客户主要包括斗鱼 TV、申通、有赞等,而开源社区中携程、Lyft 等公司也都是 OpenKruise 的用户和贡献者。

OpenKruise 将基于阿里巴巴超大规模场景锤炼出的云原生应用负载能力开放出来,不仅在云原生社区中补充了扩展应用负载的重要板块,还为云上客户提供了阿里巴巴多年应用部署的管理经验和云原生化历程的最佳实践成果。从正式开源之日起,OpenKruise 项目已经建立多个关键里程碑: 

  • Maintainer 5 位成员来自阿里巴巴、腾讯、Lyft 
  • 44 位贡献者

    • 国内:阿里云、蚂蚁集团、携程、腾讯、拼多多...
    • 国外:微软、Lyft、Spectro Cloud、Dsicord...
  • 1900+ GitHub Stars
  • 300+ Forks

后续,OpenKruise 的重点包括但不限于以下几个目标:

  • 继续将阿里巴巴内部沉淀的通用云原生应用自动化能力输出,走可持续的三位一体发展战略。
  • 深度挖掘细分领域的应用负载需求,比如我们正在探索针对 FaaS 场景的池化能力。
  • 与其他相关领域的开源产品做更紧密的结合,如 OAM/KubeVela 等,打造更完整的云原生应用体系。

欢迎加入 OpenKruise 大家庭

如果你对 OpenKruise 的发展有任何建议,欢迎发表在下方评论区。另外,你可以通过搜索钉钉群号:23330762 进入 “OpenKruise 社区交流钉钉群”,我们衷心欢迎每一位开源爱好者来参与 OpenKruise 的建设,共同打造云原生领域最成熟、面向最大规模的应用自动化引擎。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
196 13
|
9月前
|
运维 Cloud Native 安全
云原生技术在现代企业中的应用与挑战####
本文探讨了云原生技术在现代企业IT架构中的关键作用,分析了其带来的优势和面临的主要挑战。通过实际案例分析,揭示了如何有效应对这些挑战,以实现业务敏捷性和技术创新的平衡。 ####
|
9月前
|
Cloud Native 持续交付 开发者
云原生技术在现代企业中的应用与实践####
本文深入探讨了云原生技术的核心概念及其在现代企业IT架构转型中的关键作用,通过具体案例分析展示了云原生如何促进企业的敏捷开发、高效运维及成本优化。不同于传统摘要仅概述内容,本部分旨在激发读者对云原生领域的兴趣,强调其在加速数字化转型过程中的不可或缺性,为后续详细论述奠定基础。 ####
|
5月前
|
Kubernetes Cloud Native Serverless
OpenKruise v1.8版本解读:解锁云原生应用管理的无限可能
OpenKruise在2025年2月发布了最新的1.8版本。此版本带来了诸多重要的更新与增强,致力于进一步提升云原生应用管理的效率、弹性和可靠性。
|
5月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
311 12
|
7月前
|
Cloud Native 安全 Serverless
云原生应用实战:基于阿里云Serverless的API服务开发与部署
随着云计算的发展,Serverless架构日益流行。阿里云函数计算(Function Compute)作为Serverless服务,让开发者无需管理服务器即可运行代码,按需付费,简化开发运维流程。本文从零开始,介绍如何使用阿里云函数计算开发简单的API服务,并探讨其核心优势与最佳实践。通过Python示例,演示创建、部署及优化API的过程,涵盖环境准备、代码实现、性能优化和安全管理等内容,帮助读者快速上手Serverless开发。
|
9月前
|
Kubernetes Cloud Native 物联网
云原生技术在现代软件开发中的应用与挑战####
本文探讨了云原生技术的兴起背景、核心理念及其在现代软件开发中的广泛应用。通过具体案例分析,揭示了云原生架构如何促进企业数字化转型,并指出了在实施过程中面临的主要挑战及应对策略。 ####
|
9月前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建
|
9月前
|
Cloud Native JavaScript Docker
云原生技术:构建现代应用的基石
在数字化转型的浪潮中,云原生技术如同一艘承载梦想的航船,引领企业驶向创新与效率的新海域。本文将深入探索云原生技术的核心价值,揭示其如何重塑软件开发、部署和运维模式,同时通过一个简易代码示例,展现云原生应用的构建过程,让读者领略到云原生技术的魅力所在。
|
10月前
|
消息中间件 Cloud Native 持续交付
云原生技术在现代企业中的应用与优势###
本文深入探讨了云原生技术在现代企业中的具体应用及其带来的显著优势。随着云计算的普及,云原生作为一种新兴的技术架构,正逐渐成为企业数字化转型的关键驱动力。文章将详细介绍云原生的核心概念、主要技术组件以及在实际业务场景中的成功案例,旨在为读者提供一个全面且实用的参考框架,以便更好地理解和应用云原生技术。 ###