无状态应用(Deployment)的更新策略:
介绍
无状态应用(Deployment)控制器支持两种更新策略: 滚动更新(RollingUpdate)
和重新创建更新(Recreate)
也称为单批次更新。
- 重新创建(Recreate),当更新策略设定为Recreate,在更新镜像时,它会先删除现在正在运行的容器组,等彻底杀死后,重新创建新的
RS(ReplicaSet)
然后启动对应的容器组(Pod)
,在整个更新过程中,会造成服务一段时间无法提供服务。也称之为单批次更新。 - 滚动更新(Rolling Update) 滚动更新是默认的更新策略,一次仅更新一批容器组,当更新的
容器组(Pod)
就绪后再更新另一批,直到全部更新完成为止;该策略实现了不间断服务的目标,但是在更新过程中,不同客户端得到的响应内容可能会来自不同版本的应用。会出现新老版本共存状态。
无状态应用重新创建更新;
重新创建(Recreate)分为三个步骤:
- 杀死所有旧版本的容器组,此时
容器组(Pod)
无法正常对外提供服务; - 创建新的RS,启动新的容器组;
- 等待容器组就绪,对外提供服务;
无状态应用滚动更新(Rolling Update)
滚动更新时,应用升级期间还要确保可用的容器组对象数量不低于阈值以确保可用持续处理客户端的服务请求,变动的方式和容器组对象的数量范围将通过最大激增
和最大不可用
两个属性同时进行定义;
滚动更新更新策略
- 最大不可用(maxUnavailable): 定义了在更新过程中最多可以有多少个
容器组(Pod)
是不可用的。 - 最大激增(maxSurge): 定义了在更新过程中超过期望副本数量的最大额外
容器组(Pod)
数量。
默认情况下,无状态应用(Deployment) 使用 RollingUpdate
策略,其中 最大不可用(maxUnavailable
) 设置为 25% 或 1(取较大者),而 最大激增(maxSurge
) 也设置为 25% 或 1(取较大者)。 这意味着,在任何给定时间,最多有 25% 的旧版本 容器组(Pod)
可能不可用,并且可能会创建多达 25% 的新版本 容器组(Pod)
来超出预期的副本数。