简介:OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目。它来自阿里巴巴多年来容器化、云原生的技术沉淀,是阿里内部生产环境大规模应用的基于 Kubernetes 之上的标准扩展组件,紧贴上游社区标准、适应互联网规模化场景的技术理念与最佳实践。

作者 | 王思宇(酒祝)
来源 | 阿里巴巴云原生公众号

背景

OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Foundation (CNCF) 下的 Sandbox 项目。它来自阿里巴巴多年来容器化、云原生的技术沉淀,是阿里内部生产环境大规模应用的基于 Kubernetes 之上的标准扩展组件,紧贴上游社区标准、适应互联网规模化场景的技术理念与最佳实践。

新版本概览

Kruise 在 2021 年 3 月 4 日发布了最新的 v0.8.0 版本(ChangeLog),本文以下对新版本做一个整体的概览介绍。

1. 新增 kruise-daemon 组件

过去已经使用过 OpenKruise 的同学一定知道,Kruise 安装之后运行的组件是 kruise-manager,它是一个中心化部署的 Operator 组件,包含了一系列 controller 控制器以及 webhook。

而从 v0.8.0 开始,我们又增加了 kruise-daemon 这个节点组件,通过 DaemonSet 部署到每个节点上。这样,一直以来社区小伙伴们提的类似镜像预热容器重启等需求,就有途径去实现啦!

Tips:

  • 目前 kruise 提供的官方镜像支持 Linux 的 amd64(x86)、arm64、arm/v7 架构,如果你的集群中存在非以上架构的节点,暂时是无法正常运行 kruise-daemon 的,有这类需求的同学可以提issue 说明你的需求。
  • 如果你存在上述情况,或者你不希望在某些节点上安装 kruise-daemon,可以在 helm 安装的时候通过 daemon.affinity 参数来指定 kruise-daemon 部署的亲和性规则。

2. 规模化镜像预热能力

在 Kubernetes 生态中,过去并没有一个成熟的镜像预热开源解决方案,可能更多的是一些公司在内部会落地一些适配于本地场景的预热,这其中也包括阿里巴巴。不过从 v0.8.0 开始,我们将阿里巴巴所做的镜像预热能力完全通用化输出到 OpenKruise 中,并且阿里内部的镜像预热也完全统一到这套开源的实现上来了。

OpenKruise 镜像预热的具体实现原理,我们会在后续的专项文章中做详细介绍,这里只以一个最简单的例子演示下如何做一个镜像的预热:

apiVersion: apps.kruise.io/v1alpha1
kind: ImagePullJob
metadata:name: job-nginx
spec:image: nginx:1.9.1   # [required] 完整的镜像名 name:tagparallelism: 10      # [optional] 最大并发拉取的节点梳理, 默认为 1selector:            # [optional] 指定节点的 名字列表 或 标签选择器 (只能设置其中一种),不设置表示全部节点names:- node-1- node-2matchLabels:node-type: xxxcompletionPolicy:type: Always                  # [optional] 默认为 AlwaysactiveDeadlineSeconds: 1200   # [optional] 无默认值, 只对 Alway 类型生效ttlSecondsAfterFinished: 300  # [optional] 无默认值, 只对 Alway 类型生效pullPolicy:                     # [optional] 每个节点上拉镜像的侧脸,默认 backoffLimit=3, timeoutSeconds=600backoffLimit: 3timeoutSeconds: 300

ImagePullJob 有两种 completionPolicy 类型:

  • Always 表示这个 job 是一次性预热,不管成功、失败都会结束

    • activeDeadlineSeconds:整个 job 的 deadline 结束时间
    • ttlSecondsAfterFinished:结束后超过这个时间,自动清理删除 job
  • Never 表示这个 job 是长期运行、不会结束,并且会每天都会在匹配的节点上重新预热一次指定的镜像

详细信息参考官网文档:https://openkruise.io/zh-cn/docs/imagepulljob.html

3. SidecarSet 全新重构实现

SidecarSet 是一个用于管理 sidecar 容器的控制器。在用户创建了 SidecarSet 之后,Kruise 能为后续创建的符合规定条件的 Pod 中自动注入用户定义的 sidecar 容器,以及对已注入的 sidecar 容器做原地升级同时不影响业务容器的运行。

在过去版本中,SidecarSet 的局限性较多,比如用户无法声明只对某个 namespace 生效、sidecar 原地升级时灰度能力较弱等。在 v0.8.0 中,我们全新重构了 SidecarSet 的 controller 和 webhook,并且在 CRD 定义上新增了一些更多能力的策略字段。举一些例子:

  1. spec.namespace:指定只管理具体某个命名空间的 sidecar 注入和升级
  2. 多种注入策略:

    1. podInjectPolicy:指定 sidecar 容器注入到 Pod 原 containers 列表的前面还是后面
    2. shareVolumePolicy:与 Pod 中原容器共享卷策略
    3. transferEnv:从原 Pod 中哪些容器里共享哪些环境变量
  3. 多种原地升级策略:

    1. maxUnavailable:升级过程中最大不可用数量
    2. partition:保留旧版本的数量(灰度/分批发布)
    3. selector:只升级符合 selector 条件 Pod 中的 sidecar(金丝雀发布)
    4. scatter:按标签打散发布

详细信息参考官网文档:https://openkruise.io/zh-cn/docs/sidecarset.html

4. 新的 feature-gate 机制

过去 OpenKruise 中的 CRD 以及 controller/webhook 开关,主要配置在 CUSTOM_RESOURCE_ENABLE 环境变量中,而其他一些可配置开关则集中在命令行参数中,带来的问题一来是较为分散,二来一些关联多个 CRD 的功能开关其实很难用 CRD 开关来控制。

因此,目前新增的 feature-gate 机制已经代替了 CUSTOM_RESOURCE_ENABLE 环境变量,聚焦于功能层面。

在 v0.8.0 提供了 PodWebhook、KruiseDaemon 两个开关,前者关闭后 kruise 不会对 pod creation 做 webhook 拦截,但同时也会关闭 SidecarSet 功能,后者关闭后不会部署 kruise-daemon 组件,但同时也会关闭镜像预热功能。后续版本中个,我们会逐渐把过去的开关参数统一到 feature-gate 中。

5. 其余一些变化点

其余部分优化:

  • CloneSet、Advanced StatefulSet 部分逻辑优化。
  • 在官方 DockerHub 之外新增阿里云托管镜像,国内用户可以选择使用阿里云镜像源来安装/升级 Kruise。
  • 调用 apiserver 的 user-agent 细化到控制器。
  • clientset 中为支持 scale 子资源的 CRD 新增 GetScale/UpdateScale 方法。

总结

OpenKruise v0.8.0 新版本,可以说是 Kubernetes 社区中首个提供开源的规模化镜像预热功能的产品了。而在今年后续的版本里,我们还计划提供利用镜像预热来加速应用发布、应用安全防护、Controller 灰度/分片管控等能力,预计在年中将推出 v1.0 大版本。

OpenKruise 是一个成熟的 CNCF 沙箱项目,除了在阿里巴巴内大规模应用之外,在行业内也有着广泛的用户案例:

  • 基于原地升级、灰度发布等需求,携程在生产环境使用 CloneSet、AdvancedStatefulSet 来分别管理无状态、有状态应用,单集群 Kruise workload 数量达到万级别。
  • OPPO 公司不仅大规模使用了 OpenKruise,还在下游配合其定制化的 Kubernetes 进一步加强了原地升级,广泛应用在多个业务的后端运行服务中,通过原地更新覆盖了 87% 左右的升级部署需求。
  • 此外,国内的用户还有斗鱼 TV、有赞、苏宁、比心、Boss 直聘、申通、小红书、火花思维、VIPKID、掌门教育、杭银消费、万翼科技、多点 Dmall、佐疆科技、享住智慧、艾佳生活、永辉科技中心、跟谁学、Deepexi,国外的用户有 Lyft、Bringg、Arkane Systems、Spectro Cloud 等。

我们欢迎每一位云原生爱好者共同参与 OpenKruise 的建设,共同打造业界顶尖的云原生应用自动化引擎!

最后的开源要闻

近期,阿里云 DADI (Data Accelerator for Disaggregated Infrastructure) 产品开源了!这是一个容器镜像加速器项目,已经在阿里巴巴内部有了大规模场景的应用。

它的主要原理是消除 image 的下载和解压缩过程,代之以实现细粒度数据块的按需拉取。这样可以削减绝大多数的数据下载工作,同时将计算延迟与数据传输延迟相互隐藏,最终达到大幅削减启动延迟的作用。

DADI 将容器 image 的分层特性与虚拟机 image 的块设备接口相结合,形成全新的分层块设备 image,称为 overlaybd。由于使用了块设备接口,DADI 可以支持原生文件系统,如 ext4、xfs、甚至 ntfs;块设备接口也可以自然地支持虚拟化的安全容器,并且只暴露最小的 attack surface。此外由于块设备 image 简单高效的特性,overlaybd 可以为用户提供更好的 I/O 性能。

有兴趣的同学可以参考论文看一下 Github 项目哦:

  • 论文地址
  • Github 地址

如果大家对 OpenKruise 项目感兴趣,有任何希望交流的话题,欢迎大家访问 OpenKruise 官网、GitHub,以及钉钉搜索群号:23330762,加入交流群!

原文链接:https://developer.aliyun.com/article/782683?

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

OpenKruise v0.8.0 版本:K8s 社区首个规模化镜像预热能力相关推荐

  1. OpenKruise v0.8.0 版本发布:K8s 社区首个规模化镜像预热能力

    作者 | 王思宇(酒祝) 来源 | 阿里巴巴云原生公众号 背景 OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Founda ...

  2. OpenKruise 如何实现 K8s 社区首个规模化镜像预热能力

    作者 | 王思宇(酒祝) 来源 | 阿里巴巴云原生公众号 前言 OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Founda ...

  3. OpenKruise v0.5.0 版本发布 | 云原生生态周报 Vol. 50

    作者 | 丁海洋.张晓宇.宋净超.孙健波 业界要闻 OpenKruise v0.5.0 版本发布,支持无损的流式分批发布策略 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在 Kube ...

  4. OpenKruise v0.7.0 版本发布:新增周期任务分发控制器

    作者 | 王思宇(酒祝) 来源|阿里巴巴云原生公众号 前言 OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment/State ...

  5. OpenKruise v0.9.0 版本发布:新增 Pod 重启、删除防护等重磅功能

    作者 | 王思宇(酒祝) Photo Creidt@ 王思宇(酒祝) 背景 ​ OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computin ...

  6. OpenKruise v0.5.0 版本发布,支持无损的流式分批发布策略

    作者 | 酒祝  阿里云技术专家 导读:OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment/StatefulSet 等控制 ...

  7. OpenKruise v0.10.0 版本发布:新增应用弹性拓扑管理、应用防护等能力

    简介:阿里云开源的云原生应用自动化管理套件.CNCF Sandbox 项目 -- OpenKruise,今天发布 v0.10.0 新版本,这也会是 OpenKruise v1.0 之前的最后一个 mi ...

  8. OpenKruise v0.8.0 核心能力解读:管理 Sidecar 容器的利器

    作者 | 赵明山(立衡) 来源 | 阿里巴巴云原生公众号 前言 OpenKruise 是阿里云开源的云原生应用自动化管理套件,也是当前托管在 Cloud Native Computing Founda ...

  9. OpenKruise v0.7.0发布:增加周期任务分发控制器

    简介:OpenKruise 是阿里云开源的大规模应用自动化管理引擎,在功能上对标了 Kubernetes 原生的 Deployment/StatefulSet 等控制器,但 OpenKruise 提供 ...

最新文章

  1. 易语言静态连接器提取_易语言静态编译链接器切换工具
  2. Selenium3自动化测试——20.使用HTMLTestRunner获取测试报告
  3. flume高可用-balance-配置文件编写
  4. 开发文档模板_需求文档模板一堆什么样的适合你呢?
  5. spring boot 分布式锁组件 spring-boot-klock-starter
  6. mysql架构深入_mysql性能优化2:深入认识mysql体系架构
  7. Hexo+GitHub 快速搭建个人博客(三)---- 改变主题
  8. KTH 皇家理工学院 计算机视觉和机器学习博士生 招生
  9. 利用计算机语言进行并行性描述,有没有一种语言可以利用大规模并行计算机?...
  10. MFC开发IM-设置 static的背景色和字体色
  11. Spring Cloud与微服务学习总结(13)——云原生趋势下,微服务的拆分粒度如何把握?
  12. SQL Server 2005:面向信息管理的全新平台
  13. 苹果有益让老iPhone变慢以迫使消费者购买新一代的iPhone?
  14. 道德经和译文_道德经 - 道德经全文及译文 - 道德经全文 - 老子道德经
  15. 影视解说短视频制作教程,从找素材到配音,上手很简单
  16. JavaScript总结(二:基础知识)
  17. 遇到的问题集合(倒序)
  18. 【原创】PC微信逆向分析の强制输出微信调式信息
  19. 小牛M+怎么样 看过你才知道
  20. 推荐免费学习使用的云服务器

热门文章

  1. 刚刚,Python 3.10 正式发布了!我发现了一个可怕的功能...
  2. 秀,用NBA球员数据学透K-Means聚类
  3. 还在用Matplotlib? 又一可视化神器pyecharts登场
  4. DeepMind刚向星际争霸 II 的玩家们下了战书!你的对手可能是只AI,而你毫不知情...
  5. 主要技术指标简介_期货常用技术指标(五)布林线
  6. php重置下标有什么用,怎么在PHP中删除空数组并重置数组键名
  7. java中如何检查字符串都是数字_如何在Java中检查字符串是否为数字?
  8. 2019数据安装勾选_万能的XY数据标签插件,柱形图也可以呈现变化率
  9. 深度学习-Tensorflow2.2-卷积神经网络{3}-卷积神经网络CNN示例-12
  10. c语言的那些小秘密pdf下载,C语言的那些小秘密之函数的调用关系.pdf