游戏服更新策略
功能概述
OKG 提供了原地升级(热更新)、批量更新、按优先级更新等多种更新策略。
用户可设置GameServer的更新优先级,配合partition参数,实现在实际生产场景下,把控更新范围、更新顺序、更新节奏。 如下图所示,提高序号为1的游戏服优先级,同时设置partition为2,则会优先更新1号游戏服;随后更改partition为0,则会再更新其余游戏服。详情可参考使用示例。
使用示例
本示例中将一组游戏服分成两批次更新,模拟灰度更新,逐步验证的场景。
此时GameServerSet下有3个游戏服副本:
kubectl get gs
NAME STATE OPSSTATE DP UP
minecraft-0 Ready None 0 0
minecraft-1 Ready None 0 0
minecraft-2 Ready None 0 0
设置更新优先级,将1号游戏服优先级调大:
kubectl edit gs minecraft-1
...
spec:
deletionPriority: 0
opsState: None
updatePriority: 10 #初始为0,调大成10
...
接下来设置 GameServerSet partition、以及即将更新的新镜像:
kubectl edit gss minecraft
...
image: registry.cn-hangzhou.aliyuncs.com/acs/minecraft-demo:1.12.2-new # 更新镜像
name: gameserver
...
updateStrategy:
rollingUpdate:
maxUnavailable: 5
partition: 2 # 设置保留的游戏服数目,这里只更新一个,所以要保留余下2个
podUpdatePolicy: InPlaceIfPossible
...
此时只有minecraft-1将会更新:
kubectl get gs
NAME STATE OPSSTATE DP UP
minecraft-0 Ready None 0 0
minecraft-1 Updating None 0 10
minecraft-2 Ready None 0 0
# 一段时间过后
...
kubectl get gs
NAME STATE OPSSTATE DP UP
minecraft-0 Ready None 0 0
minecraft-1 Ready None 0 10
minecraft-2 Ready None 0 0
待minecraft-1验证通过后,更新其余游戏服:
kubectl edit gss minecraft
...
updateStrategy:
rollingUpdate:
maxUnavailable: 5
partition: 0 # 设置保留的游戏服数目,将其设置为0,更新余下全部
podUpdatePolicy: InPlaceIfPossible
...