当前位置: 首页 > 后端技术 > Node.js

阿里开源!OpenKruise,云原生应用程序自动化引擎-直奔KubeCon

时间:2023-04-03 22:54:08 Node.js

阿里巴巴攻略:在最近的KubeConChina2019上,阿里云将与全球用户分享阿里巴巴超大规模云原生实现的实现、云原生前沿技术和应用,包括OpenKruise开源项目,开放云原生应用中心(CloudNativeAppHub),将发布边缘容器、云原生应用管理和交付系统等产品和服务。未来三天,阿里美连线会场,为大家带来实时报道。2019年6月24-26日,由CNCF主办的云原生技术大会KubeCon在中国上海拉开帷幕。阿里云容器平台团队正式宣布开源重量级项目OpenKruise,将基于阿里经济体多年的大规模应用部署能力发布和管理最佳实践积累向业界开放。OpenKruise是阿里巴巴的开源引擎,用于在Kubernetes上实现云原生应用程序自动化。Kruise项目源于阿里经济应用过去几年大规模应用部署、发布和管理的最佳实践,源于阿里云Kubernetes服务对千千万万客户的需求积累。在“云原生应用自动化引擎”的支持下,阿里巴巴经济体正在“全面上云”。随着云原生概念的兴起,越来越多的应用开始尝试在云原生的土壤上工作。那么什么是云原生呢?简而言之,云原生是一套可以充分利用“云”的能力,高效构建和交付应用的方法论,让应用容器化的用户可以充分利用云弹性和“不可变基础设施”的优势专注于您的核心业务价值。目前,阿里巴巴基础设施的云原生演进升级如火如荼。在阿里经济全面云化的过程中,阿里巴巴已经开始在超大规模互联网场景落地大量云原生概念,比如轻量级容器化。阿里巴巴经济体正在大规模推进应用的轻量级容器化,利用容器的敏捷、一致性等特性,实现符合云原生理念的电商站点交付快速搭建能力,以及适应“双十一”促销严格的技术要求。另一个例子是云原生应用程序管理。阿里巴巴经济体正在将Kubernetes等项目的应用编排和自动化能力渗透到上层运维框架中,驱动电商应用按照云原生的技术理念进行编排、交付和运行。在阿里巴巴经济体整体云原生化的过程中,阿里巴巴的技术团队逐渐形成了一套紧跟上游社区标准、适应大规模互联网场景的技术理念和最佳实践。其中,最重要的无疑是如何将应用的发布、运行和管理自动化。OpenKruise:阿里巴巴经济体云原生过程的宝贵经验和最佳实践在KubeConShanghai,阿里云容器平台团队正式宣布开源重量级项目OpenKruise(以下简称Kruise)。Kruise是cruise的谐音,“k”代表Kubernetes。字面意思是游轮或豪华游艇,寓意应用在Kubernetes上自动游弋,满载阿里巴巴多年应用部署管理经验。Kruise的目标是自动化Kubernetes上的一切!Kruise项目源于阿里巴巴经济应用多年来大规模应用部署、发布和管理的最佳实践,源于容器平台团队对集群应用的大规模运维。建站能力源于阿里云Kubernetes服务万千客户的需求。Kruise利用云原生社区优势,融合阿里云原生实践精髓,回馈社区,引导行业最佳云原生实践,少走弯路。OpenKruise是阿里巴巴的开源引擎,用于在Kubernetes上实现云原生应用程序自动化。Kruise的核心是自动化。我们将从不同维度解决应用在Kubernetes上的自动化,包括部署、升级、弹性伸缩、QoS调整、健康检查、迁移修复等。Kruise这次开源的内容主要是在应用部署和升级方面,即,一套增强的控制器组件,用于应用的部署、升级、运维。未来,Kruise将依次开源智能弹性伸缩组件,以及应用Qos自调整能力的组件。KruiseControllers:将Kubernetes的“控制器模式”进行到底下面的内容主要介绍KruiseControllers,这是一套用于在Kubernetes上自动部署和管理应用的控制器组件。众所周知,Kubernetes项目的核心原则是“控制器模式”。目前Kubernetes项目已经默认提供了一套Controller组件,比如Deployment、Statefulset、DaemonSet等,这些Controller提供了比较丰富的应用部署和管理功能。但是随着Kubernetes的应用越来越广泛,真实企业和大型场景中的业务需求与上游Controller的功能不匹配的情况越来越普遍。以阿里巴巴为例:阿里巴巴内部的Kubernetes集群需要服务50多个BU,上万个应用。这个体量非常大,给可扩展性和高可用带来了很大的挑战。同时,阿里云上的Kubernetes服务也连接了数以千计的企业客户,收集和支持了各种客户需求。这些诉求和阿里经济的实践经验最终促成了Kruise开源项目的诞生。Kruise的第一个开源主要包括以下Controller,后续会添加更多。AdvancedStatefulSet:StatefulSet,具有丰富的发布策略,支持就地升级。AdvancedStatefulSet扩展了原始的StatefulSet并添加了两个新功能。原地更新策略(In-placeupdatestrategy)原来的StatefulSet在做rollingupdate的时候会销毁重建pod。这在阿里巴巴规模的场景下,是一笔巨大的成本。首先,需要重新重新调度被删除应用的所有Pod。由于Pod数量较多,这给调度带来了不必要的开销。更糟糕的是,重新安排的Pod无法正常安排。由于资源占用、Affinity特性等原因。Pod被重新调度到一个新的节点,失去了原来的本地状态。虽然通常可以重建,但仍然会带来额外的开销。重新安排的pod很可能分布在不同的机器上。由于网络拓扑发生变化,需要重新申请IP。一些依赖IP维护的应用无法正常工作。另外,它也给网络流量的传输带来了不确定性。.对于多容器Pod,升级sidecar容器导致主容器重建一般是不能接受的。AdvancedStatefulSet引入了就地升级功能,允许在不破坏pod的情况下更新容器镜像。这样做的好处是效率和稳定性。效率很明显,pod不需要重新调度,仍然运行在原节点上,本地的一些存储状态仍然可以保留。稳定性体现在IP的维护上,网络拓扑和流量结构基本不变。稳定性一直是阿里巴巴和阿里云经济的一个极其重要的指标。允许最大不可用实例(MaxUnavailable)的配置社区原生的StatefulSet不允许在升级过程中同时升级多个实例。这主要是针对一些有状态的应用需要顺序升级的需求。但是从阿里场景和阿里云容器平台的客户来看,很多应用不需要顺序升级,效率低下。尤其是像阿里巴巴这种应用实例数量庞大的场景,这个问题尤为明显。MaxUnavailable的作用就是解决这个问题。它允许应用程序实例并行升级,并保持不可用实例的最大数量不超过MaxUnavailable的限制。BroadcastJob:像DaemonSet一样运行的一次性JobBroadcastJob将在集群中的每个节点上运行一个pod,直到它结束。与社区中的DaemonSet类似,不同的是DaemonSet始终维护一个pod长期服务运行在每个节点上,而这个pod最终会在BroadcastJob中结束。与DaemonSet相比,广播结束后不占用资源,特别适用于一些场景,比如升级节点中的一些组件,检查节点上的一些配置是否正确等。SidecarSet:一个强大的工具大规模场景下的Sidecar管理。Sidecar是Kubernetes中辅助容器的概念,与主容器运行在同一个pod中。Sidecar容器一般是监控容器、日志收集容器等一些基础服务组件。在一个公司中,主要业务容器和基础组件容器通常由不同的团队开发和维护。多个团队同时操作和修改同一个yaml文件或同一个API资源对象,往往会造成一些冲突,不易管理。SidecarSet的思想是将主业务容器和辅助容器的运维模式解耦。业务用户提交应用时,无需指定sidecar容器,sidecar容器对应的团队编写自动注入的规则。另外,在容器运维和升级过程中,利用AdvancedStatefulset的就地升级功能,业务团队和基础设施团队可以根据自己定义的策略升级各自对应的容器,不会耦合在一起升级,造成不必要的影响。其实Istio也是采用了类似的思路,将sidecar容器的功能自动注入到业务容器中,只是缺乏后期升级和维护sidecar容器的能力。SidecarSet有效地抽象了Sidecar容器的部署和管理。OpenKruise正在为开源社区招募合作伙伴和子项目!Kruise社区的指导方针是基于Kubernetes的核心技术理念构建更强大的自动化能力。目前,Kruise正计划发布更多的Controller来覆盖更多的场景和功能,比如丰富的发布策略、金丝雀发布、蓝绿发布、批量发布等。更重要的是,OpenKruise是一个Umbrella项目,OpenKruise的维护者是以最开放的态度在全球招募合作伙伴和贡献者。没错,我们期待您为OpenKruise贡献和共建新的自动化能力,或者共同推动Kubernetes云原生应用编排能力的演进和发展。本文作者:未来已来阅读原文。文字来自云栖社区合作方“阿里科技”。