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

在本次 KubeCon 上,阿里云将为全球用户分享阿里巴巴超大规模云原生落地实践、云原生前沿技术与应用包括OpenKruise 开源项目、开放云原生应用中心(Cloud Native App Hub),同时将重磅发布边缘容器、云原生应用管理与交付体系等产品和服务。

“云原生应用自动化引擎”加持下的阿里“云原生”

随着云原生概念的兴起,越来越多的应用开始尝试在云原生的土壤上耕耘。那么什么是云原生,简而言之,云原生就是一套能够充分利用“云”的能力,高效构建与交付应用的方法论集合,使得应用容器化的用户可以充分的利用云的弹性、“不可变基础设施”等优势专注于自身核心业务价值。

当前,阿里巴巴基础设施的云原生演进与升级也正在如火如荼的进行。而在阿里巴巴上云的过程中,阿里内部在超大规模的互联网场景中,已经开始进行大量的云原生的理念落地实践,比如轻量级容器化,阿里巴巴经济体正在大规模推进应用的轻量级容器化,从而达成利用容器的敏捷、一致等特性快速构建符合云原生理念的电商站点交付的能力,适应类似“双十一”大促的严苛技术需求;再比如说云原生应用管理, 阿里巴巴经济体正在将 Kubernetes 等项目的应用编排与自动化能力,穿透到上层运维框架当中,驱动电商应用按照云原生的技术理念进行编排、交付和运行。

在阿里巴巴经济体的整体云原生化过程当中,阿里的技术团队逐渐沉淀出了一套紧贴上游社区标准、适应互联网规模化场景的技术理念与最佳实践。这其中,最重要的无疑是如何对应用进行自动化的发布、运行和管理。

OpenKruise:来自阿里经济体云原生化历程的宝贵经验与最佳实践

在 KubeCon 上海,阿里云容器平台团队正式宣布了重量级项目 - OpenKruise(以下简称Kruise)的开源。

Kruise 是 cruise的谐音,'k' for Kubernetes. 字面意义巡航,豪华游艇。寓意Kubernetes上应用的自动巡航,满载阿里巴巴多年应用部署管理经验。

Kruise 的目标是automate everything on Kubernetes ! Kruise 项目源自于阿里巴巴经济体应用过去多年的大规模应用部署、发布与管理的最佳实践,源于容器平台团队对集团应用规模化运维,规模化建站的能力,源于阿里云Kubernetes服务数千客户的需求沉淀。Kruise 借力于云原生社区,集成阿里巴巴云原生实践之精华,反哺社区,指引业界云原生化最佳实践,少走弯路。

Kruise 核心在于自动化,我们将从不同维度解决 Kubernetes之上应用的自动化,包括,部署,升级,弹性扩缩容,Qos调节,健康检查,迁移修复等等。此次Kruise开源的内容主要在应用部署,升级方面,即一套增强版controller组件用于应用的部署和级和运维。后续,Kruise会依次开源智能化的弹性扩缩容组件,以及应用Qos自调节能力的组件等。

Kruise Controllers:将 Kubernetes 的“控制器模式”进行到底

以下内容主要介绍 Kruise Controllers - 一套用于 Kubernetes 之上应用自动化部署管理的 controller 组件。众所周知,Kubernetes 项目的核心原理,就是“控制器模式”。目前,Kubernetes 项目默认已经提供了一套 Controller 组件,例如 Deployment, Statefulset, DaemonSet 等,这些 Controller 提供了比较丰富的应用部署和管理功能。但是,随着 Kubernetes 的使用范围越来越广,真实的企业与规模性场景中的业务诉求与上游 Controller 功能不匹配的情况也越来越常见。以阿里巴巴为例:阿里巴巴内部的 Kubernetes 集群需要服务涵盖50几个 BU,上万种应用。这个体量非常庞大,对规模性和高可用性带来了巨大的挑战。与此同时,阿里云上的 Kubernetes 服务也接入了上千家企业客户,收集并支撑了各种各样的客户需求。这些诉求与最后阿里经济体的实践经验,最终促成了 Kruise 开源项目的诞生。

Kruise 第一期开源主要包含以下 Controller,后续会加入更多。

Advanced StatefulSet - 具备丰富发布策略、支持原地升级的 StatefulSet

Advanced StatefulSet 扩展了原生的 StatefulSet,加入了两个新的特性。

1)原地升级 (In-place update strategy)原生的 StatefulSet 在做 rolling update 的时候会销毁并且重建 pods. 这在阿里巴巴规模体量的场景下,代价巨大。
a) 首先,所有被删除的应用的Pods需要被重新调度一遍,由于pod数量大,这对调度带来了不必要的开销,更糟的是,重新调度的pod无法正常被调度,由于资源被占用,亲和特性等其他原因。Pod被重新调度到新的node上,损失了原来的本地 state, 虽然通常可以被重建,但是还是带来额外开销。
b) 重调度后的 pods 很有可能分布在不同的机器上,由于网络拓扑结构的改变,需要重新申请IP, 有些依赖IP保持的应用无法正常工作,此外,对网络流量的传输带来了不确定性。
c) 针对多容器的 Pod, 升级 sidecar 容器而导致主容器重建,通常是不可接受的。

Advanced StatefulSet 引入了原地升级功能,允许在不销毁pod的情况下,更新容器 image。这样带来的好处是,效率和稳定性。效率很明显,pod 不需要被重新调度了,还是跑在原来的node,一些本地存储state还是可以保留。稳定性体现在 IP 保持,网络拓扑以及流量结构基本不变,稳定性在阿里巴巴及阿里云经济体中一直以来是一个极其重要的指标。

2)允许最大不可用实例的配置(Max Unavailable)

社区原生的 StatefulSet 在升级的过程中是不允许同时升级多个实例的,这主要是为了某些有状态应用需要依次按序升级的需求。但是,从阿里巴巴场景,以及阿里云容器平台之上的客户了解到,许多应用不需要依次按序升级的语义,这样带来的问题是效率太低。特别是像阿里巴巴一些应用实例数巨大的场景,问题尤其显著。MaxUnavailable 的功能正式为了解决这个问题,它允许应用实例被并行升级,且保持始终保持最大不可用的实例数不超过 MaxUnavailable 的限制数。

Broadcast Job - 像 DaemonSet 那样运行的一次性 Job
Broadcast Job 会在集群中每个node上面跑一个pod直至结束。类似于社区的DaemonSet, 区别在于DaemonSet始终保持一个pod长服务在每个node上跑,而BroadcastJob中最终这个pod会结束。相比DaemonSet,Broadcast结束后不再占用资源,这在某些场景中特别适用,比如升级node中某些组件,检测node上一些配置是否正确等。

SidecarSet - 大规模场景下 Sidecar 管理利器
Sidecar 在Kubernetes中是一个辅助容器的概念,和主容器跑在同一个pod中。Sidecar容器一般是一些基础服务组件如monitoring容器,log collection容器等。在一个公司中,主业务容器,和基础组件容器通常由不同的团队开发和维护,多个团队同时操作和修改同一份yaml文件,同一个API资源对象,时常会产生一些冲突,且不便于管理。SidecarSet的理念在于将主业务容器和辅助容器的运维模式解耦。当业务用户提交应用时,不需要显示指定sidecar容器,由sidecar容器相应的团队编写规则负责自动注入。并且在容器运维和升级时候,利用Advanced Statefulset 原地升级的功能,业务团队,和基础架构团队分别按照自己定义的策略升级各自相应的容器,而不需要耦合在一起升级,产生不必要的影响。Istio 其实采用类似的思想自动给业务容器注入sidecar容器的功能,但是其缺乏sidecar容器后续升级运维的能力。SidecarSet有效地把Sidecar容器的部署和管理抽象出来。

OpenKruise 正在面向开源社区招募合作伙伴与子项目!

Kruise 社区的准则,是基于Kubernetes 的核心技术理念来构建更强大的自动化能力。目前,Kruise 正在计划发布更多的Controller来覆盖更多的场景和功能比如丰富的发布策略,金丝雀发布,蓝绿发布,分批发布等等。

更为重要的是,OpenKruise 是一个 Umbrella 项目,OpenKruise 的维护者们,正以最开放的姿态面向全球招募合作伙伴和贡献者。没错,我们非常期待您能够为 OpenKruise 贡献和共建新的自动化能力,或者一起来共同推 Kubernetes 云原生应用编排能力的演进与发展。


原文链接
本文为云栖社区原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/518546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

过去15年间,到底是什么真正推动了云计算的革命?

来源 | Ohad Maislish译者 | 孙薇 责编 | 徐威龙封图| CSDN下载于视觉中国虚拟机的兴起我还记得,我第一次听说虚拟机是在2002年,我们需要一种能够在Windows OS上运行Linux的方法。当头一次看到在VMware Workstation上运行的虚拟机时,我非常震…

Flowable 数据库表结构 ACT_RU_VARIABLE

运行时流程变量数据表( act_ru_variable ) 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√主键标识REV_乐观锁int√乐观锁TYPE_类型nvarchar(255)备注9NAME_名称nvarchar(255)变量名称EXECUTION_ID_执行实例IDnvarchar(64)√执行的IDPROC_INST_ID_流程实例IDnv…

支付宝的商业与技术创新双轮驱动 创造数字时代普惠金融“奇迹”

2019年6月28日,在中国国际软件博览会上,蚂蚁金服金融科技产品技术总监杨冰发表主题演讲,分享了蚂蚁金服在过去的十多年里,是如何通过商业创新与技术创新的双轮驱动,创造出数字时代的普惠金融“奇迹”。 蚂蚁金服金融科…

Java-异常02 捕获和抛出异常

ArithmeticException 算术异常 public class Test {public static void main(String[] args) {int a 1;int b 0;try { // try监控区域System.out.println(a/b);} catch (ArithmeticException e){System.out.println("程序出现异常,变量B不能为0");} fi…

Flowable 数据库表结构 ACT_RU_TASK

运行时任务节点表( act_ru_task ) 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√ID_REV_乐观锁int√乐观锁EXECUTION_ID_执行实例IDnvarchar(64)√执行实例IDPROC_INST_ID_流程实例IDnvarchar(64)√流程实例IDPROC_DEF_ID_流程定义IDnvarchar(64)√流程定义ID…

基于Tablestore Tunnel的数据复制实战

前言 数据复制主要指通过互联的网络在多台机器上保存相同数据的副本,通过数据复制方案,人们通常希望达到以下目的:1)使数据在地理位置上更接近用户,进而降低访问延迟;2)当部分组件出现故障时&a…

今天,我要教妹子学会Spring:Aware、异步编程、计划任务

来源 | 沉默王二教妹子学 Spring,没见过这么放肆的标题吧?作者我有一个漂亮如花的妹妹(见封面图,别问我怎么又变了?还不能一天做个梦了?),她叫什么呢?我想聪明的读者能猜…

Java-异常03 自定义异常

// 自定义的异常类 public class MyException extends Exception{// 传递数字 > 10private int detail;public MyException(int a) {this.detail a;}// toString: 异常的打印信息Overridepublic String toString() {return "MyException{" detail };} }public …

Flowable 数据库表结构 ACT_RU_JOB

运行时定时任务数据表( act_ru_job ) 字段名称字段描述数据类型主键为空取值说明ID_标识nvarchar(64)√标识REV_版本int√版本TYPE_类型nvarchar(255)类型LOCK_EXP_TIME_锁定释放时间datetime√锁定释放时间LOCK_OWNER_挂起者nvarchar(255)√挂起者EXCLUSIVE_bit√EXECUTION_ID…

SLS机器学习最佳实战:批量时序异常检测

0.文章系列链接 SLS机器学习介绍(01):时序统计建模SLS机器学习介绍(02):时序聚类建模SLS机器学习介绍(03):时序异常检测建模SLS机器学习介绍(04)…

Teradata应用迁移到AnalyticDB for PostgreSQL指导

AnalyticDB for PostgreSQL(简称:ADB for PG)对Teradata语法有着很好的兼容,将Teradata应用迁移到ADB for PG,只需进行有限的修改。本文介绍将Teradata应用迁移到ADB for PG应该注意的事项。 1 建表语句 我们通过一个…

一张900w的数据表,怎么把原先要花费17s执行的SQL优化到300ms?

来源 | 程序员乔戈里 封图| CSDN下载于视觉中国有一张财务流水表,未分库分表,目前的数据量为9555695,分页查询使用到了limit,优化之前的查询耗时16 s 938 ms (execution: 16 s 831 ms, fetching: 107 ms),按照下文的方…

Flowable 数据库表结构 ACT_RU_IDENTITYLINK

运行时流程人员表( act_ru_identitylink ) 任务参与者数据表。主要存储当前节点参与者的信息。 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√ID_REV_乐观锁int√乐观锁GROUP_ID_组IDnvarchar(64)√组IDTYPE_类型nvarchar(255)√备注7USER_ID_用户IDnvarchar…

浅析基于 Serverless 的前后端一体化框架

概述 Serverless 是一种“无服务器架构”模式,它无需关心程序运行环境、资源及数量,只需要将精力聚焦到业务逻辑上的技术。基于 Serverless 开发 web 应用,架构师总是试图把传统的解决方案移植到 Serverless 上,虽然可以做到既拥…

Java-总结

常用类 集合框架 IO流 多线程 网络编程 GUI 注解与反射 https://www.bilibili.com/video/BV12J41137hu?p80

一文告诉你,如何在 Kubernetes 的容器引擎中运行 KVM 和 VMware VM!

作者 | Gilson Melo译者 | 天道酬勤 责编 | 徐威龙封图| CSDN下载于视觉中国随着微服务的出现,人们通常会问:“是否有可能通过Kubernetes上的微服务在基于内核的虚拟机(KVM)或VMware 中运行我的旧虚拟机,还是需要将它们…

Flowable 数据库表结构 ACT_RU_EXECUTION

运行时流程执行实例表( act_ru_execution ) 字段名称字段描述数据类型主键为空取值说明ID_ID_nvarchar(64)√ID_REV_乐观锁int√乐观锁PROC_INST_ID_流程实例IDnvarchar(64)流程实例IDBUSINESS_KEY_业务主键IDnvarchar(255)√业务主键IDPARENT_ID_父节点实例IDnvarchar(64)√父…

性能压测工具选型对比

本文是《Performance Test Together》(简称PTT)系列专题分享的第二期,该专题将从性能压测的设计、实现、执行、监控、问题定位和分析、应用场景等多个纬度对性能压测的全过程进行拆解,以帮助大家构建完整的性能压测的理论体系&…

adb-基础命令

查看连接 adb devices --查看连接的手机安装APP adb install -r apk在电脑路径 -- 安装APP adb install -r 替换已存在的应用程序,也就是说强制安装 adb install -g 为应用程序授予所有运行时的权限 -l 锁定该应用程序 -r 替换已存在的应用程序&…

大数据架构如何做到流批一体?

阿里妹导读:大数据与现有的科技手段结合,对大多数产业而言都能产生巨大的经济及社会价值。这也是当下许多企业,在大数据上深耕的原因。大数据分析场景需要解决哪些技术挑战?目前,有哪些主流大数据架构模式及其发展&…