Skip to content

编辑和升级服务

服务列表和服务详情内可点击编辑进入服务编辑界面。

配置镜像和容器

版本升级-更改镜像的tag; 可直接更改镜像tag,也可以点击【更换镜像库】从其它镜像库选择当前镜像的tag,镜像名称不可更改,镜像库中无此镜像的会提示无法更换。

更改tag不会覆盖资源配置(新的tag镜像内和当前的资源配置不同也不会覆盖),资源配置可修改。 端口配置,取和新tag的合集;例如当前是80 8080 新tag内是80 8088,那么配置的为80 8080 8088。 普通配置:支持和镜像内配置diff和merge,配置相同的不会覆盖,配置增加的会自动加载出来(有提示),配置缺少的不会删除,会提示出来。

日志采集、健康检查环境变量高级配置内的glusterfs存储本地,会直接用新tag镜像内的覆盖。 不更改镜像的tag,当前页面下的配置都可更改删除添加。

配置服务

服务的有状态、无状态不可更改。 服务的单实例类型无法更改。 有状态服务的卷挂载,只有容器目录可修改。 其他配置都可修改。

配置节点

此页面信息都可修改。

添加更改说明

添加更改说明,如下所示,在输入框内输入

容器内容变更提示

触发场景:点击滚动升级或灰度升级,切换编辑容器的tab页。 提示前后对比内容,如下所示

升级(单实例服务)

单实例服务无法滚动升级和灰度升级,升级过程最为简单:先停止老的pod 再起新的pod,期间会出现短暂的业务不可用。

滚动升级

无状态单实例服务: 简述:滚动升级是一次只更新一小部分实例,成功后,再更新更多的实例,最终完成所有实例的更新。滚动升级的最大的好处是零停机,整个更新过程始终有副本在运行,从而保证了业务的连续性。 服务一个实例的情况下,新的实例起来并且ready后(就绪状态探测通过),再停止老的实例。 服务多个实例的情况下,以3个实例为例,流程如下所示

如果当前剩余资源不够起两个实例的,会先起一个再停一个这种方式滚动升级; 如果当前剩余资源一个实例都起不来,会一直等待调度,不会把老的实例停掉。

有状态服务: 简述:有状态服务的滚动升级,按顺序挨个替换为新版本,先停止老版本编号最大的N,再启动新版本的N,然后再处理N-1 以此类推; 流程图

classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
classDiagram
Class01 <|-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class01 : size()
Class01 : int chimp
Class01 : int gorilla

如下,以服务有3个实例为例子。

灰度升级

无状态非单实例服务: 灰度升级是在保留旧版本副本的同时新建一部分新版本副本后暂停更新,保持两个版本同时运行并承接流量,已验证新版本功能,如下图所示点击灰度升升级调整新版本的实例数。

新旧版本流量比例等于两版本实例数比例。验证成功后,选择升级到新版本,继续更新(流程同滚动升级)最终完成所有副本的更新,如下图,选择升级到此版本。

如果验证新版本有问题,可以进行回滚,停止新版本的实例,旧版本实例继续运行,如上图回滚到此版本。 灰度的实例数要小于旧版本的实例数,特殊情况,如果旧版本的实例数是1,那灰度升级只能灰两个实例。 以服务有3个实例,灰度两个实例举例,如下图:

有状态服务: 有状态服务灰度升级和滚动升级的区别就是可以控制新版本实例的数量,滚动升级是把所有实例都更新到新版本,灰度升级可以只更新一部分,且只能从编号最大的开始更新; 新版本的数量要小于服务的实例数; 验证新版本没问题,选择升级到新版本,会把老版本的实例按编号从大到小更新为新版本; 如果验证新版本有问题,可以进行回滚,停止新版本的实例,启动旧版本的实例,按编号从小到大回滚到老版本; 只有一个实例的有状态服务无法进行灰度升级; 前端的UI操作同无状态服务的。

服务回滚

服务详情页-版本/回滚,可回滚到任意版本,回滚的过程和滚动升级相同,如下图所示操作回滚;