本页介绍了如何针对 Game Servers 集群安全地升级 Agones。
准备工作
开始之前,我们建议您先了解 Game Servers 概览中的关键概念。请确保您已执行以下任务:
- 确保您已启用 Game Services API。 启用 Game Services API
- 选择已安装 gcloud CLI 的 shell,或者使用 API 客户端:
进入 Google Cloud 控制台。
在控制台的右上角,点击激活 Cloud Shell 按钮:
- 创建服务帐号。
- 以 JSON 文件的格式下载私钥。
-
Set the environment variable
GOOGLE_APPLICATION_CREDENTIALS
to the path of the JSON file that contains your credentials. This variable applies only to your current shell session, so if you open a new session, set the variable again.
Cloud Shell
如需启动 Cloud Shell,请执行以下步骤:
控制台下方的框架内会打开一个 Cloud Shell 会话。您可以使用此 shell 运行 gcloud
命令。
本地 shell
安装 gcloud CLI。
确认您已为 Google Cloud CLI 设置所需的默认项目(否则,您稍后需要为每个命令明确指定 --project
标志):
gcloud config list project
如果无法运行以下命令来设置默认项目,请将 PROJECT_ID
替换为所需的项目 ID:
gcloud config set project PROJECT_ID
运行以下命令以验证 Google Cloud CLI 的版本。Game Servers 需要使用 306.0.0
版或更高版本的 gcloud CLI。
gcloud version
如需更新安装,请运行以下命令:
gcloud components update
curl / PowerShell
如需将 REST API 与 curl
或 Windows PowerShell 搭配使用,请执行以下操作:
客户端库
您可以使用客户端库以编程方式控制 Google Cloud Game Servers。如需了解库和身份验证的使用说明,请参阅客户端库概览。
计划升级
我们建议您向一个大区添加新的 Game Servers 集群,然后移除旧的 Game Servers 集群,以执行 Agones 升级。此方法具有以下优势:
- 它与 Agones 项目推荐的最佳做法相一致,可以在无需维护期执行升级时创建新的集群。这种方法避免了在集群上运行游戏期间尝试升级 Agones 可能产生的任何问题。
- 您不必尝试升级 Kubernetes 或 Google Kubernetes Engine 节点,因此可以避免因执行将节点从服务中移除等操作而引发的问题。
- 在升级过程中,您可以作为单个操作对更多组件进行测试,包括 Kubernetes 和 Agones 的新版本,然后将它们一起发布到生产环境。
规划 Canary 升级
请务必先在生产环境中测试新的 Agones 版本,然后再将其应用于生产环境。验证新的 Agones 版本后,首先在生产环境中升级 Canary 版大区。Canary 升级是最初应用于单个或少量大区的升级。通过 Canary 升级,您可以只对一小部分基础架构测试新功能,而无需向所有大区发布可能会中断的升级。如果升级进展不顺利,您可以尽量减少对用户的影响,并可回滚受影响的大区。如果没有指定的 Canary 大区,请选择流量最少的大区。
执行升级
本部分介绍了升级过程,即从使用旧版 Agones 的集群将 GameServer
分配转换为使用升级后的 Agones 的集群。升级过程假定您在新集群中配置了多集群分配。
此外,通过以下步骤,您可以轻松地回滚为已知在生产环境中工作的旧基础架构,并最大限度地减少对玩家体验的中断:
创建与当前集群大小相同的新集群。
使用兼容的 Kubernetes 版本在新集群上安装新版 Agones。如需查看受支持版本的列表,请参阅版本和升级。
向大区注册新集群。此操作会创建队列和自动扩缩器资源,与在大区中注册的现有集群类似。队列准备就绪之后,系统会将部分匹配的玩家游戏会话发送到新集群。
验证运行新版 Agones 的新集群的稳定性后,请取消注册并删除旧集群。当您取消注册并删除 Game Servers 集群时,已分配的服务器、队列和队列自动扩缩器配置会按原样保留。对实际 Kubernetes 集群的唯一值得注意的更改是,该集群不再是由 Game Servers 管理,并且不再连接到多集群分配。Game Servers 会停止向未注册的集群发送新的分配请求。
如果直接访问了旧集群的关联端点,为了防止对旧集群进行额外分配,请移除旧服务器的分配器服务中的所有 pod:
kubectl scale --replicas=0 -n agones-system deployment/agones-allocator
当集群中不再分配任何服务器时,请关闭旧集群。如需确定已分配服务器的数量,请运行以下命令,其中 namespace 是您在将 Kubernetes 集群注册为 Game Servers 集群时使用的命名空间:
kubectl get fleet --namespace namespace NAME SCHEDULING DESIRED CURRENT ALLOCATED READY AGE fleet-1 Packed 10 10 0 10 2d23h
针对每个需要升级的集群重复执行此升级过程中的步骤。