CloneSet
什么是 CloneSet
CloneSet 是 OpenKruise 中直接管理 Pod 的 Set 类型工作负载,主要用于高效管理无状态应用。它不仅支持类似 Deployment 的基础功能,还提供了大量面向生产环境的增强能力,例如原地升级、PVC 模板、精细化灰度发布和生命周期钩子。
核心特性
-
原地升级(In-Place Update):支持
InPlaceIfPossible(优先原地升级,无法原地升级时重建)和InPlaceOnly(只允许原地升级)两种策略。原地升级仅重建 Pod 中的特定容器,不影响 Pod 网络、存储及其他容器,可避免 IP 漂移和重新调度开销,发布速度更快,对 CNI、CSI、DNS 等周边设施影响更小。 -
PVC 模板支持:支持配置
volumeClaimTemplates,为每个 Pod 生成独享的 PVC。扩缩容时,关联 PVC 会随 Pod 智能处理,例如缩容时可保留复用或删除,重建时会重新创建,原地升级时则持续使用。这是原生 Deployment 不支持的能力。 -
灵活的扩缩容策略:支持指定 Pod 缩容,例如通过
podsToDelete或apps.kruise.io/specified-delete,并支持 Pod Deletion Cost 缩容顺序、基于 Topology Spread Constraints 的打散缩容,以及流式扩容ScaleStrategy.MaxUnavailable,满足精细化运维需求。 -
灰度发布与发布控制:支持通过
partition控制保留旧版本 Pod 的数量或百分比;通过maxUnavailable限制发布或缩容过程中最大不可用 Pod 数量;通过maxSurge在发布时先扩容额外 Pod,再发布存量 Pod,降低服务中断风险;同时支持priorityStrategy和scatterStrategy自定义升级顺序,满足金丝雀发布、按节点打散等场景。 -
生命周期钩子(Lifecycle Hook):支持在 Pod 创建后准备就绪(
PreNormal)、原地升级前后(InPlaceUpdate,包括升级前和升级后两个阶段)以及删除前(PreDelete)插入自定义逻辑。结合markPodNotReady能力,可在升级或删除前先将 Pod 置为 NotReady,以实现优雅摘流。 -
镜像自动预热:在灰度发布新版本镜像时,控制器可自动在旧版本 Pod 所在节点上预拉取新镜像,从而加速发布过程。
页面功能
CloneSet 页面提供以下功能:
-
查看 CloneSet 列表
-
按项目过滤 CloneSet
-
创建 CloneSet
-
编辑基本信息
-
编辑 YAML
-
编辑扩缩容策略
-
指定缩容 Pod
-
重建工作负载
-
回滚历史版本
-
删除 CloneSet
状态说明
CloneSet 列表支持按名称、状态、更新时间等维度检索和排序,状态包括:
-
running:运行中 -
updating:更新中 -
stopped:已停止
前提条件
执行本栏目下的操作前,请确保:
-
您在目标集群中具有 CloneSet 资源的相应权限。
-
KubeSphere 平台已安装并启用 OpenKruise 扩展组件。