升级 Agones

本页介绍了如何针对 Game Servers 集群安全地升级 Agones。

准备工作

开始之前,我们建议您先了解 Game Servers 概览中的关键概念。请确保您已执行以下任务:

  • 确保您已启用 Game Services API。
  • 启用 Game Services API
  • 选择已安装 gcloud CLI 的 shell,或者使用 API 客户端:
  • Cloud Shell

    如需启动 Cloud Shell,请执行以下步骤:

    1. 进入 Google Cloud 控制台。

      Google Cloud 控制台

    2. 在控制台的右上角,点击激活 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 搭配使用,请执行以下操作:

    1. 创建服务帐号。
    2. 以 JSON 文件的格式下载私钥。
    3. 将环境变量 GOOGLE_APPLICATION_CREDENTIALS 设置为包含凭据的 JSON 文件的路径。 此变量仅适用于当前的 shell 会话,因此,如果您打开新的会话,请重新设置该变量。

    客户端库

    您可以使用客户端库以编程方式控制 Google Cloud Game Servers。如需了解库和身份验证的使用说明,请参阅客户端库概览

计划升级

我们建议您向一个大区添加新的 Game Servers 集群,然后移除旧的 Game Servers 集群,以执行 Agones 升级。此方法具有以下优势:

  1. 它与 Agones 项目推荐的最佳做法相一致,可以在无需维护期执行升级时创建新的集群。这种方法避免了在集群上运行游戏期间尝试升级 Agones 可能产生的任何问题。
  2. 您不必尝试升级 Kubernetes 或 Google Kubernetes Engine 节点,因此可以避免因执行将节点从服务中移除等操作而引发的问题。
  3. 在升级过程中,您可以作为单个操作对更多组件进行测试,包括 Kubernetes 和 Agones 的新版本,然后将它们一起发布到生产环境。

规划 Canary 升级

请务必先在生产环境中测试新的 Agones 版本,然后再将其应用于生产环境。验证新的 Agones 版本后,首先在生产环境中升级 Canary 版大区。Canary 升级是最初应用于单个或少量大区的升级。通过 Canary 升级,您可以只对一小部分基础架构测试新功能,而无需向所有大区发布可能会中断的升级。如果升级进展不顺利,您可以尽量减少对用户的影响,并可回滚受影响的大区。如果没有指定的 Canary 大区,请选择流量最少的大区。

执行升级

本部分介绍了升级过程,即从使用旧版 Agones 的集群将 GameServer 分配转换为使用升级后的 Agones 的集群。升级过程假定您在新集群中配置了多集群分配

此外,通过以下步骤,您可以轻松地回滚为已知在生产环境中工作的旧基础架构,并最大限度地减少对玩家体验的中断:

  1. 创建与当前集群大小相同的新集群。

  2. 使用兼容的 Kubernetes 版本在新集群上安装新版 Agones。如需查看受支持版本的列表,请参阅版本和升级

  3. 向大区注册新集群。此操作会创建队列和自动扩缩器资源,与在大区中注册的现有集群类似。队列准备就绪之后,系统会将部分匹配的玩家游戏会话发送到新集群。

  4. 验证运行新版 Agones 的新集群的稳定性后,请取消注册并删除旧集群。当您取消注册并删除 Game Servers 集群时,已分配的服务器、队列和队列自动扩缩器配置会按原样保留。对实际 Kubernetes 集群的唯一值得注意的更改是,该集群不再是由 Game Servers 管理,并且不再连接到多集群分配。Game Servers 会停止向未注册的集群发送新的分配请求。

  5. 如果直接访问了旧集群的关联端点,为了防止对旧集群进行额外分配,请移除旧服务器的分配器服务中的所有 pod:

    kubectl scale --replicas=0 -n agones-system deployment/agones-allocator
    
  6. 当集群中不再分配任何服务器时,请关闭旧集群。如需确定已分配服务器的数量,请运行以下命令,其中 namespace 是您在将 Kubernetes 集群注册为 Game Servers 集群时使用的命名空间:

    kubectl get fleet --namespace namespace
    
    NAME         SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
    fleet-1      Packed       10        10        0           10      2d23h
    
    

针对每个需要升级的集群重复执行此升级过程中的步骤。