Agones 1.59.0 已发布。这次更新的重点不是炫目的新 API,而是把多人游戏服务器编排里最容易影响线上体验的部分继续打磨:Fleet 管理能力增强,PortRanges 和 RollingUpdateFix 升级为稳定版,TotalAllocation 让 Fleet 分配情况更可见,同时修复了 FleetAutoscaler flapping 和控制器崩溃等关键问题。
这次版本最值得关注的变化
Agones 是运行在 Kubernetes 上的游戏服务器编排系统。对生产环境来说,Fleet、FleetAutoscaler、GameServer 分配和滚动更新的行为是否稳定,直接决定了玩家能否顺利进服、扩容是否可靠、发布是否可控。
1.59.0 的几个关键词很明确:
PortRanges升级为稳定版:端口范围管理从实验/阶段性能力走向更适合生产采用的状态。RollingUpdateFix升级为稳定版:Fleet 滚动更新相关修复进入稳定阶段,发布游戏服务器镜像时的行为更可预期。- 引入
TotalAllocation跟踪:Fleet 维度可以获得更深入的分配洞察,便于观察容量使用和调度压力。 - 移除旧版玩家选择逻辑:旧逻辑被清理,减少长期维护负担,也提醒使用方检查是否依赖历史行为。
- 修复 FleetAutoscaler flapping 问题和控制器崩溃问题:这类问题通常会直接影响线上稳定性,是升级评估里的高优先级项。
Fleet 管理:从“能跑”走向“可解释”
Fleet 是 Agones 中管理一组 GameServer 的核心对象。过去很多团队在排查问题时,会关心几个问题:当前到底分配了多少服务器?扩容是否过于频繁?滚动更新过程中旧版本和新版本的服务器是否按预期切换?
TotalAllocation 的价值就在这里。它把 Fleet 分配行为变成更容易观察的数据点。虽然不同团队的监控栈不同,但升级后可以围绕 Fleet 维度建立更清晰的容量看板,例如:
- 某个游戏模式或区域的 Fleet 分配总量是否持续上升。
- FleetAutoscaler 是否因为短时间分配波动反复扩缩容。
- 滚动更新后,新版本 Fleet 是否承担了预期的分配流量。
这类指标不只是运维图表,它会影响容量策略。比如一个 Fleet 的分配量快速增长,但 Ready GameServer 始终偏低,就应该检查端口、节点资源、镜像启动时间或 autoscaler 策略,而不是只盯着 Pod 是否 Running。
PortRanges 和 RollingUpdateFix 稳定后,发布策略可以更踏实
游戏服务器不同于普通 Web 服务。一个 GameServer 往往需要暴露 UDP/TCP 端口,并且会持有玩家会话。端口分配和滚动更新如果不稳定,问题会立刻体现在玩家连接失败、房间创建失败或版本混杂上。
PortRanges 稳定后,团队可以更有信心地把端口范围作为 Fleet 设计的一部分。RollingUpdateFix 稳定后,发布流程也更适合纳入常规变更窗口,而不是只在低峰期手工盯着。
不过,稳定版不等于可以无脑升级。尤其是这次移除了旧版玩家选择逻辑,如果你的系统曾经依赖历史选择行为,需要在测试环境中验证分配路径,包括 matchmaker、GameServerAllocation、玩家重连和回滚流程。
可以这样实践:用 kubectl 检查 Fleet 和扩缩容行为
下面示例假设你已经在 Kubernetes 集群中安装了 Agones,并且当前上下文指向测试集群。镜像、端口和资源配置需要按你的游戏服务器实际情况修改。
可以先创建一个最小 Fleet,用于验证升级后的 Fleet、端口和滚动更新行为:
apiVersion: agones.dev/v1
kind: Fleet
metadata:
name: simple-udp-fleet
spec:
replicas: 2
scheduling: Packed
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
template:
spec:
ports:
- name: default
portPolicy: Dynamic
containerPort: 7654
protocol: UDP
template:
spec:
containers:
- name: simple-server
image: us-docker.pkg.dev/agones-images/examples/simple-game-server:0.36
resources:
requests:
memory: 64Mi
cpu: 20m
limits:
memory: 64Mi
cpu: 20m
保存为 fleet.yaml 后执行:
kubectl apply -f fleet.yaml
kubectl get fleet simple-udp-fleet
kubectl get gameservers -l agones.dev/fleet=simple-udp-fleet -o wide
如果要观察滚动更新,可以改动镜像 tag 或环境变量后重新 apply:
kubectl set image fleet/simple-udp-fleet simple-server=us-docker.pkg.dev/agones-images/examples/simple-game-server:0.37
kubectl rollout status fleet/simple-udp-fleet --timeout=180s
kubectl get gameservers -l agones.dev/fleet=simple-udp-fleet
如果你的集群支持 Agones 的 GameServerAllocation,可以用一次分配请求验证 Fleet 是否能正常分配。下面示例可以按需改 namespace 和 selector:
apiVersion: allocation.agones.dev/v1
kind: GameServerAllocation
metadata:
name: allocate-simple-server
spec:
selectors:
- matchLabels:
agones.dev/fleet: simple-udp-fleet
执行:
kubectl create -f allocation.yaml -o yaml
kubectl get fleet simple-udp-fleet -o yaml
kubectl get gameservers -l agones.dev/fleet=simple-udp-fleet
这里重点不是示例镜像本身,而是建立一条可重复的升级验证链路:创建 Fleet、观察 GameServer、触发分配、检查 Fleet 状态、执行滚动更新,再确认分配路径仍然正常。
升级前的检查清单
Agones 1.59.0 对生产环境的吸引力在于稳定性修复和 Fleet 洞察增强,但升级仍然应该按游戏后端的发布纪律来做。
建议至少检查这些项:
- 在测试集群验证 Fleet 创建、GameServerAllocation、滚动更新和回滚。
- 检查是否依赖旧版玩家选择逻辑,尤其是 matchmaker 或自定义分配服务。
- 观察 FleetAutoscaler 在真实或压测流量下是否还会出现频繁扩缩容。
- 把 Fleet 分配相关指标接入现有监控,关注 TotalAllocation 带来的新观察维度。
- 对使用动态端口或端口范围的 Fleet,确认节点防火墙、安全组和网络策略仍然匹配。
- 控制器崩溃修复值得升级,但仍应保留升级窗口和回滚方案。
这次发布更像一次面向生产运维的加固:它让 Fleet 更容易管理,让分配情况更容易解释,也减少了 autoscaler 和控制器层面的不确定性。对已经在 Kubernetes 上运行实时游戏服务器的团队来说,1.59.0 值得尽快进入测试环境验证。