尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
KServe V1beta1RolloutSpec 深度解析:用 maxSurge 与 maxUnavailable 掌控模型服务的滚动发布
模型推理服务云原生后端微服务MLOps人工智能【免费下载链接】kserveStandardized Distributed Generative and Predictive AI Inference Platform for Scalable, Multi-Framework Deployment on Kubernetes项目地址https://gitcode.com/gh_mirrors/ks/kserve点击查看免费下载本文围绕 KServe v1beta1 API 中的V1beta1RolloutSpec模型展开系统讲解它在推理服务滚动发布RollingUpdate中所扮演的角色两个核心字段maxSurge、maxUnavailable如何决定模型版本更新时 Pod 的增减节奏如何在inferenceservice-configConfigMap 中配置全局默认回滚策略以及如何通过InferenceService的deploymentStrategy按服务覆盖。读完本文你将能够独立配置零停机Availability或资源节省ResourceAware两种发布模式并理解 KServe 控制器从 ConfigMap 解析到 Deployment 落地的完整链路。V1beta1RolloutSpec 是什么V1beta1RolloutSpec是 KServe 中用于描述部署回滚/发布策略的模型其官方定义为 RolloutSpec defines the rollout strategy configuration using Kubernetes deployment strategy即直接复用 Kubernetes Deployment 的原生发布策略语义而不是另起一套抽象。在 KServe 的 v1beta1 体系中V1beta1RolloutSpec处于如下嵌套关系的最底层DeployConfigConfigMap deploy 键 └── DeploymentRolloutStrategy └── defaultRollout: V1beta1RolloutSpec ├── maxSurge └── maxUnavailable对应到 Go 侧源码pkg/apis/serving/v1beta1/configmap.goDeployConfig包含DefaultDeploymentMode与DeploymentRolloutStrategy两个字段DeploymentRolloutStrategy仅有一个可选字段DefaultRollout *RolloutSpecRolloutSpec由MaxSurge、MaxUnavailable两个字符串字段组成。字段详解maxSurge 与 maxUnavailable依据 python/kserve/docs/V1beta1RolloutSpec.md 及 pkg/openapi/swagger.jsonV1beta1RolloutSpec的属性定义如下字段类型说明默认值maxSurgestr允许在期望副本数之上额外创建的最大 Pod 数量用于加速滚动更新。可以是绝对数如5也可以是期望 Pod 数的百分比如10%maxUnavailablestr更新期间允许处于不可用状态的最大 Pod 数量。可以是绝对数如5也可以是期望 Pod 数的百分比如10%maxSurge决定先扩容多少maxSurge控制的是滚动更新向上的余量允许超出期望副本数临时创建多少个新 Pod。典型取值绝对数1、2、5百分比10%、25%、100%。在 Swagger 定义中maxSurge与maxUnavailable都被标记为required说明完整配置一份 RolloutSpec 时两者都应显式给出而default值均为空字符串表示未配置这一状态。KServe 控制器只有在字段非空时才会覆盖 Deployment 的对应配置见下文源码分析。maxUnavailable决定允许多少不可用maxUnavailable控制滚动更新向下的收缩更新过程中最多允许多少个旧 Pod 同时处于不可用状态直接决定了发布期间服务可用容量被削弱的程度。将两个字段组合使用可以构造出两种截然不同的发布行为发布模式maxSurgemaxUnavailable效果Availability零停机优先1或100%0先建新 Pod、再销毁旧 Pod更新期间容量始终 ≥ 期望值请求几乎无中断ResourceAware资源节省优先01或25%先销毁旧 Pod、再建新 Pod峰值资源占用最小但会短暂损失部分容量这两种模式的完整说明与示例见 docs/apis/v1beta1/ROLLOUT_STRATEGY_API.md下文会给出可直接复制的 YAML。在 KServe 中配置 RolloutSpec 的三条路径V1beta1RolloutSpec本身不直接出现在InferenceService的 spec 中它通过ConfigMap 全局默认值这一条路径生效而按服务级别的覆盖则走 Kubernetes 原生的deploymentStrategy字段。整体优先级从高到低多节点multinode自动覆盖对带RAY_NODE_COUNT环境变量的 Ray 多节点工作负载KServe 强制覆盖为maxUnavailable: 0%、maxSurge: 100%以保证旧 Pod 存活到新 Pod 就绪用户自定义deploymentStrategyInferenceService组件扩展中显式指定的策略最高用户优先级ConfigMap 回滚策略仅当defaultDeploymentMode为Standard时作为回退生效KServe 内置默认值maxUnavailable: 25%、maxSurge: 25%。路径一通过 ConfigMap 配置全局默认 RolloutSpec编辑 KServe 命名空间下的inferenceservice-configConfigMap在其deploy键中写入 JSON。参照 config/configmap/inferenceservice.yaml 中给出的完整示例apiVersion: v1 kind: ConfigMap metadata: name: inferenceservice-config namespace: kserve data: deploy: |- { defaultDeploymentMode: Standard, deploymentRolloutStrategy: { defaultRollout: { maxSurge: 1, maxUnavailable: 1 } } }配置要点defaultDeploymentMode必须为Standard即 RawDeployment 的演进形态ConfigMap 回滚策略才会被应用Serverless或Knative模式下该配置会被忽略defaultRollout即V1beta1RolloutSpecmaxSurge、maxUnavailable的取值格式与 Kubernetes Deployment 完全一致想要零停机发布可改配为maxUnavailable: 0, maxSurge: 1Availability 模式想要资源节省可改配为maxSurge: 0, maxUnavailable: 1ResourceAware 模式。路径二通过 deploymentStrategy 按服务覆盖KServe 的ComponentExtensionSpec暴露了原生 Kubernetes 字段DeploymentStrategy *appsv1.DeploymentStrategy定义见 pkg/apis/serving/v1beta1/component.go它直接接管生成 Deployment 的spec.strategy优先级高于 ConfigMap 默认值。注意其校验规则deploymentStrategy仅支持 Raw/Standard 部署模式Serverless 模式会报错见 pkg/apis/serving/v1beta1/inference_service_validation.go。Availability 模式示例零停机apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: availability-mode-example annotations: serving.kserve.io/deploymentMode: Standard spec: predictor: model: modelFormat: name: sklearn storageUri: s3://my-bucket/model deploymentStrategy: type: RollingUpdate rollingUpdate: maxUnavailable: 0 # 零停机不允许旧 Pod 提前不可用 maxSurge: 1 # 先额外拉起一个新 PodResourceAware 模式示例资源节省apiVersion: serving.kserve.io/v1beta1 kind: InferenceService metadata: name: resource-aware-example annotations: serving.kserve.io/deploymentMode: Standard spec: predictor: model: modelFormat: name: sklearn storageUri: s3://my-bucket/model deploymentStrategy: type: RollingUpdate rollingUpdate: maxSurge: 0 # 不额外占用资源 maxUnavailable: 1 # 允许一次少一个 Pod路径三多节点工作负载的自动覆盖从 pkg/controller/v1beta1/inferenceservice/reconcilers/deployment/deployment_reconciler.go 可以看到对于多节点Ray 工作负载的 worker DeploymentKServe 会无条件将maxUnavailable覆盖为0%、maxSurge覆盖为100%注释明确说明这是为了保证旧 Pod 保留到新 Pod 就绪。该覆盖优先于用户自定义策略与 ConfigMap 配置属于发布安全兜底。源码级原理控制器如何消费 RolloutSpec理解了三条配置路径后再看 KServe 控制器侧的落地逻辑。核心函数是createRawDefaultDeployment与applyRolloutStrategyFromConfigmapdeployment_reconciler.go 与 L407-L438处理流程为若componentExt.DeploymentStrategy ! nil直接使用用户指定的策略最高优先级否则调用setDefaultDeploymentSpec写入 KServe 默认值RollingUpdate类型 maxUnavailable: 25%、maxSurge: 25%外加revisionHistoryLimit: 10、progressDeadlineSeconds: 600见 L387-L405再调用applyRolloutStrategyFromConfigmap做 ConfigMap 覆盖其关键逻辑只有deployConfig.DefaultDeploymentMode Standard时才继续只有deploymentRolloutStrategy.defaultRollout存在时才继续若rollout.MaxSurge/rollout.MaxUnavailable非空则将其作为字符串类型的IntOrString写入spec.Strategy.RollingUpdate若 ConfigMap 只配置了其中一个字段另一个保持步骤 2 的默认值不变。也就是说V1beta1RolloutSpec最终被翻译为原生appsv1.RollingUpdateDeployment.MaxSurge / MaxUnavailableintstr.IntOrString由 Kubernetes Deployment 控制器执行真正的滚动发布——KServe 只负责策略下发发布行为本身完全遵循 K8s 原生语义。上述优先级与默认值行为均有单元测试覆盖见 deployment_reconciler_test.goApply rollout strategy with RawDeployment modeConfigMap 配置maxSurge: 1、maxUnavailable: 1时Deployment 的RollingUpdate精确落到1No rollout strategy applied for Serverless modedefaultDeploymentMode: Serverless时即使配置了50%/25%也不生效回落为默认25%/25%No rollout strategy configureddeployConfig为 nil 时同样回落默认值。另一个测试TestCreateRawDeploymentWithPrecedenceL1535 起则验证了用户 deploymentStrategy 优先于 ConfigMap这一优先级规则。Python SDK 中的 V1beta1RolloutSpecKServe Python SDK 提供了与 Go 侧一一对应的客户端模型由 OpenAPI Generator 生成源码见 python/kserve/kserve/models/v1beta1_rollout_spec.py类名V1beta1RolloutSpec构造参数max_surge、max_unavailable均要求非None默认openapi_types将 Python 属性映射到字符串类型attribute_map将 snake_case 属性映射为 JSON 键maxSurge/maxUnavailable提供to_dict()/to_str()等序列化方法便于在客户端代码中构造或回读配置。其上层模型V1beta1DeploymentRolloutStrategypython/kserve/kserve/models/v1beta1_deployment_rollout_strategy.py仅有可选字段default_rollout类型为V1beta1RolloutSpec对应 Go 侧DeploymentRolloutStrategy.DefaultRollout。SDK 侧的单元测试见 python/kserve/test/test_v1beta1_rollout_spec.py 与 python/kserve/test/test_v1beta1_deployment_rollout_strategy.py测试样例覆盖了必填最小实例max_surge0、max_unavailable1与完整实例max_surge1、max_unavailable1两种构造方式。Python 侧构造示例from kserve.models.v1beta1_rollout_spec import V1beta1RolloutSpec from kserve.models.v1beta1_deployment_rollout_strategy import V1beta1DeploymentRolloutStrategy # 零停机Availability模式 rollout V1beta1RolloutSpec(max_surge1, max_unavailable0) strategy V1beta1DeploymentRolloutStrategy(default_rolloutrollout) print(strategy.to_dict()) # {default_rollout: {max_surge: 1, max_unavailable: 0}}注意max_unavailable0是 Availability 模式的关键旧 Pod 不允许提前不可用max_surge0则是 ResourceAware 模式的关键不额外扩容。校验规则与取值规范依据 docs/apis/v1beta1/ROLLOUT_STRATEGY_API.md 的 Validation Rules 章节ConfigMap 配置maxSurge必须是合法的数字或百分比字符串——合法百分比如25%、50%、100%合法数字如1、2、5maxUnavailable格式要求相同deploymentStrategy 配置type必须为RollingUpdaterollingUpdate.maxSurge、rollingUpdate.maxUnavailable与 ConfigMap 路径共用同一套格式校验Serverless 限制自定义deploymentStrategy仅限 Raw/Standard 部署模式在 KPAKnative场景会被校验拒绝。从源码看Go 侧RolloutSpec字段本身是string类型未在结构体层面做格式强校验格式合法性最终由 Kubernetes apiserver 对生成的 Deployment 进行校验兜底这一点从applyRolloutStrategyFromConfigmap直接以StrVal形式写入IntOrString可以印证deployment_reconciler.go#L432-L437。总结RolloutSpec 的取值速查场景maxSurgemaxUnavailable说明未配置任何策略KServe 默认25%25%由setDefaultDeploymentSpec写入Availability零停机1/100%0先建后删容量不下降ResourceAware资源节省01/25%先删后建峰值资源最小多节点 Ray 工作负载100%0%控制器强制覆盖优先级最高用户 deploymentStrategy自定义自定义优先级高于 ConfigMap 默认值ConfigMap defaultRollout自定义自定义仅Standard模式生效V1beta1RolloutSpec的价值在于它把 Kubernetes 原生的滚动发布能力接入 KServe 的配置体系让运维团队既能通过inferenceservice-config全局统一发布策略也能为单个InferenceService精细化定制发布节奏且全程无需修改 KServe 控制器代码。理解maxSurge/maxUnavailable的语义与优先级是做好模型服务无感升级与资源调度的基础。赞分享模型推理服务云原生后端微服务MLOps人工智能【免费下载链接】kserveStandardized Distributed Generative and Predictive AI Inference Platform for Scalable, Multi-Framework Deployment on Kubernetes项目地址https://gitcode.com/gh_mirrors/ks/kserve点击查看免费下载相关推荐Kubernetes Python客户端滚动更新终极指南掌握maxUnavailable与maxSurge配置技巧Kubernetes Python客户端滚动更新终极指南掌握maxUnavailable与maxSurge配置技巧 想要实现Kubernetes应用的无缝滚动后端云原生容器编排UI-Router视图滚动控制viewScroll服务深度解析UI Router视图滚动控制viewScroll服务深度解析 你是否遇到过页面切换后内容定位混乱的问题在单页应用Single Page Applicat前端路由KServe 滚动发布实战指南基于 Canary 策略的 InferenceService 流量灰度与回滚KServe 滚动发布实战指南基于 Canary 策略的 InferenceService 流量灰度与回滚 本文围绕 KServe v1beta1 API 的模型推理服务云原生后端微服务MLOps人工智能创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

上海大学答辩PPT模板使用指南:母版、占位符与排版技巧

上海大学答辩PPT模板使用指南:母版、占位符与排版技巧

简介:上海大学答辩通用演示文稿模板,面向本校学生在毕业答辩、学术汇报、开题答辩及周会汇报等场合。模板内置标题页、目录页与多种内容页样式,支持文字输入、图表展示、列表和引用排版,可通过母版视图调整各级文本样式&#xff0…

📅 2026/10/11 19:37:00
剧场订票系统核心设计:座位锁定、事务一致性与并发压测实践

剧场订票系统核心设计:座位锁定、事务一致性与并发压测实践

简介:面向C#与MySQL学习者的剧场订票管理系统完整工程,适合计算机相关专业课程设计、毕业设计或数据库应用开发入门参考。系统围绕剧场售票场景,覆盖电话订票、今明后三日内座位预约、以彩色图形展示已订座位、观众资料修改、撤销与改订及报表…

📅 2026/10/11 19:37:00
Fast Boot、MRC Fast Boot与Quick Boot技术解析

Fast Boot、MRC Fast Boot与Quick Boot技术解析

1. 开门见山:这仨“Boot”根本不是同一件事,但90%的人一上来就搞混了你拆过主板、刷过BIOS、调过启动参数,甚至可能为了一秒的开机快慢反复进Setup界面折腾过——但真能说清Fast Boot、Quick Boot、MRC Fast Boot这三个选项各自管什么、谁在底…

📅 2026/10/11 19:37:00
MORE NEWS

更多资讯

📰

Agent技能工程:可验证、可监控、可复用的智能体能力单元设计

1. “agent-skills”不是新词,而是智能体能力工程的实践切口“agent-skills”这个词乍看像某个开源库的包名,或是某次技术分享里一闪而过的术语缩写。但过去两年在多个跨领域项目中反复遇到它——不是作为概念被宣讲,而是作为实际开发中必须拆…

📰

模塑玻璃瓶缺陷识别数据集:28类缺陷与YOLOv5实战

简介:这份资源是面向工业质检与计算机视觉方向的模塑玻璃瓶缺陷识别数据集,适合从事缺陷检测算法研发、YOLO模型训练及产线视觉方案验证的工程师与学习者使用。数据集覆盖黑点、泡泡颈、破损、刮痕、裂缝等28类常见玻璃瓶缺陷,标注信息完整&a…

📰

误差椭圆详解:从协方差阵到点位精度分析

1. 为什么笔记十二要单独写误差椭圆误差理论与测量平差基础这门课,大家最熟悉的肯定是协方差传播、权、条件平差、间接平差这些大块头。等这些基础过了之后,随之而来的一个非常实际的问题就是:平差算出的坐标点,到底有多可靠&…

📰

MySQL查询结果加序号全解析:从ROW_NUMBER到用户变量与分组排名

说实话,数据库开发里最容易被低估的需求,就是“给查询结果加个序号”。听起来不就是一列 1、2、3、4 吗?可真到动手写的时候,版本差异、排序稳定性、分页跳号、分组重排,随便一个细节都能让你在测试环境折腾半天。我这…

📰

森林害虫目标检测数据集实战:YOLOv8训练与避坑指南

简介:这份森林害虫目标检测数据集面向林业智能监测、农业AI应用开发及生态科研人员,聚焦松毛虫、松墨天牛、卷叶蛾三类常见且危害严重的森林害虫识别难题。数据集共1715张实际场景采集的JPEG图片,按训练集1199张、验证集257张、测试集259张划…

📰

时间序列研究全景解析:从基础模型到流匹配与VLM的实战指南

1. 时间序列研究的版图变迁与选题逻辑时间序列这个方向,这几年在顶会上的存在感肉眼可见地变强了。早些年做时序的人多少有点“边缘感”,投稿时经常被分到偏应用的track,审稿人一句“novelty不够”就能把工作打回去。但这两年情况完全反过来了…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬