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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
性能测试 PTS,5000VUM额度
简介: 云原生的应用负载从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.   分批发布、流量发布、灰度发布;

 

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

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
8天前
|
Cloud Native 安全 物联网
云原生技术在现代软件开发中的应用与挑战####
云原生,这一词汇如同一股强劲的科技风暴,席卷了整个信息技术领域,它不仅重塑了软件的开发模式,还引领了一场关于效率、可扩展性和弹性的深刻变革。本文旨在深入探讨云原生技术的核心概念,分析其在现代软件开发中的广泛应用,并直面伴随其发展而来的挑战,为读者勾勒出一幅既充满机遇又不乏考验的云原生技术图景。 ####
|
15天前
|
运维 Linux Apache
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
Puppet 作为一款强大的自动化运维工具,被广泛应用于配置管理领域。通过定义资源的状态和关系,Puppet 能够确保系统始终处于期望的配置状态。
37 3
|
2天前
|
敏捷开发 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
【10月更文挑战第23天】本文将深入探讨云原生技术在现代企业中的广泛应用,并结合具体案例分析其对企业数字化转型的推动作用。我们将从云原生技术的基本原理出发,逐步揭示其在提高业务敏捷性、降低成本和增强系统可靠性方面的优势。同时,文章还将分享一系列成功实施云原生技术的企业案例,为读者提供实践中的参考和启示。最后,我们将讨论云原生技术面临的挑战及未来的发展趋势,为企业在这一领域的进一步探索提供指导。
|
3天前
|
Cloud Native 持续交付 云计算
云原生技术深度探索:构建现代化应用的基石####
【10月更文挑战第21天】 本文将深入探讨云原生技术的核心概念、关键技术及其在现代软件开发中的应用。我们将从容器化、微服务架构、持续集成/持续部署(CI/CD)、无服务器架构等关键方面展开,揭示这些技术如何共同作用,帮助企业实现高效、弹性且易于维护的应用部署与管理。通过实例分析,展现云原生技术在实际项目中的显著优势,为读者提供一套全面理解并应用云原生技术的指南。 ####
16 2
|
9天前
|
运维 Cloud Native 持续交付
云原生技术在现代IT架构中的深度应用与挑战####
【10月更文挑战第17天】 本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的核心作用与面临的挑战。云原生不仅是一种技术实现,更是企业数字化转型的重要推手,通过容器化、微服务、持续集成/持续部署(CI/CD)等关键要素,重塑软件开发、部署与运维模式。文章首先概述了云原生的基本原则与核心组件,随后分析了其如何促进企业敏捷性、可扩展性和资源利用率的提升,同时也指出了在安全性、复杂性管理及人才技能匹配等方面存在的挑战,并提出了相应的对策建议。 ####
34 6
|
10天前
|
运维 监控 Cloud Native
云原生技术在现代企业中的应用与挑战####
【10月更文挑战第15天】 本文深入探讨了云原生技术如何重塑企业的IT架构,并分析了其带来的机遇与面临的挑战。通过案例分析,揭示了云原生技术在提升业务敏捷性、降低运维成本方面的显著优势,同时也指出了在安全性、多云管理等方面的潜在难题,为企业决策者提供了有价值的参考。 ####
14 3
|
15天前
|
人工智能 运维 Cloud Native
云原生应用开发平台 CAP(Cloud Application Platform)应用心得
云原生应用开发平台 CAP(Cloud Application Platform)是阿里云提供的一站式应用开发及应用生命周期管理平台。
19 1
|
17天前
|
运维 Cloud Native 持续交付
云原生技术:构建现代应用的基石
【10月更文挑战第9天】在数字化转型的浪潮中,云原生技术如同一股清流,引领着企业走向更加灵活、高效的未来。本文将深入探讨云原生的核心概念,揭示其在现代应用开发与部署中的重要作用,并通过实际案例分析,展现云原生技术如何助力企业实现敏捷开发和自动化运维,最终提升业务竞争力。
51 3
|
17天前
|
运维 关系型数据库 MySQL
自动化运维工具Ansible的实战应用
【10月更文挑战第9天】在现代IT运维领域,效率和可靠性是衡量一个系统是否健康的重要指标。自动化运维工具Ansible因其简洁、易用的特性,成为了众多企业和开发者的首选。本文将通过实际案例,展示如何利用Ansible进行日常的运维任务,包括配置管理、软件部署以及批量操作等,帮助读者深入理解Ansible的应用场景及其带来的效益。
|
14天前
|
Cloud Native Devops 云计算
云原生技术:构建现代应用的新基石
【10月更文挑战第12天】 本文深入探讨了云原生技术的核心理念、关键技术和实践方法,揭示了其在现代应用开发和运维中的重要地位。通过分析云原生技术的发展趋势和面临的挑战,本文为读者提供了全面而深入的理解,旨在帮助读者更好地利用云原生技术构建高效、灵活和可扩展的现代应用。
33 0