乐趣区

关于安全:OpenKruise-v080-版本K8s-社区首个规模化镜像预热能力

简介: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:tag
  parallelism: 10      # [optional] 最大并发拉取的节点梳理, 默认为 1
  selector:            # [optional] 指定节点的 名字列表 或 标签选择器 (只能设置其中一种),不设置示意全副节点
    names:
    - node-1
    - node-2
    matchLabels:
      node-type: xxx
  completionPolicy:
    type: Always                  # [optional] 默认为 Always
    activeDeadlineSeconds: 1200   # [optional] 无默认值, 只对 Alway 类型失效
    ttlSecondsAfterFinished: 300  # [optional] 无默认值, 只对 Alway 类型失效
  pullPolicy:                     # [optional] 每个节点上拉镜像的侧脸,默认 backoffLimit=3, timeoutSeconds=600
    backoffLimit: 3
    timeoutSeconds: 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,退出交换群!

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

退出移动版