灰度发布和扩缩容
灰度发布( Rollout )运维特征可以用于对工作负载的滚动发布和扩缩容。
目前灰度发布运维特征支持的组件类型为:
- webservice
- worker
#
如何使用#
首次发布应用下面的 YAML 来创建一个应用部署计划,该应用包含了一个使用了灰度发布运维特征的 webservice 类型的组件,并指定组件版本名称为 express-server-v1 。如果你不指定,每次对组件的修改都会自动产生一个组件版本(ControllerRevision),组件版本名称的默认产生规则是:<组件名>-<版本序号>
。
这个灰度发布运维特征表示分两个批次发布工作负载,目标工作负载的副本个数为5个,第一批发布2个副本,第二批发布3个副本。前一批次的副本全部就绪之后,才会发布下一批次。
等待一段时间发布成功之后查看应用状态。
查看组件版本。
查看灰度发布运维特征的状态, ROLLING-STATE
为 rolloutSucceed 说明发布成功,BATCH-STATE
为 batchReady 表明当前批次的副本已全部就绪。TARGET
UPGRADED
READY
三列说明目标的副本5个,完成升级的副本为5个,就绪的副本为5个。
查看工作负载状态( webservice/worker 的底层工作负载是 Deployment )
#
灰度升级应用下面的 YAML 来修改容器的镜像,将工作负载升级到新的组件版本。
该灰度发布运维特征表示,目标副本个数为5个,分两批升级,第一批升级2个副本,第二批升级3个副本,并通过设置 batchPartition
为0来指定只升级第1批的2个副本。
查看组件版本,可见生成了一个新的组件版本 express-server-v2。
一段时间之后,成功升级第一批次后,查看灰度发布运维特征的状态。 TARGET
UPGRADED
READY
表示这次升级目标版本的副本5个,已经升级完成了2个,2个已经就绪。 batchReady 状态表示当前的第1批次的副本全部就绪, rollingInBatches 状态表示还未完成全部批次的升级,仍在升级当中。
查看工作负载状态进行验证,可见新版本的工作负载 express-server-v2 已经升级完成2个副本,老版本的工作负载 express-server-v1 尚有3个副本。
应用下面的 YAML 来去掉灰度发布运维特征的 batchPartition
字段来将全部副本升级到最新版本。
查看灰度发布运维特征,可见已经升级成功。
查看工作负载状态,可见新版本的工作负载已经完成升级,并且老版本的工作负载已经被删除。
#
回滚应用下面的 YAML 来指定灰度发布运维特征的 targetRevision
将组件回滚到 express-server-v1 组件版本。
回滚成功之后查看灰度发布运维特征状态。
查看工作负载状态,可见工作负载状态回滚到了 express-server-v1 组件版本。
#
扩容灰度发布运维特征还可以完成工作负载的扩容操作,应用下面的 YAML 来修改targetSize,将副本个数由原来的5个增加至7个。
这个灰度发布运维特征的表示,从刚才的5个副本个数扩容至目标的7个副本,你也可以通过设置 rolloutBatches
精确控制每个批次需要扩容的副本个数。
扩容成功之后,查看资源状态。
#
缩容应用下面的 YAML 将副本个数由之前的7个缩减至3个
这个灰度发布运维特征的表示,将工作负载缩容至5个副本,你也可以通过设置 rolloutBatches
精确控制每个批次需要扩容的副本个数。
缩容成功之后,查看资源状态。
#
针对 cloneset 类型工作负载的灰度发布启用 kruise 的扩展插件。
查看组件类型
应用下面的 YAML 来创建一个应用部署计划,该应用包含一个 cloneset 类型的工作负载和一个灰度发布运维特征。
查看相关资源。
查看工作负载状态,可以看到由于 cloneset 工作负载支持原地升级,它与 webservice/worker 的最大区别是底层工作负载的名称就是组件名称。
查看镜像。
应用下面的 YAML 更新镜像。
升级完成之后,查看相关资源。
查看工作负载状态,可见升级之后的工作负载仍是 cloneset-server。
进一步通过查看镜像进行验证。
其他的扩缩容,回滚等操作与 webservice/worker 类型的工作负载的操作方式完全一致。
#
子集群中运行的注意事项如果你期望灰度发布运维特征工作在子集群中,你需要先在子集群中执行下面的命令安装相应的控制器。
#
支持的组件类型灰度发布运维特征支持 webservice
,worker
,clonset
类型的工作负载。
当使用 webservice 和 worker 作为工作负载类型并配合使用灰度发布运维特征时,工作负载的名称将被命名为组件版本的名称。 当工作负载类型为 cloneset 时,由于 clonset 支持原地更新,工作负载的名称将被命名为组件的名称。