快速入门:为开源游戏部署服务器

为开源游戏部署服务器

在本快速入门中,您将了解如何借助 Google Cloud CLI 在 Game Servers 上使用游戏服务器大区、集群、部署、配置和发布。


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示

操作演示


准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  3. 确保您的 Google Cloud 项目已启用结算功能

  4. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

  5. 确保您的 Google Cloud 项目已启用结算功能

  6. 确保您已启用 Game Services API。
  7. 启用 Game Services API

选择 shell

为完成本快速入门,您可以使用 Cloud Shell 或本地 shell。

Cloud Shell 是一种 shell 环境,用于管理托管在 Google Cloud 上的资源。Cloud Shell 预安装有 gcloud 命令行工具。gcloud CLI 提供了 Game Servers 的主要命令行界面。

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

如果选择本地 shell,则可能需要安装 Kubernetes 命令行工具 kubectl

gcloud components install kubectl

创建 Google Kubernetes Engine 集群

如需创建 Google Kubernetes Engine 集群,请执行以下操作:

  1. 在 Cloud 控制台中,启用 Kubernetes Engine API。

    启用该 API

  2. 运行以下命令创建一个费用优化的集群,该集群在 us-central1-a 可用区中有一个节点:

    gcloud container clusters create gcgs-quickstart \
    --cluster-version=1.23 \
    --tags=game-server \
    --scopes=gke-default \
    --num-nodes=1 \
    --no-enable-autoupgrade \
    --machine-type=e2-standard-2 \
    --zone=us-central1-a
    
  3. 运行以下命令来检索您在上一步中创建的 GKE 集群的凭据:

    gcloud container clusters get-credentials gcgs-quickstart --zone=us-central1-a
    

    kubectl 使用这些凭据在 Kubernetes 集群上运行命令。如需了解详情,请参阅为 kubectl 配置集群访问权限

在 GKE 上安装 Agones

在本部分中,您将安装开源 Agones 游戏基础架构平台。如需安装 Agones,请执行以下操作:

  1. 运行以下命令以创建 agones-system 命名空间:

    kubectl create namespace agones-system
    
  2. 运行以下命令可安装 Agones:

    kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.26.0/install/yaml/install.yaml
    
  3. 您可以通过检查 Kubernetes pod 的状态来验证 Agones 系统是否正在运行:

    kubectl get --namespace agones-system pods
    

    所有 pod 都应处于 Running 状态:

    NAME                                 READY   STATUS    RESTARTS   AGE
    agones-allocator-6694dcc89-7r75d     1/1     Running   0          28s
    agones-allocator-6694dcc89-m7ghq     1/1     Running   0          28s
    agones-allocator-6694dcc89-qp6cm     1/1     Running   0          28s
    agones-controller-56c98db844-llzzc   1/1     Running   0          22s
    agones-ping-d9d74c5c6-8kmt6          1/1     Running   0          24s
    agones-ping-d9d74c5c6-xwn4h          1/1     Running   0          24s
    

创建 Game Servers 资源

要创建 Game Servers 资源,请执行以下操作:

  1. 在 GKE 集群所在的位置创建大区:

    gcloud game servers realms create realm-quickstart --time-zone EST --location us-central1
    
  2. 将 Agones GKE 集群注册到 Game Servers,并将其挂接到您在上一步中创建的大区:

    gcloud game servers clusters create cluster-quickstart \
    --realm=realm-quickstart \
    --gke-cluster locations/us-central1-a/clusters/gcgs-quickstart \
    --namespace=default \
    --location us-central1 \
    --no-dry-run
    
  3. 创建一个游戏服务器部署,用于存储所有游戏服务器配置,然后将其发布到游戏服务器集群中:

    gcloud game servers deployments create deployment-quickstart
    

    现在您已有了游戏服务器部署,可以使用 gcloud CLI 为其添加游戏服务器配置。

  4. 将以下示例 Agones 队列规范清单复制到当前目录中名为 fleet_configs.yaml 的新文件:

    - name: fleet-spec-1
      fleetSpec:
        replicas: 2
        template:
          metadata:
            labels:
              foo: bar
          spec:
            ports:
            - name: default
              portPolicy: Dynamic
              containerPort: 7654
            template:
              spec:
                containers:
                - name: simple-game-server
                  image: gcr.io/agones-images/simple-game-server:0.3
    
  5. 如需创建游戏服务器配置,请运行以下命令:

    gcloud game servers configs create config-1 --deployment deployment-quickstart --fleet-configs-file fleet_configs.yaml
    
  6. 如需更新发布,请运行以下命令:

    gcloud game servers deployments update-rollout deployment-quickstart --default-config config-1 --no-dry-run
    
  7. 如需验证默认命名空间下的一个队列的发布,请运行以下命令:

    kubectl get fleet
    

    下面描述了预期的输出:

    NAME                                     SCHEDULING   DESIRED   CURRENT   ALLOCATED   READY   AGE
    fleet-deployment-quickstart-config-1   Packed       2         2         0           2       4s
    

    输出会确认您是否已在集群中部署了一个队列,其中包含两个准备接受连接的简单 UDP 服务器副本。

测试与游戏服务器的连接

如需测试与游戏服务器的连接,请执行以下操作:

  1. 创建防火墙规则,打开连接到集群所需的 UDP 端口:

    gcloud compute firewall-rules create gcgs-quickstart-firewall \
    --allow udp:7000-8000 \
    --target-tags game-server \
    --description "Firewall to allow game server udp traffic"
    
  2. 接下来,获取单个游戏服务器的 IP 地址和端口号:

    kubectl get gameserver
    

    该命令会返回类似于以下内容的输出:

    NAME                                                 STATE   ADDRESS          PORT   NODE                                             AGE
    fleet-deployment-quickstart-config-1-nndvr-5gvch   Ready   IP_ADDRESS   PORT_NUMBER   gke-gcgs-quickstart-default-pool-db3d2ee8-dlg7   11s
    fleet-deployment-quickstart-config-1-nndvr-vqwpl   Ready   IP_ADDRESS   PORT_NUMBER   gke-gcgs-quickstart-default-pool-db3d2ee8-dlg7   11s
    
  3. 如需测试连接,请运行 Netcat 命令。如需在 Linux 上安装 Netcat,请运行以下命令:

    sudo apt install netcat
    
  4. 如需启动测试,请运行以下命令:

    nc -u IP_ADDRESS PORT_NUMBER
    
  5. 接下来,输入 Hello,该命令会返回如下所示的输出:

    Hello
    > ACK: Hello
    
  6. 使用 Ctrl+C 停止测试。

(可选)为开源游戏名称部署服务器

您可以更新发布,以便在集群中部署带有两个开源游戏服务器副本的机群。这些游戏服务器支持多人游戏版本的赛车游戏 SuperTuxKart

  1. 使用以下 Agones 机群规范覆盖现有的 fleet_configs.yaml 文件:

    - name: supertuxkart
      fleetSpec:
        replicas: 2
        template:
          metadata:
            labels:
              version: "1.0"
          spec:
            ports:
            - name: default
              containerPort: 8080
            health:
              initialDelaySeconds: 30
              periodSeconds: 60
            template:
              spec:
                containers:
                - name: supertuxkart
                  image: gcr.io/agones-images/supertuxkart-example:0.3
    
  2. 您无法更新现有游戏服务器配置,因为它们是不可变的。 创建引用更新后的队列规范清单的新配置:

    gcloud game servers configs create stk-1 --deployment deployment-quickstart --fleet-configs-file fleet_configs.yaml
    

  3. 使用新配置对发布进行更新:

    gcloud game servers deployments update-rollout deployment-quickstart --default-config stk-1 --no-dry-run
    

  4. 获取单个游戏服务器的 IP 地址和端口号:

    kubectl get gameserver
    

  5. 下载 SuperTuxKart 客户端

  6. 启动 SuperTuxKart 客户端。

  7. 点击主菜单上的在线按钮,然后点击输入服务器地址 (Enter server address) 按钮。

  8. 输入单个游戏服务器的 IP 地址和端口号(来自上一步)。

  9. 点击开始竞赛,以启动游戏。

您可以在其他平台上下载 SuperTuxKart 客户端以连接到同一服务器并参与竞赛。

清理

为避免因本页中使用的资源导致您的 Google Cloud 帐号产生费用,请按照以下步骤操作。

如果您不想保留您在本快速入门中创建的任何资源,可以删除该项目:

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

或者,如果您想要保留该项目,请完成以下步骤以手动删除您在本快速入门中创建的资源:

  1. 如需删除防火墙规则,请运行以下命令:

    gcloud compute firewall-rules delete gcgs-quickstart-firewall
    
  2. 如需清除默认发布,请运行以下命令:

    gcloud game servers deployments update-rollout deployment-quickstart --clear-default-config --no-dry-run
    
  3. 如需删除游戏服务器配置,请运行以下命令:

    gcloud game servers configs delete config-1 --deployment deployment-quickstart
    

    如果您已完成可选部分,请删除其他游戏服务器配置:

    gcloud game servers configs delete stk-1 --deployment deployment-quickstart
    
  4. 如需删除游戏服务器部署,请运行以下命令:

    gcloud game servers deployments delete deployment-quickstart
    
  5. 如需删除游戏服务器集群,请运行以下命令:

    gcloud game servers clusters delete cluster-quickstart --realm=realm-quickstart --location=us-central1 --no-dry-run
    
  6. 如需删除大区,请运行以下命令:

    gcloud game servers realms delete realm-quickstart --location=us-central1
    
  7. 如需停用 Game Services API,请运行以下命令:

    gcloud services disable gameservices.googleapis.com
    
  8. 如需删除 GKE 集群,请运行以下命令:

    gcloud container clusters delete gcgs-quickstart --zone=us-central1-a
    

后续步骤

如需了解 Game Servers 概念的技术介绍,请参阅 Game Servers 概览

参阅方法指南,了解特定 Game Servers 任务。

查看 Terraform 部署示例项目