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

OpenKruise - 云原生应用自动化引擎正式开源

时间:2023-04-03 20:15:04 Node.js

OpenKruise——云原生应用自动化引擎正式开源(CloudNativeAppHub),将发布边缘容器、云原生应用管理和交付系统等产品和服务。OpenKruiseGithub地址:https://github.com/openkruise/kruise阿里在“云原生应用自动化引擎”加持下的“云原生”。直到土壤。那么什么是云原生?简而言之,云原生是一套可以充分利用“云”的能力,高效构建和交付应用的方法论,让应用容器化的用户可以充分利用云的弹性。专注于自身的核心业务价值。目前,阿里巴巴基础设施的云原生演进升级如火如荼。在阿里巴巴上云的过程中,阿里巴巴已经开始在超大规模的互联网场景落地大量的云原生概念,比如轻量级容器化。阿里巴巴经济体正在大规模推广轻量级应用。量化容器化,利用容器敏捷、一致性的特性,实现快速构建符合云原生理念的电商站点交付能力,适应类似于“双清”的严苛技术要求。十一”宣传;再比如云原生应用管理,阿里巴巴经济体正在将Kubernetes等项目的应用编排和自动化能力渗透到上层运维框架中,驱动电商应用按照规范编排、交付和运行。具有云原生技术概念。在阿里经济体整体云原生化的过程中,阿里巴巴的技术团队逐渐形成了一套紧跟上游社区标准、适应大规模互联网场景的技术理念和最佳实践。其中,最重要的无疑是如何将应用的发布、运行和管理自动化。OpenKruise:阿里巴巴经济体云原生过程的宝贵经验和最佳实践在KubeConShanghai,阿里云容器平台团队正式宣布开源一个重量级项目——OpenKruise(以下简称Kruise)。Kruise是cruise的谐音,'k'代表Kubernetes。它的字面意思是游轮,豪华游艇。意味着应用在Kubernetes上的自动巡航,承载了阿里巴巴多年的应用部署和管理经验。Kruise的目标是自动化Kubernetes上的一切!Kruise项目源于阿里巴巴经济应用多年来大规模应用部署、发布和管理的最佳实践,源于容器平台团队对集群应用的大规模运维。建站能力源于阿里云Kubernetes服务上千家客户积累的需求。Kruise利用云原生社区优势,融合阿里云原生实践精髓,回馈社区,引导行业最佳云原生实践,少走弯路。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并添加了两个新功能。1)原地更新策略:原生StatefulSet在滚动更新时会销毁重建pod。这在阿里巴巴规模的场景下,是一笔巨大的成本。a)首先,需要重新重新调度被删除应用的所有Pod。由于Pod数量众多,这给调度带来了不必要的开销。更糟糕的是,由于资源占用、亲和属性等原因,重新调度的Pod无法正常调度。Pod被重新调度到一个新的节点,失去了原来的本地状态。虽然通常可以重建,但仍然会带来额外的开销。b)重新安排的pod很可能分布在不同的机器上。由于网络拓扑变化,需要重新申请IP,部分依赖IP维护的应用无法正常工作。肯定。c)对于多容器Pod,升级sidecar容器导致主容器重建一般是不能接受的。AdvancedStatefulSet引入了就地升级功能,允许在不破坏pod的情况下更新容器镜像。这样做的好处是效率和稳定性。效率很明显,pod不需要重新调度,仍然运行在原节点上,本地的一些存储状态仍然可以保留。稳定性体现在IP的维护上,网络拓扑和流量结构基本不变。稳定性一直是阿里巴巴和阿里云经济的一个极其重要的指标。2)允许最大不可用实例(MaxUnavailable)的配置社区原生的StatefulSet不允许在升级过程中同时升级多个实例。这主要是针对一些有状态的应用需要顺序升级的需求。但是从阿里场景和阿里云容器平台的客户来看,很多应用不需要顺序升级,效率低下。尤其是像阿里巴巴这种应用实例数量庞大的场景,这个问题尤为明显。MaxUnavailable这个功能官方就是为了解决这个问题而设计的。它允许应用程序实例并行升级,并保持不可用实例的最大数量不超过MaxUnavailable的限制。BroadcastJob-像DaemonSet一样运行的一次性作业。广播作业将在集群中的每个节点上运行一个pod,直到它完成。与社区中的DaemonSet类似,不同的是DaemonSet始终维护一个运行在每个节点上的podlongservice,而在BroadcastJob中,pod最终会结束。与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云原生应用编排能力的演进和发展。更多信息请前往KruiseGithub:https://github.com/openkruise/kruise本文作者:Dicho阅读云栖社区原创内容原文,未经许可不得转载。