在线工具 在线编程 在线白板 在线工具 在线编程 在线白板

OpenKruise :Kubernetes背后的托底

是这样的,想请讲解下,OpenKruise :Kubernetes背后的托底
最新回答
青春︶兵荒马乱

2025-03-29 07:00:25

本文分享自华为云社区《OpenKruise核心能力和工作原理》,作者:可以交个朋友。

一、诞生背景
Kubernetes 自身提供的应用部署管理功能,无法满足大规模应用场景的需求,例如应用发布时的原地升级策略,流式扩容,缩容顺序控制等等。所以OpenKruise的出现弥补了 Kubernetes 在应用部署、升级、防护、运维等领域的不足。

二、OpenKruise介绍
核心能力介绍,帮助快速入门openkruise。

2.1 架构预览
OpenKruise 的功能都是通过 Kubernetes API 来提供的。

三、核心能力
OpenKruise 是一个基于 Kubernetes 的扩展套件,主要聚焦于云原生应用的自动化,比如部署、发布、运维以及可用性防护。OpenKruise 提供的绝大部分能力都是基于 CRD 扩展来定义,它们不存在于任何外部依赖,可以运行在任意纯净的 Kubernetes 集群中。核心能力包括:

以下将对常用场景功能进行介绍。

3.1 丰富的调度策略
WorkloadSpread能够将workload的Pod按一定规则分布到不同类型的Node节点上,赋予单一workload多区域部署和弹性部署的能力。

常见的一些规则包括:

每一个WorkloadSpread定义多个区域(定义为subset), 每个subset对应一个maxReplicas数量。WorkloadSpread利用Webhook注入subset定义的域信息,同时控制Pod的扩缩容顺序。

3.2 缩容顺序控制
pod 的删除场景可通过PodDeletionCost进行控制:较小 pod-deletion cost < 较大 pod-deletion cost

controller.kubernetes.io... 是从 Kubernetes 1.21 版本后加入的 annotation,Deployment/ReplicaSet 在缩容时会参考这个 cost 数值来排序。

在openkruise中,我们可以配置WorkloadSpread,借助 APIServer PodDeletionCost 特性,WorkloadSpread 利用 webhook 向Pod注入域规则,从而控制缩容顺序。

3.3 指定Pod缩容
当一个 CloneSet 被缩容时,支持用户指定一些 Pod 来删除。这对于 StatefulSet 或者 Deployment 来说是无法实现的,因为 StatefulSet 要根据序号来删除 Pod,而 Deployment/ReplicaSet 目前只能根据控制器里定义的排序来删除。

CloneSet 允许用户在缩小 replicas 数量的同时,指定想要删除的 Pod 名字。参考下面这个例子:

当控制器收到上面这个 CloneSet 更新之后,会确保 replicas 数量为 4。如果 podsToDelete 列表里写了一些 Pod 名字,控制器会优先删除这些 Pod。 对于已经被删除的 Pod,控制器会自动从 podsToDelete 列表中清理掉。

如果你只把 Pod 名字加到 podsToDelete,但没有修改 replicas 数量,那么控制器会先把指定的 Pod 删掉,然后再扩一个新的 Pod。

3.4、原地升级
原地升级是 OpenKruise 提供的核心功能之一。目前支持原地升级的 Workload:

当我们要升级一个存量 Pod 中的镜像时,这是 重建升级 和 原地升级 的区别:

重建升级时我们要删除旧 Pod、创建新 Pod:

但是对于原地升级,我们仍然复用同一个 Pod 对象,只是修改它里面的字段。因此:

3.5 镜像预热
NodeImage 和 ImagePullJob 是从 Kruise v0.8.0 版本开始提供的 CRD。

Kruise 会自动为每个 Node 创建一个 NodeImage,它包含了哪些镜像需要在这个 Node 上做预热。

用户能创建 ImagePullJob 对象,来指定一个镜像要在哪些 Node 上做预热。

注意,NodeImage 是一个偏底层的 API,一般只在你要明确在某一个节点上做一次预热的时候才使用,否则你都应该使用 ImagePullJob 来指定某个镜像在一批节点上做预热。

四、安装部署&升级
从 v1.0.0 (alpha/beta) 开始,OpenKruise 要求在 Kubernetes >= 1.16 以上版本的集群中安装和使用。

安装: 推荐使用helm方式进行安装

如果不想使用默认的参数进行安装,可以手动下载chart包进行定制化安装,例如修改 resources 限制或者配置 feature-gates,chart包下载地址参考:openkruise.github.io/ch...

升级: 通过helm方式升级

点击关注,第一时间了解华为云新鲜技术~