自定义游戏服状态
概述
游戏是有状态服务,OpenKruiseGame 允许定义游戏服的状态,开发者可以根据不同游戏服状态去设置对应的处理动作。比如在缩容时,只缩容空闲的游戏服Pod(没有玩家在该房间内)。
探测脚本
docker-minecraft-server 的容器镜像中提供了 mc-health
这个脚本,执行它可以探测 minecraft-server 的状态,其中包含在线玩家数量的统计:
$ mc-health
localhost:25565 : version=1.21 online=1 max=20 motd='A Minecraft Server'
我们可以再写个脚本包一层用来探测游戏服是否空闲,检测到 online=0
时,返回 0 退出码,表示游戏服空闲:
idle.sh
#!/bin/bash
result=$(mc-health | grep "online=0")
if [ "$result" != "" ]; then
exit 0
fi
exit 1
最终需要将这个脚本放到 ConfigMap
中去,如果你使用 kustomize
部署,可以在 kustomization.yaml
中用 configMapGenerator
来引用该脚本文件生成对应的 ConfigMap
:
kustomization.yaml
configMapGenerator:
- name: minecraft-script
options:
disableNameSuffixHash: true
files:
- idle.sh