注册集群

本页面介绍了如何在大区中注册、列出和查看 Game Servers 集群的详细信息。

准备工作

开始之前,我们建议您先了解 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 大区

如果您没有安装了 Agones 的 Google Kubernetes Engine (GKE) 集群,请执行以下操作:

  1. 为 Agones 创建公共 Google Kubernetes Engine 集群和防火墙规则。请务必启用 Kubernetes Engine API

    请注意,Game Servers 不支持专用集群

  2. 验证 Agones 的防火墙规则是否已启用:

    gcloud compute firewall-rules list --filter="name~'game-server.*'"
    

    您会看到以下输出内容:

    NAME                               NETWORK  DIRECTION  PRIORITY  ALLOW    DENY  DISABLED
    game-server-firewall-test-cluster  default  INGRESS    1000      udp:7000-8000  False
    
  3. 安装 Agones

  4. 确保您的 Agones 和 Kubernetes 集群版本符合要求,并且您在 agones-system 命名空间中安装了 Agones(请参阅确认 Agones 安装了解详情)。

注册游戏服务器集群

控制台

  1. 在 Google Cloud 控制台中,转到大区和集群页面。

    转到 Game Servers

  2. 点击添加游戏服务器集群

  3. 可选大区列表中选择游戏服务器集群所属的大区。如果需要,您可以点击创建大区按钮创建大区。

  4. 点击继续

  5. 游戏服务器集群 ID 框中,输入此游戏服务器集群的唯一标识符。

  6. Kubernetes 集群列表中,选择安装了 Agones 的一个 Kubernetes 集群。

  7. 点击创建

gcloud

您可以使用 Google Cloud CLI 在大区中注册 Game Servers 集群。

注册全球性游戏服务器集群

如需注册全球性游戏服务器集群,请执行以下操作:

  1. 运行以下命令并将占位符值(例如 realmID)替换为适当的值:

    gcloud game servers clusters create gscID --realm=realmID --gke-cluster=gkeCluster --namespace=default --dry-run
    

    输出会返回 targetState,以便在注册新集群之前对其进行预览。

  2. 如需注册并创建全球性集群,请运行以下命令:

    gcloud game servers clusters create gscID --realm=realmID --gke-cluster gkeCluster --namespace=default --no-dry-run
    

注册地区级游戏服务器集群

如需注册地区级游戏服务器集群,请执行以下操作:

  1. 运行以下命令并将占位符值(例如 realmID)替换为适当的值:

    gcloud game servers clusters create gscID --realm=realmID --gke-cluster gkeCluster --location=region --namespace=default --dry-run
    

    输出会返回 targetState,以便在创建新集群之前对其进行预览。

  2. 如需注册并创建地区级集群,请运行以下命令:

    gcloud game servers clusters create gscID --realm=realmID --gke-cluster gkeCluster --location=region --namespace=default --no-dry-run
    

如果 Game Servers 无法验证您尝试附加的集群,则可能会出现以下错误:

Cannot connect to the provided Kubernetes cluster "projects/project/locations/location/clusters/gkeCluster, check the name and make sure that the cluster exists

在这种情况下,请确保 gkeCluster 格式正确,集群位于 projectlocation 中。

变量占位符对应于以下说明:

  • gscID 是您可以为此集群指定的唯一标识符。
  • realmID 是您要在其中存储集群的大区的唯一标识符。
  • gkeCluster 是 GKE 集群的完全限定资源路径,例如 projects/<projectId>/locations/<location>/clusters/<clusterId>
  • region 是集群的地区。选择与父级大区相同的地区。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_IDIAM 设置中列出的 Google Cloud 项目 ID
  • REALM_LOCATION:存储此集群的大区的区域,或者 global
  • REALM_ID:存储此集群的大区的标识符
  • GS_CLUSTER_ID:用户定义的集群标识符
  • GKE_CLUSTER_LOCATION:GKE 集群的区域
  • GKE_CLUSTER_ID:GKE 集群的标识符

请求 JSON 正文:

{
  "name": "projects/PROJECT_ID/locations/REALM_LOCATION/realms/REALM_ID/gameServerClusters/GS_CLUSTER_ID",
  "connectionInfo": {
    "namespace": "default",
    "gkeClusterReference": {
      "cluster": "projects/PROJECT_ID/locations/GKE_CLUSTER_LOCATION/clusters/GKE_CLUSTER_ID"
    }
  }
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/REALM_LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.gaming.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_ID/locations/REALM_LOCATION/realms/REALM_ID/gameServerClusters/GS_CLUSTER_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

创建游戏服务器集群后,Game Servers 会根据需要创建 Agones 队列自动扩缩器。Game Servers 不会更改手动创建的 Agones 队列。

列出集群

控制台

  1. 在 Google Cloud 控制台中,转到大区和集群页面。

    转到 Game Servers

  2. 展开一个大区即可查看属于该大区的游戏服务器集群。

  3. 您可以使用过滤条件框,按不同属性过滤大区和集群列表。

gcloud

您可以使用 Google Cloud CLI 列出全球性集群或区域级集群。

如需列出全球性集群和地区级集群,请运行以下命令。添加可选的 --view=FULL 标志,以显示集群上安装的 Agones 和 Kubernetes 的版本。

gcloud game servers clusters list [--view=FULL; default="BASIC"]

如需仅列出一个地区中的集群,请运行以下命令,并将 region 替换为您要在其中列出集群的地区

gcloud game servers clusters list --location=region [--view=FULL; default="BASIC"]

如需列出大区中的所有集群,请运行以下命令,并将 realmID 替换为父级大区,而将 region 替换为您要列出其中的集群的地区

gcloud game servers clusters list --realm=realmID --location=region [--view=FULL; default="BASIC"]

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_IDIAM 设置中列出的 Google Cloud 项目 ID
  • REALM_LOCATION:大区的区域或 global
  • REALM_ID:用户定义的大区标识符

根据您发送的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "gameServerClusters": [
    {
      "name": "projects/PROJECT_ID/locations/REALM_LOCATION/realms/REALM_ID/gameServerClusters/my-gs-cluster-1",
      "createTime": CREATE_TIME,
      "updateTime": UPDATE_TIME,
      "connectionInfo": {
        "namespace": "default",
        "gkeClusterReference": {
          "cluster": "projects/PROJECT_ID/locations/GKE_CLUSTER_LOCATION/clusters/my-gke-cluster-1"
        }
      },
      "etag": "8mBC7IJJFvY40k-rBabOOaGR6sSRG3dP6pI-frTuu9Y",
      "clusterState": {
        "agonesVersionInstalled": "1.15.0",
        "kubernetesVersionInstalled": "1.18.20-gke.900",
        "installationState": "AGONES_KUBERNETES_VERSION_SUPPORTED",
        "provider": "gke"
      }
    },
    {
      "name": "projects/PROJECT_ID/locations/REALM_LOCATION/realms/REALM_ID/gameServerClusters/my-gs-cluster-2",
      "createTime": CREATE_TIME,
      "updateTime": UPDATE_TIME,
      "connectionInfo": {
        "namespace": "default",
        "gkeClusterReference": {
          "cluster": "projects/PROJECT_ID/locations/GKE_CLUSTER_LOCATION/clusters/my-gke-cluster-2"
        }
      },
      "etag": "8mBC7IJJFvY40k-rBabOOaGR6sSRG3dP6pI-frTuu9Y",
      "clusterState": {
        "agonesVersionInstalled": "1.15.0",
        "kubernetesVersionInstalled": "1.18.20-gke.900",
        "installationState": "AGONES_KUBERNETES_VERSION_SUPPORTED",
        "provider": "gke"
      }
    }
  ]
}

查看有关集群的详细信息

控制台

  1. 在 Google Cloud 控制台中,转到大区和集群页面。

    转到 Game Servers

  2. 展开一个大区即可查看属于该大区的游戏服务器集群。

  3. 大区对应的最后一个表列中,点击省略号 ,然后选择查看详细信息

gcloud

您可以使用 Google Cloud CLI 查找有关集群的详细信息,例如创建时间或 GKE 集群详细信息。

如需查看集群的详细信息,请运行以下命令,并将占位符值(如 realmID)替换为适当的值:

gcloud game servers clusters describe gscID --realm realmID --location=region [--view=FULL; default="BASIC"]

输出会提供集群的详细信息。 添加可选的 --view=FULL 标志,以显示集群上安装的 Agones 和 Kubernetes 的版本。

变量占位符对应于以下说明:

  • gscID 是您为游戏服务器集群指定的唯一标识符。
  • realmID 是在其中存储集群的大区的唯一标识符。
  • region 是集群的地区。选择与父级大区相同的地区。

REST

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_IDIAM 设置中列出的 Google Cloud 项目 ID
  • REALM_LOCATION:大区的区域或 global
  • REALM_ID:用户定义的大区标识符
  • GS_CLUSTER_ID:用户定义的集群标识符

根据您发送的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/REALM_LOCATION/realms/REALM_ID/gameServerClusters/GS_CLUSTER_ID",
  "createTime": CREATE_TIME,
  "updateTime": UPDATE_TIME,
  "connectionInfo": {
    "namespace": "default",
    "gkeClusterReference": {
      "cluster": "projects/PROJECT_ID/locations/GKE_CLUSTER_LOCATION/clusters/MY_GKE_CLUSTER"
    }
  },
  "etag": "8mBC7IJJFvY40k-rBabOOaGR6sSRG3dP6pI-frTuu9Y",
  "clusterState": {
    "agonesVersionInstalled": "1.15.0",
    "kubernetesVersionInstalled": "1.18.20-gke.900",
    "installationState": "AGONES_KUBERNETES_VERSION_SUPPORTED",
    "provider": "gke"
  }
}

更新集群

gcloud

如需更新集群的字段,请在替换现有集群的标识符后运行 gcloud game servers clusters update 命令。以下命令会更新集群的说明字段。

gcloud game servers clusters update gscID \
    --realm=realmID --location=region \
    --description="My updated description" --no-dry-run

如需查找其他集群字段的标志,请参阅 gcloud 参考文档

REST

以下示例更新 description 字段。如要更新其他字段,请将字段名称添加到 ?updateMask= 查询参数并请求 JSON 正文。

在使用任何请求数据之前,请先进行以下替换:

  • PROJECT_IDIAM 设置中列出的 Google Cloud 项目 ID
  • REALM_LOCATION:大区的区域或 global
  • REALM_ID:大区的标识符
  • GS_CLUSTER_ID:用户定义的集群标识符

请求 JSON 正文:

{
  "description": "My updated description"
}

如需发送您的请求,请展开以下选项之一:

您应该收到类似以下内容的 JSON 响应:

{
  "name": "projects/PROJECT_ID/locations/REALM_LOCATION/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.gaming.v1.OperationMetadata",
    "createTime": CREATE_TIME,
    "target": "projects/PROJECT_ID/locations/REALM_LOCATION/realms/REALM_ID/gameServerClusters/GS_CLUSTER_ID",
    "verb": "update",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

问题排查

IAM 权限错误

如果权限设置不正确,您会看到以下错误:

Cannot connect to the provided Kubernetes cluster "projects/projectId/locations/location/clusters/gkeCluster", make sure that "service-projectNumber@gcp-sa-gameservices.iam.gserviceaccount.com" has been granted the required permissions to access the cluster

如果发生这种情况,请完成本部分中的步骤来设置 IAM 权限。

当您在 Google Cloud 项目中创建 Game Servers 资源时,Game Servers 还会创建一个 Game Servers Google 管理的服务帐号,其格式为 serviceAccount:service-projectNumber@gcp-sa-gameservices.iam.gserviceaccount.com。 此服务帐号将被自动授予预定义的 Game Servers roles/gameservices.serviceAgent 角色。此角色赋予 Google 代管式服务帐号管理您注册的 GKE 集群所需的权限。如果您将其撤消,就会看到上述错误消息。

以下命令展示用于向服务帐号授予 Game Servers roles/gameservices.serviceAgent 角色的语法:

gcloud projects add-iam-policy-binding projectId --role roles/gameservices.serviceAgent --member serviceAccount:service-projectNumber@gcp-sa-gameservices.iam.gserviceaccount.com

其中:

  • projectId 是项目的 ID。您可以通过运行 gcloud config get-value project 来获取 projectId
  • 运行 gcloud projects describe projectId 即可检索 projectNumber

后续步骤

了解如何删除集群