首页/云/云与容器速查/Deployment 与滚动更新
Kubernetes68 条

Deployment 与滚动更新

无状态工作负载的标准控制器:管理 ReplicaSet、驱动滚动更新与回滚。默认 RollingUpdate(maxSurge 25%、maxUnavailable 25%),发布历史默认保留 10 个 revision。

云与容器速查云更新于 2026-10-13

Deployment 是什么

Deployment 是无状态工作负载的标准控制器:它管理一组副本集,副本集再管理实际的实例,因此每次修改实例模板都会产生一个新的副本集,发布与回滚就是在这两个副本集之间切换。它默认采用滚动更新策略,可以精细控制发布过程中允许的额外实例数与不可用实例数。

基本信息

层级关系Deployment 管理 ReplicaSet,ReplicaSet 管理实例,一个版本对应一个副本集
更新策略支持滚动更新与先停后起两种;滚动更新由额外实例与不可用实例两个参数控制节奏
发布历史默认保留若干历史版本,用于回滚;数量可在配置里调整
触发条件只有实例模板变化才触发发布,单纯调整副本数不算发布
回滚方式通过发布管理命令回到上一版或指定版本
标签选择器创建后不可修改,必须与实例模板中的标签一致

典型使用场景

  • 无状态服务发布:Web、接口服务这类可以随意替换实例的业务
  • 灰度与分批:通过调整发布节奏参数控制新旧版本的重叠程度
  • 快速回滚:新版本异常时一键退回上一版本
  • 配合扩缩容:副本数由控制器维护,自动扩缩容同样作用于它
  • 配置生效:配置更新后触发滚动重建,让新配置在实例上生效
  • 多版本并存观察:发布过程中新旧副本集同时存在,便于观察指标

滚动更新参数

参数作用调优方向
maxSurge允许超过期望副本数的实例上限设大加快发布,代价是峰值资源占用
maxUnavailable允许不可用的实例上限设为 0 时先起新再停旧,容量不缩水
revisionHistoryLimit保留的历史版本数量回滚需求多时调大
minReadySeconds实例就绪后观察多久才算可用设大能拦住『起来就崩』的版本
progressDeadlineSeconds发布无进展的判定时间用于及早暴露卡住的发布

Deployment 示例

Deployment 示例
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  revisionHistoryLimit: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  selector:
    matchLabels: { app: web }
  template:
    metadata:
      labels: { app: web }
    spec:
      containers:
        - name: web
          image: registry.example.com/team/web:1.2.3
          ports:
            - containerPort: 8080
          readinessProbe:
            httpGet: { path: /healthz, port: 8080 }
            periodSeconds: 5
先起新再停旧的组合是保守策略:发布期间总容量不缩水,代价是峰值多占用资源,适合容量紧张但要求平滑的场景。
实例模板变化才触发滚动发布:只改副本数不会产生新版本,回滚历史里也不会多出一条记录。
标签选择器创建后不可修改:写错只能删除重建,重建过程中服务会有中断窗口,发布前务必核对标签。
就绪检查决定发布能否推进:没有就绪检查时新实例一启动就被当作可用,问题版本会立刻接收全部流量。

发布前的准备项

  • 确认只有实例模板变化才触发发布,改副本数不会产生新版本
  • 确认就绪检查的路径与端口正确,否则发布会被永久卡住
  • 确认资源请求与上限合理,否则新实例可能根本调度不上去
  • 确认发布历史保留数量足够,回滚时才有可用版本
  • 确认容量余量能承受发布期间额外实例带来的资源占用
  • 确认监控与日志已经生效,发布后能第一时间发现异常
副本数与发布策略要和容量一起评估:滚动更新期间会产生额外实例,容量紧张的集群应先扩容再发布,避免把发布变成容量事故。

易错点

  • 标签选择器与实例模板标签不一致,应用配置直接被拒绝
  • 修改标签选择器:字段不可变,只能删除重建,期间业务中断
  • 没有就绪检查就发布,新实例一启动就接流量,问题瞬间扩散
  • 不可用实例数设得过大,发布过程中可用容量明显缩水
  • 发布历史保留太少,需要回滚时找不到可用的历史版本

数据来源与参考

  • Kubernetes Docs:Deployments
  • Kubernetes Docs:Rolling Update

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌