配置集群扩缩行为

本页面介绍了如何创建和管理指定部署的扩缩行为的 Game Servers 配置。您可以自定义扩缩配置,以仅定位某个大区中的特定 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. 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.

    客户端库

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

创建配置

确保您已创建 Game Servers 部署

您可以使用 Google Cloud CLI 在部署中创建 Game Servers 配置。

如需创建游戏服务器配置,请执行以下操作:

  1. 将以下队列规范复制到一个文件中:

    - name: fleet-spec-1
      fleetSpec:
       replicas: 0
       scheduling: Packed
       strategy:
         type: RollingUpdate
         rollingUpdate:
           maxSurge: 25%
           maxUnavailable: 25%
       template:
         metadata:
           labels:
             gameName: udp-server
         spec:
           ports:
           - name: default
             portPolicy: Dynamic
             containerPort: 7654
             protocol: UDP
           health:
             initialDelaySeconds: 30
             periodSeconds: 60
           sdkServer:
             logLevel: Info
             grpcPort: 9357
             httpPort: 9358
           template:
             spec:
               containers:
               - name: dedicated
                 image: gcr.io/agones-images/udp-server:0.21
                 imagePullPolicy: Always
                 resources:
                   requests:
                     memory: 200Mi
                     cpu: 500m
                   limits:
                     memory: 200Mi
                     cpu: 500m
    
  2. 将以下扩缩配置规范复制到一个文件中:

    - name: scaling-config-1
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            bufferSize: 1
            minReplicas: 0
            maxReplicas: 4
    
  3. 运行以下命令并将占位符值(例如 deploymentIDconfigID)替换为适当的值:

    gcloud game servers configs create configID --deployment deploymentID --fleet-configs-file fleetSpecFile --scaling-configs-file scalingConfigsFile
    

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

  • configID 是您可以为此配置指定的唯一标识符。
  • deploymentID 是部署的唯一标识符。
  • fleetSpecFile 是具有 Agones 队列规范的文件的路径。
  • scalingConfigsFile 是具有扩缩规范的文件的路径。

为部署设置配置

使用扩缩政策创建 Game Servers 配置后,通过更新 Game Servers 部署的发布,将该配置设为默认配置。

Game Servers 为所有集群应用扩缩行为。

验证扩缩规范

如需确定 Game Servers 是否对集群应用了已配置的扩缩,请为大区中的每个集群运行以下命令。将 namespace 占位符替换为您在将 Kubernetes 集群注册为 Game Servers 集群时指定的命名空间:

   kubectl get fleetautoscaler --namespace namespace
   

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

  • namespace 是您在注册时使用的命名空间。

仅扩缩特定集群

您可能希望将扩缩配置限制为一个大区内的特定 Game Servers 集群。为此,您可以向集群添加标签,然后在扩缩配置中仅定位这些带有标签的集群。

请按照以下步骤操作:

  1. 更新集群以添加标签。标签是形式为 key=value 的键值对。在此示例中,请将标签指定为 --labels=cloud=true

    gcloud game servers clusters update gscID --realm=realmID --location=region \
      --update-labels=labels --no-dry-run
    

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

    • gscID 是您可以为此集群指定的唯一标识符。
    • realmID 是您要在其中存储集群的大区的唯一标识符。
    • region 是集群的区域。选择与父级大区相同的区域。

  2. 按照创建配置部分中的步骤创建配置,并添加以下内容:向扩缩配置规范添加标签。例如:

      - name: scaling-config-1
        fleetAutoscalerSpec:
          policy:
            type: Buffer
            buffer:
              bufferSize: 1
              minReplicas: 0
              maxReplicas: 4
          selectors:
          - labels:
              "cloud": "true"
    
  3. 通过为 Game Servers 部署更新发布,将配置设置为默认配置。

Game Servers 仅将扩缩配置应用于标签与扩缩配置中的标签选择器匹配的 Game Servers 集群。因此,在本示例中,任何带 cloud=true 标签的集群都将获得一个扩缩配置,而不带该标签的任何集群都不会获得扩缩配置。

创建扩缩时间表

您可以借助 Game Servers 配置多个扩缩时间表。您可以配置多个扩缩时间表,其中包括开始和可选结束时间表或周期性时间表(称为 cron 时间表)。您还可以结合多个时间表和周期性时间表。

Game Servers 根据世界协调时间 (UTC) 来评估开始时间和结束时间。系统支持其他时区作为 UTC 的偏移量。开始时间和结束时间采用 RFC 3339 日期字符串格式。Game Servers 支持的最低精度为分钟。

Game Servers 按照扩缩时间表在配置中的列出顺序对其进行评估,直到找到匹配的时间表。本部分介绍了各种时间安排示例。

创建多个扩缩时间表

您可以针对特殊事件调整以下扩缩时间表。在本示例中,Game Servers 应用以下扩缩时间表:

  • scaling-config-june1-and-7 为 2020 年 6 月 1 日 17:00 到 22:30,以及 2020 年 6 月 7 日 12:00 到 18:00
  • 默认 scaling-config-default 配置,2020 年 5 月 25 日到 2021 年 5 月 31 日之间的所有其他时间

    - name: scaling-config-june1-and-7
      schedules:
      - startTime: "2020-06-01T17:00:00Z"
        endTime: "2020-06-01T22:30:00Z"
      - startTime: "2020-06-07T12:00:00Z"
        endTime: "2020-06-07T18:00:00Z"
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 100
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-default
      schedules:
      - startTime: "2020-05-25T00:00:00Z"
        endTime: "2021-05-31T00:00:00Z"
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 5
            minReplicas: 1
            bufferSize: 1
    

创建周期性扩缩时间表

以下示例规范说明了在高峰时段处理容量增加的周期性 cron 扩缩时间表。在本示例中,Game Servers 应用以下扩缩时间表:

  • scaling-config-weekday-peak,工作日期间 17:00 到 20:00
  • scaling-config-weekend-peak,周末期间 13:00 到 17:00
  • 默认 scaling-config-default 配置,所有其他时间

    - name: scaling-config-weekday-peak
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 17-20 * * 1-5'
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 100
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-weekend-peak
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 13-17 * * 0,6'
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 150
            minReplicas: 20
            bufferSize: 10
    - name: scaling-config-default
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 5
            minReplicas: 1
            bufferSize: 1
    

创建多个周期性扩缩时间表

扩缩规范可以包括开始时间和结束时间字段以及周期性 cron 时间表。在本示例中,Game Servers 应用以下扩缩时间表:

  • scaling-config-july4,7 月 4 日到 7 月 7 日 9:00 到 23:00
  • scaling-config-peak,每天 17:00 到 22:00
  • 默认 scaling-config-default 配置,所有其他时间

    - name: scaling-config-july4
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 9-18 * * *'
        startTime: "2020-07-04T00:00:00Z"
        endTime: "2020-07-07T00:30:00Z"
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 150
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-peak
      schedules:
      - cronJobDuration: 3600s
        cronSpec: '0 17-22 * * *'
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 100
            minReplicas: 10
            bufferSize: 5
    - name: scaling-config-default
      fleetAutoscalerSpec:
        policy:
          type: Buffer
          buffer:
            maxReplicas: 40
            minReplicas: 5
            bufferSize: 4
    

后续步骤