本页面介绍了如何创建和管理指定部署的扩缩行为的 Game Servers 配置。您可以自定义扩缩配置,以仅定位某个大区中的特定 Game Servers 集群。
准备工作
开始之前,我们建议您先了解 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 部署。
您可以使用 Google Cloud CLI 在部署中创建 Game Servers 配置。
如需创建游戏服务器配置,请执行以下操作:
将以下队列规范复制到一个文件中:
- 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
将以下扩缩配置规范复制到一个文件中:
- name: scaling-config-1 fleetAutoscalerSpec: policy: type: Buffer buffer: bufferSize: 1 minReplicas: 0 maxReplicas: 4
运行以下命令并将占位符值(例如 deploymentID 和 configID)替换为适当的值:
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 集群。为此,您可以向集群添加标签,然后在扩缩配置中仅定位这些带有标签的集群。
请按照以下步骤操作:
更新集群以添加标签。标签是形式为
key=value
的键值对。在此示例中,请将标签指定为--labels=cloud=true
。gcloud game servers clusters update gscID --realm=realmID --location=region \ --update-labels=labels --no-dry-run
其他变量占位符对应于以下说明:
- gscID 是您可以为此集群指定的唯一标识符。
- realmID 是您要在其中存储集群的大区的唯一标识符。
region 是集群的区域。选择与父级大区相同的区域。
按照创建配置部分中的步骤创建配置,并添加以下内容:向扩缩配置规范添加标签。例如:
- name: scaling-config-1 fleetAutoscalerSpec: policy: type: Buffer buffer: bufferSize: 1 minReplicas: 0 maxReplicas: 4 selectors: - labels: "cloud": "true"
通过为 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:00scaling-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:00scaling-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