OpenKruise 提升云原生应用自动化新高度

本文涉及的产品
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
应用实时监控服务-应用监控,每月50GB免费额度
函数计算FC,每月15万CU 3个月
简介: 云原生的应用负载从Kubernetes原生的workloads(Deployment、StatefulSet)为人所熟知,但另一方面,我们也看到从中小型创业公司到大型互联网公司,越是大规模的应用场景下,这些原生的 workloads 越无法满足复杂的业务部署诉求。OpenKruise是阿里巴巴内部百万 Pod 调度场景中沉淀出来的最佳实践。本次分享的内容包括:原生 workloads 存在的问题、OpenKruise 带来了哪些新的能力、社区发展规划等。

摘要:


云原生的应用负载从 Kubernetes 原生的 workloadsDeploymentStatefulSet)为人所熟知,但另一方面,我们也看到从中小型创业公司到大型互联网公司,越是大规模的应用场景下,这些原生的 workloads 越无法满足复杂的业务部署诉求。


OpenKruise 是阿里巴巴内部百万 Pod 调度场景中沉淀出来的最佳实践。本次分享的内容包括:原生 workloads 存在的问题、OpenKruise 带来了哪些新的能力、社区发展规划等。

图片 1.png

分享人:赵明山(立衡),OpenKruise 作者&初创成员之一,阿里云技术专家,阿里云容器服务团队,负责阿里巴巴百万容器调度系统研发工作。

一、阿里巴巴应用部署基座:OpenKruise

 

1. OpenKruise 是什么?

 

OpenKruise 是基于 Kubernetes 的扩展应用管理套件,是 CNCF 托管的 Sandbox 项目,阿里巴巴经济体上云全面依赖的部署基座。

 

OpenKruise项目地址:https://github.com/openkruise/kruise

 

2. OpenKruise vs.PaaS

 

•   OpenKruise 不是一个 平台,并且也不会提供任何 PaaS 层的能力;

•   PaaS可以通过使用 OpenKruise 提供的扩展功能,使应用部署、管理流程更加强大与高效;

下图是基于 Kubernetes 部署容器的逻辑架构图,通过 GitLab Jenkins 部署镜像,将应用通过容器部署到 Kubernetes 集群,与 Kubernetes 交互是以 Apiserver 的方式,OpenKruiseKubernetes 扩展的组件,与 Kubernetes 完全兼容。

图片 2.png

基于 OpenKruise 部署 Kubernetes 的逻辑架构图

 

3. OpenKruise 能做什么?

 

a.  OpenKruise 专注领域包括:

 

•  通用工作负载(部署、发布);

•  Sidecar容器管理;

•  应用分区管理;

•  增强运维能力;

•  可用性防护;

图片 3.png

 

b.  OpenKruise的通用性:

 

•  绝大部分能力都是基于 CRD 扩展来定义;

•   可以运行在任意纯净的 Kubernetes 集群中;

 

官方文档:https://openkruise.io/zh/docs/

 

4.阿里“双十一”全链路部署基座

 

图片 4.png

 

OpenKruise是阿里“双十一”全链路部署基座。其中:

 

a.   CloneSet部署了集团大部分无状态应用;

b.   Advanced StatefulSet是针对原生StatefulSet的扩展,部署有状态的中间件应用;

c.   SidecarSetSidecar管理的资源,针对Mesh容器、运维容器、安全容器的管理;

d.   Advanced DaemonSet针对基础网络组件和基础存储组件;

e.   Operation Capabilities针对运维能力。

 

二、OpenKruise为云原生带来高效的部署能力

 

1. 核心能力1 - 原地升级

 

a.  Kubernetes - Pod维度的不可变基础设施

如下图所示,在K8sPod重建需要删除旧的Pod然后调度再拉起新的Pod,流程复杂且耗时长,如果在类似双十一的场景下就无法实现。


图片 5.png

 

b.  容器维度的管控能力 - 原地升级


下图中CloneSet是针对Deployment的工作负载,省去中间的Replicas直接连Pod,如果Pod要升级,CloneSet先停止nginx v1,拉起v2版本镜像,这个过程不涉及Pod重建,Pod的网络、存储都不变,即为原地升级。


图片 6.png

 

c.  原地升级的优势:


•   节省了调度的耗时,Pod的位置、资源都不发生变化;

•   节省了分配网络的耗时,Pod还使用原有的IP

•   节省了分配、挂载远程盘的耗时,Pod还使用原有的 PV(且都是已经在Node 上挂载好的);

•   节省了大部分拉取镜像的耗时,因为Node上已经存在了应用的旧镜像,当拉取新版本镜像时只需要下载少数的几层layer

•   原地升级Pod中某个容器时,其他容器保持正常运行,网络、存储均不受影响。

 

2.核心能力2 - Sidecar管理

 

Sidecar管理是通过在Pod里定义专门容器,来执行主业务容器需要的辅助工作。比如:日志收集、Debug应用、Service Mesh Istio


图片 7.png


a.  优势:


将辅助能力同业务容器解耦,实现独立发布和能力重用;

 

b.  缺点:


•    Sidecar升级将导致业务Pod重建;

•    业务Pod配置耦合(运维、安全、代理)多种sidecar,增加配置的复杂性,以及sidecar更新难度。


图片 8.png


c.  SidecarSet管理Sidecar容器的利器


针对上述缺点开发的SidecarSet工作负载,如下图:


图片 9.png


•    业务只需要配置Podweb-server服务,中间件logtail开发者配置SidecarSet中的selectorlogtail containers细项。业务配置好将Pod放入K8s集群,OpenKruise会将webserverSidecar Container自动注入Sidecar容器,实现分开配置,以减轻业务压力;


•    OpenKruise的另一个能力是原地升级Sidecar容器,中间件开发者需要升级logtail只需在Sidecar配置中将logtail镜像版本从v1改成v2OpenKruise监测到后会选择适合的Pod停止其旧版本并原地拉起新版本,这一过程不会对业务有任何影响。

 

3.核心能力3 - 镜像预热

 

a.  Pod的创建过程vs.用户期望:


•    用户的期望:极致弹性、妙极扩容、弹出即可用;

•    实际创建过程:


图片 10.png


思考:镜像拉去占用了大量时间,能否有优化的空间?


b.  OpenKruise提供规模化镜像预热的能力


OpenKruise提供ImagePullJobCRD解决上述问题。


图片 11.png


•    组合拳:镜像预热+扩容


1)   原始Pod扩容流程/耗时:


图片 12.png


2)   ImagePullJob长期预热app基础镜像和Sidecar镜像:


图片 13.png


3)   基础预热后的Pod扩容/耗时:


图片 14.png

 

•    终极组合拳:镜像预热+原地升级


1)   基础预热后的Pod重建升级流程/耗时:


图片 15.png


2)   默认原地升级:


图片 16.png


3)   原地升级+镜像预热:


CloneSet可以在灰度第一批Pod时,提前在后续批次Pod的节点上预热即将发布的新版镜像,以节约耗时,提升发布效率。


图片 17.png


4)   终态原地升级:


图片 18.png

 

4.  核心能力4 - 应用安全防护

 

a.  级联删除防护


面向终态是Kubernetes的一个核心能力,但同时也存在一定的风险(见下图):


图片 19.png


•    CRD误删除导致所有CR对象丢失;

•    Namespace误删除导致Namespac下所有对象被删除;

•    Workload误删除导致Workload下面所有的Pod被删除。

 

因此,OpenKruise提供级联删除防护能力,将定义的资源增加一个label,当发生删除时,OpenKruise会对加label的资源进行再校验。


metadata: 
labels: 
policy.kruise.io/delete-protection: Cascading


•   Cascading:这个对象如果还有可用的下属资源,则禁止被删除;

•   Always:这个对象禁止被删除,除非上述label 被去掉。

 

支持防护的资源类型:


•    Namespace

•    CustomResourceDefinitionCRD

•    Built-in WorkloadsDeploymentStatefulSetReplicaSet

•    Kruise WorkloadsCloneSetAdvanced StatefulSet...

 

b.  应用Pod最小可用数量保护


Kubernetes原生PDBPodDisruptionBudget)只能拦截 Pod eviction驱逐操作。OpenKruisePUBPodUnavailableBudget)会针对主动导致Pod不可用的操作进行整体的防护,包括:


•    驱逐;

•    删除;

•    应用原地升级;

•    Sidecar原地升级;

•    (主动)容器重启;


如下代码,当定义maxUnavailable25%时,OpenKruise会尽量保证主动导致Pod不可用的操作数量在25%以下。


apiVersion: policy.kruise.io/v1alpha1
 kind: PodUnavailableBudget
 spec:
   selector:
     # ... label selector
   targetRef:
     # ... workload reference
   maxUnavailable: 25%
     # minAvailable: 15


当所有会导致Pod不可用的操作,在经过ApiServer时全部被OpenKruise Webhook拦截,Webhook会根据客户定义的PUB结合Pod当前所用数量来决定当前操作是否可以执行。


图片 20.png

 

5.  核心能力5 - 分区拓扑和弹性管理

 

a.  云时代的“部署挑战”


图片 21.png


K8s中部署都是均匀的,不会有优先等级。OpenKruise提供弹性调度能力,在业务高峰期时将Pod部署在ECI上按量付费,高峰期过后就可以将ECI中的Pod缩容。

 

b.  Kubernetes原生提供的多区域打散能力


缺点:


•   只能按topology均等打散,不支持比例、不支持优先级、不支持动态选择;

•   调度器无法干预缩容,依赖workload自身实现。


图片 22.png

 

c.  WorkloadSpread“分区管理和弹性能力”


WorkloadSpread指针对一个Deployment下面应用部署分多个区域:固定区域和弹性区域,因此可以实现如下核心能力:


•   支持原生Workload

•   按比例部署;

•   支持缩容优先级;

•   扩缩容均保持拓扑;

•   支持soft spread能力;

•   旁路方式,可插拔;

•   Patch Pod Template:针对不同区域不同机器Pod可以进行差异化配置;


图片 23.png

WorkloadSpread架构

 

d.  “极致弹性调度”最佳实践


图片 24.png


在上图代码中:


•   subset-asubset-b,分别对应右图中的自由资源池和弹性资源池;

•   maxRelicas:300,是自由资源池最多300Pod


右图是饿了么的一个场景,由于其白天使用的多而晚上少,因此使用定时HPA,白天扩容机器到弹性资源池的Pod中,晚上再关闭,只保留自有资源池。

 

三、社区发展与规划

 

1. OpenKruise社区发展

 

•   Star2.9k

•   Contributor69

•   2019.7v0.1-> 2021.12v1.0.0

•   规划:2022 CNCF Sandbox -> Incubation

•   双周周会(每周四晚19点)

 

业界用户:


•   国内:阿里巴巴、蚂蚁、携程、苏宁、OPPO、小米、斗鱼TV、有赞、Boss直聘、申通、小红书等25+ 登记企业用户;

•   国外:LyftBringgArkane SystemsSpectro Cloud 5+ 登记企业用户。


感兴趣的朋友可以加入社区钉钉群了解更多内容,一起交流分享。


图片 25.png

 

2. Roadmap

 

图片 26.png

 

未来会针对以下领域开展工作:


a.   针对有状态的服务,比如固定IPPV

b.   资源分发;

c.   分批发布、流量发布、灰度发布;

 

欢迎对以上领域感兴趣的朋友加入社区一起分享。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
9月前
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
205 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实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
321 12
|
7月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
188 2
|
7月前
|
Kubernetes 持续交付 开发工具
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
阿里云协同万兴科技落地ACK One GitOps方案,全球多机房应用自动化发布,效率提升50%
|
8月前
|
XML 人工智能 文字识别
Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
Mobile-Agent 是一款基于多模态大语言模型的智能代理,能够通过视觉感知自主完成复杂的移动设备操作任务,支持跨应用操作和纯视觉解决方案。
2714 10
Mobile-Agent:通过视觉感知实现自动化手机操作,支持多应用跨平台
|
9月前
|
机器学习/深度学习 人工智能 自然语言处理
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
CogAgent-9B 是智谱AI基于 GLM-4V-9B 训练的专用Agent任务模型,支持高分辨率图像处理和双语交互,能够预测并执行GUI操作,广泛应用于自动化任务。
302 12
CogAgent-9B:智谱 AI 开源 GLM-PC 的基座模型,专注于预测和执行 GUI 操作,可应用于自动化交互任务
|
9月前
|
人工智能 缓存 异构计算
云原生AI加速生成式人工智能应用的部署构建
本文探讨了云原生技术背景下,尤其是Kubernetes和容器技术的发展,对模型推理服务带来的挑战与优化策略。文中详细介绍了Knative的弹性扩展机制,包括HPA和CronHPA,以及针对传统弹性扩展“滞后”问题提出的AHPA(高级弹性预测)。此外,文章重点介绍了Fluid项目,它通过分布式缓存优化了模型加载的I/O操作,显著缩短了推理服务的冷启动时间,特别是在处理大规模并发请求时表现出色。通过实际案例,展示了Fluid在vLLM和Qwen模型推理中的应用效果,证明了其在提高模型推理效率和响应速度方面的优势。
云原生AI加速生成式人工智能应用的部署构建