Guía de inicio rápido: Implementa un servidor para un juego de código abierto

Implementa un servidor para un juego de código abierto

En esta guía de inicio rápido, aprenderás a trabajar con dominios, clústeres, implementaciones, configuraciones y lanzamientos de servidores de juegos en Game Servers con Google Cloud CLI.


Para seguir la guía paso a paso en esta tarea directamente en la consola de Google Cloud, haz clic en Guía:

Guiarme


Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  4. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

  5. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  6. Asegúrate de haber habilitado la API de los servicios de juego.
  7. Habilitar la API de servicios de juego

Elige un shell

Para completar esta guía de inicio rápido, puedes usar Cloud Shell o tu shell local.

Cloud Shell es un entorno de shell que se usa para administrar recursos alojados en Google Cloud. Cloud Shell ya viene instalado con la herramienta de línea de comandos de gcloud. Gcloud CLI proporciona la interfaz de línea de comandos principal para Game Servers.

Cloud Shell

Para iniciar Cloud Shell, sigue estos pasos:

  1. Ve a la consola de Google Cloud.

    Consola de Google Cloud

  2. Desde la esquina superior derecha de la consola, haz clic en el botón Activar Cloud Shell: .

Se abrirá una sesión de Cloud Shell dentro de un marco en la parte inferior en la consola. Usa esta shell para ejecutar los comandos de gcloud.

Shell local

Instala la CLI de gcloud

Verifica que hayas configurado el proyecto predeterminado que deseas para Google Cloud CLI (de lo contrario, debes especificar la marca --project de forma explícita para cada comando más adelante):

gcloud config list project

Si no puedes ejecutar el siguiente comando para configurar un proyecto predeterminado, reemplaza PROJECT_ID por el ID del proyecto deseado:

gcloud config set project PROJECT_ID

Ejecuta el siguiente comando para verificar tu versión de Google Cloud CLI. Game Servers requiere la versión 306.0.0 o una posterior de gcloud CLI.

gcloud version

Para actualizar la instalación, ejecuta el siguiente comando:

gcloud components update

Si seleccionas la shell local, es posible que debas instalar la herramienta de línea de comandos de Kubernetes kubectl:

gcloud components install kubectl

Crea un clúster de Google Kubernetes Engine

Para crear un clúster de Google Kubernetes Engine, sigue estos pasos:

  1. En la consola de Cloud, habilita la API de Kubernetes Engine.

    Habilitar la API

  2. Ejecuta el siguiente comando para crear un clúster de costo optimizado con un nodo en la zona 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. Ejecuta el siguiente comando a fin de recuperar las credenciales para el clúster de GKE que creaste en el paso anterior:

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

    kubectl usa estas credenciales para ejecutar comandos en tus clústeres de Kubernetes. Consulta Configura el acceso del clúster para kubectl a fin de obtener más información.

Instala Agones en GKE

En esta sección, instalarás la plataforma de infraestructura de videojuegos Agones de código abierto. Para instalar Agones, sigue estos pasos:

  1. Ejecuta el siguiente comando para crear el espacio de nombres agones-system:

    kubectl create namespace agones-system
    
  2. Ejecuta el siguiente comando para instalar Agones:

    kubectl apply -f https://raw.githubusercontent.com/googleforgames/agones/release-1.26.0/install/yaml/install.yaml
    
  3. Para verificar que el sistema Agones esté en ejecución, verifica el estado de los Pods de Kubernetes:

    kubectl get --namespace agones-system pods
    

    Se espera que todos los Pods estén en el estado 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
    

Crea recursos de Game Servers

Para crear recursos de Game Servers, sigue estos pasos:

  1. Crea un dominio en la misma ubicación que el clúster de GKE:

    gcloud game servers realms create realm-quickstart --time-zone EST --location us-central1
    
  2. Registra tu clúster de GKE de Agones con Game Servers y conéctalo al dominio que creaste en el paso anterior:

    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. Crea una implementación de Game Servers, que se usa para almacenar todas las opciones de configuración de Game Servers y, luego, implementarlas en los clústeres de tu servidor de juegos:

    gcloud game servers deployments create deployment-quickstart
    

    Ahora que tienes una implementación de servidor de juegos, puedes agregarle una configuración de servidor de juegos mediante gcloud CLI.

  4. Copia el siguiente ejemplo de manifiesto de especificaciones de la flota de Agones en un archivo nuevo llamado fleet_configs.yaml en el directorio actual:

    - 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. Para crear la configuración del servidor de juegos, ejecuta el siguiente comando:

    gcloud game servers configs create config-1 --deployment deployment-quickstart --fleet-configs-file fleet_configs.yaml
    
  6. Para actualizar el lanzamiento, ejecuta el siguiente comando:

    gcloud game servers deployments update-rollout deployment-quickstart --default-config config-1 --no-dry-run
    
  7. Para validar el lanzamiento de una flota en el espacio de nombres predeterminado, ejecuta el siguiente comando:

    kubectl get fleet
    

    A continuación, se muestra el resultado esperado:

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

    El resultado confirma que implementaste una flota con dos réplicas de servidor UDP simples en tu clúster que están listas para aceptar conexiones.

Prueba la conectividad con el servidor de juegos

Para probar la conectividad al servidor de juegos, haz lo siguiente:

  1. Crea una regla de firewall a fin de abrir los puertos UDP necesarios para conectarte al clúster:

    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. A continuación, obtén la dirección IP y el número de puerto que corresponden a un servidor para juegos individual:

    kubectl get gameserver
    

    El comando muestra un resultado similar al siguiente:

    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. Para probar la conectividad, ejecuta el comando Netcat. Para instalar Netcat en Linux, ejecuta el siguiente comando:

    sudo apt install netcat
    
  4. Para iniciar la prueba, ejecuta el siguiente comando:

    nc -u IP_ADDRESS PORT_NUMBER
    
  5. A continuación, escribe Hello y el comando mostrará un resultado similar al siguiente:

    Hello
    > ACK: Hello
    
  6. Usa Ctrl+C para detener la prueba.

Implementa un servidor para un título de juego de código abierto (opcional)

Puedes actualizar el lanzamiento para implementar una flota con dos réplicas de servidor de videojuegos de código abierto en tu clúster. Estos servidores de videojuegos son compatibles con la versión multijugador del juego de carrera SuperTuxKart.

  1. Reemplaza el archivo existente fleet_configs.yaml por las siguientes especificaciones de la flota de Agones:

    - 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. No puedes actualizar una configuración de servidor para videojuegos existente porque son inmutables. Crea una configuración nueva que haga referencia al manifiesto de especificaciones de la flota actualizado:

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

  3. Actualiza el lanzamiento con la configuración nueva:

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

  4. Obtén la dirección IP y el número de puerto que corresponden a un servidor para videojuegos individual:

    kubectl get gameserver
    

  5. Descarga un cliente de SuperTuxKart.

  6. Inicia el cliente SuperTuxKart.

  7. Haz clic en el botón Online en el menú principal y, luego, en el botón Enter server address.

  8. Ingresa la dirección IP y el número de puerto para un servidor de juegos individual (de un paso anterior).

  9. Haz clic en Start race para empezar el juego.

Puedes descargar el cliente de SuperTuxKart en otras plataformas para conectarte al mismo servidor y participar en la carrera.

Limpia

Sigue estos pasos para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos que se usaron en esta página.

Si no deseas conservar ninguno de los recursos que creaste en esta guía de inicio rápido, puedes borrar el proyecto:

  1. En la consola de Google Cloud, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Como alternativa, si deseas conservar el proyecto, completa los siguientes pasos para borrar de forma manual los recursos que creaste en esta guía de inicio rápido:

  1. Para borrar la regla de firewall, ejecuta el siguiente comando:

    gcloud compute firewall-rules delete gcgs-quickstart-firewall
    
  2. Para borrar el lanzamiento predeterminado, ejecuta el siguiente comando:

    gcloud game servers deployments update-rollout deployment-quickstart --clear-default-config --no-dry-run
    
  3. Para borrar la configuración del servidor de juegos, ejecuta el siguiente comando:

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

    Si completaste la sección opcional, borra la configuración adicional del servidor de juegos:

    gcloud game servers configs delete stk-1 --deployment deployment-quickstart
    
  4. Para borrar la implementación del servidor de juegos, ejecuta el siguiente comando:

    gcloud game servers deployments delete deployment-quickstart
    
  5. Para borrar el clúster del servidor de juegos, ejecuta el siguiente comando:

    gcloud game servers clusters delete cluster-quickstart --realm=realm-quickstart --location=us-central1 --no-dry-run
    
  6. Para borrar el dominio, ejecuta el siguiente comando:

    gcloud game servers realms delete realm-quickstart --location=us-central1
    
  7. Para inhabilitar la API de servicios de juegos, ejecuta el siguiente comando:

    gcloud services disable gameservices.googleapis.com
    
  8. Para borrar el clúster de GKE, ejecuta el siguiente comando:

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

¿Qué sigue?

Para obtener una introducción técnica a los conceptos de Game Servers, consulta la descripción general de Game Servers.

Obtén más información sobre las tareas específicas de Game Servers en las guías prácticas.

Revisa el proyecto de muestra de implementación de Terraform.