Diseña una flota de GameLift contenedores de Amazon - Amazon GameLift

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Diseña una flota de GameLift contenedores de Amazon

Esta documentación corresponde a una función que se encuentra en una versión preliminar pública. Está sujeta a cambios.

En estos temas se presentan las decisiones clave que tomarás al configurar una flota de GameLift contenedores de Amazon. Tus decisiones afectan a la forma en que configuras los ajustes de los contenedores, los grupos de contenedores y las flotas.

Diseñe la estructura de contenedores de su flota

Como primer paso, identifica el software y los recursos necesarios para alojar tu servidor de juegos, incluidos los siguientes:

  • Tu aplicación de servidor de juegos. La aplicación debe estar integrada con las GameLift funciones de alojamiento de Amazon, incluida la versión 5+ del SDK del servidor. Consulte Integra tu juego con Amazon GameLift.

  • El GameLift agente de Amazon. Este agente informático mantiene la comunicación con el GameLift servicio de Amazon y gestiona el ciclo de vida de todos los procesos del servidor de juegos. Para obtener más información, consulte Servidores de juegos y Amazon GameLift Agent.

  • Software y recursos adicionales según sea necesario. Esto podría incluir el software necesario para ejecutar las aplicaciones del servidor de juegos. El software de apoyo más común se utiliza para el registro y la supervisión, la seguridad, la entrega de contenido y la sincronización de datos.

A continuación, decide cómo estructurar el software y los recursos para una flota de GameLift contenedores de Amazon. Amazon GameLift utiliza grupos de contenedores para organizar los contenedores. Una flota siempre tiene un grupo de réplicas de contenedores y, si lo desea, puede tener una flota de contenedores demoníaca. Para obtener más información, consulte Componentes de la flota de contenedores.

  • Comience por diseñar su grupo de contenedores de réplicas. Tenga en cuenta estas directrices:

    • Agrupa tu aplicación de servidor de juegos y el Amazon GameLift Agent en el mismo contenedor. Convierte este contenedor en el único contenedor esencial del grupo de réplicas.

    • Organice el resto del software de su servidor de juegos en contenedores. Puedes optar por poner todo en un único contenedor en el grupo de réplicas. O puede optar por crear uno o más contenedores con sidecar. Algunas de las razones para usar un sidecar son las siguientes:

      • Para configurar una secuencia de inicio/apagado para un software individual. Puede lograrlo colocando el software en contenedores separados y configurando las dependencias entre ellos.

      • Para establecer límites específicos de los contenedores para el uso de memoria y CPU.

      • Para especificar diferentes ajustes de configuración de contenedores para cada contenedor, como un comando de lanzamiento, un punto de entrada, un directorio de trabajo, variables de entorno o comprobaciones de estado.

  • Decida si necesita un grupo daemon de contenedores para su flota. Considere lo siguiente:

    • Los contenedores Daemon se utilizan normalmente para ejecutar procesos en segundo plano o de supervisión.

    • Los contenedores de un grupo de demonios no se replican en una instancia de flota. Esto significa que los contenedores de un grupo de demonios no escalan junto con el grupo de contenedores de réplicas.

    • Un grupo de demonios puede tener varios contenedores. Puede designar cualquier contenedor de un grupo de demonios como esencial.

Establece límites de recursos

Para cada grupo de contenedores, determine la cantidad de memoria y CPU que necesita el grupo para ejecutar su software. Amazon GameLift se basa en esta información para gestionar los recursos del grupo de contenedores. También utiliza esta información para calcular cuántos grupos de réplicas de contenedores puede contener una imagen de flota. También puede establecer límites para contenedores individuales.

Establece límites opcionales para los contenedores

Establecer límites de recursos específicos para cada contenedor te permite ejercer un mayor control sobre cómo los contenedores individuales pueden usar los recursos del grupo. Si no estableces límites específicos para los contenedores, todos los contenedores del grupo comparten los recursos del grupo. El uso compartido ofrece una mayor flexibilidad para usar los recursos donde se necesiten. También aumenta la posibilidad de que los procesos compitan entre sí y provoquen la falla del contenedor.

Defina cualquiera de las siguientes ContainerDefinition propiedades para cualquier contenedor.

  • SoftLimit(memoria): reserve una cantidad mínima de memoria para el uso exclusivo del contenedor. El contenedor siempre tiene disponible la cantidad reservada. Puede superar este mínimo en cualquier momento, si hay recursos adicionales disponibles.

  • HardLimit(memoria): establezca un límite máximo de memoria para el contenedor. Si el contenedor supera este límite, se reinicia.

  • Cpulímite: reserve una cantidad mínima de recursos de CPU para el uso exclusivo del contenedor. El contenedor siempre tiene disponible la cantidad reservada. Puede superar este mínimo en cualquier momento, si hay recursos adicionales disponibles. (1024 unidades de CPU equivalen a 1 vCPU).

Establezca los límites totales de recursos para un grupo de contenedores

Indique a Amazon GameLift cuántos recursos de memoria y CPU necesita cada grupo de contenedores. El objetivo es asignar recursos suficientes para optimizar el rendimiento del servidor de juegos. Amazon GameLift utiliza estos límites para calcular cómo empaquetar grupos de réplicas de contenedores en una instancia de flota. También los usarás al elegir un tipo de instancia para una flota de contenedores.

Calcula la memoria y la CPU totales necesarias para todos los procesos de cada contenedor de un grupo. Considere lo siguiente:

  • ¿Qué procesos se ejecutan en todos los contenedores del grupo de contenedores? Sume los recursos necesarios para estos procesos.

  • ¿Cuántos procesos simultáneos del servidor de juegos piensas ejecutar en cada grupo de contenedores? Establece este valor como parte de la configuración del tiempo de ejecución de una flota, pero aquí debe planificar suficiente memoria para ellos (consulte Optimizar la configuración del tiempo de ejecución).

En función de su estimación de los requisitos del grupo de contenedores, defina las siguientes ContainerGroupDefinition propiedades:

  • TotalMemoryLimit— Establezca un límite máximo de memoria para el grupo de contenedores. Todos los contenedores del grupo comparten la memoria asignada. Si estableces límites de contenedores individuales, el límite total de memoria debe ser:

    • igual o superior a la suma de todos los límites de memoria flexible de los contenedores

    • igual o superior al límite máximo de memoria dura de un contenedor del grupo

  • TotalCpuLimit — Establezca un límite máximo de CPU para el grupo de contenedores. Todos los contenedores del grupo comparten los recursos de CPU asignados. Si estableces límites de contenedores individuales, el límite total de CPU debe ser:

    • igual o superior a la suma de todos los límites de CPU de los contenedores. Como práctica recomendada, considere configurar este valor para que duplique la suma de los límites de CPU del contenedor.

Escenario de ejemplo

Supongamos que estamos definiendo un grupo de contenedores de réplicas con los tres contenedores siguientes:

  • El contenedor A es nuestro contenedor de réplica esencial. Ejecuta los procesos del servidor del juego y el Amazon GameLift Agent. Estimamos los requisitos de recursos para un servidor de juegos en 512 MiB y 1024 CPU. Planeamos que el contenedor ejecute 10 procesos de servidor. Como en este contenedor se ejecuta nuestro software más crítico, hemos establecido una reserva de memoria flexible de 6144 MiB sin límite de memoria dura ni límite de reserva de CPU.

  • El contenedor B ejecuta software de soporte con requisitos de recursos estimados en 1024 MiB y 1536 CPU. Hemos establecido un límite de reserva de memoria flexible de 1024 MiB, un límite de memoria dura de 2048 MiB y un límite de reserva de CPU de 1024 CPU.

  • El contenedor C ejecuta utilidades de registro no críticas y otras utilidades de monitoreo. Hemos establecido un límite de memoria dura de 512 MiB y un límite de reserva de CPU de 512 CPU.

Con esta información, establecemos los siguientes límites totales para el grupo de contenedores:

  • Límite total de memoria: 7680 MiB. Este valor supera (1) la suma de los límites de memoria blanda (6144+1024 MiB) y (2) el límite máximo de memoria dura (1024 MiB).

  • Límite total de CPU: 13312 CPU. Este valor supera la suma del límite de CPU (1024+512 CPU).

Designe los contenedores esenciales

Para cada recipiente, dedíquelo como esencial o no esencial. Todos los grupos de contenedores deben tener al menos un contenedor esencial. El contenedor esencial realiza el trabajo fundamental del grupo de contenedores, como alojar los servidores de juegos. Se espera que el contenedor esencial esté siempre en funcionamiento. Si se produce un error, se reinicia todo el grupo de contenedores.

  • El grupo de réplicas de contenedores de su flota puede tener exactamente un contenedor esencial. Este contenedor ejecuta el Amazon GameLift Agent y los procesos que gestiona el servidor del juego.

  • Si tu flota tiene un grupo de contenedores demoníaco, puedes designar varios contenedores esenciales. Haga que un contenedor daemon sea imprescindible si quiere que un fallo en un contenedor provoque el reinicio del grupo de contenedores.

Defina la ContainerDefinition propiedad Essential en verdadero o falso para cada contenedor.

Configure las conexiones de red

Puede establecer el acceso a la red para permitir que el tráfico externo se conecte a cualquier contenedor de una flota de contenedores. Por ejemplo, debes establecer conexiones de red con el contenedor que ejecuta los procesos del servidor de juegos para que los clientes del juego puedan unirse y jugar a tu juego. Los clientes de juegos se conectan a los servidores de juegos mediante puertos y direcciones IP.

En una flota de contenedores, la conexión entre un cliente y un servidor no es directa. Internamente, un proceso de un contenedor escucha en un puerto de contenedores. Externamente, el tráfico entrante se conecta a una instancia de flota mediante un puerto de conexión. Amazon GameLift mantiene las asignaciones entre los puertos de contenedores internos y los puertos de conexión externos para que el tráfico entrante se dirija al proceso correcto de la instancia.

Amazon GameLift proporciona un nivel adicional de control para tus conexiones de red. Cada flota de contenedores tiene una configuración de permisos de entrada, que te permite controlar el acceso a cada puerto de conexión externo. No puedes cambiar la configuración de los puertos de una flota existente, pero puedes permitir o restringir el acceso según sea necesario ajustando los permisos de entrada. Por ejemplo, puedes eliminar los permisos de todos los puertos de conexión para impedir el acceso a los contenedores de la flota.

Los puertos de red permiten que el tráfico externo se conecte a los procesos que se ejecutan en una flota de contenedores. Los permisos de entrada de EC2 permiten que el tráfico acceda a los puertos de conexión, que se abren en cada instancia de la flota. Los puertos de conexión se asignan internamente a los puertos de contenedores, que se asignan a procesos individuales.
Establezca los rangos de puertos de los contenedores

Configure una definición de contenedor con suficientes puertos de contenedor para cualquier proceso que necesite acceso externo. Algunos contenedores no necesitarán ningún puerto. Otros deben tener puertos suficientes para asignar uno a cada proceso que lo necesite.

El grupo de contenedores de réplicas esencial, en el que se ejecutan los servidores de juegos, necesita un puerto para cada proceso de servidor de juegos que se ejecute simultáneamente (tal y como está configurado en la flotaRuntimeConfiguration). El proceso del servidor del juego escucha en el puerto asignado y lo informa a Amazon GameLift.

Cuando crees una definición de grupo de contenedores, define un rango de puertos para cada contenedor que necesite acceso a la red (consulta ContainerDefinitionInput: PortConfiguration). Asegúrese de que el rango sea lo suficientemente grande como para asignar un puerto a cada proceso que lo necesite. Los procesos deben tener asignados números de puerto en la configuración de puertos del contenedor.

Establezca los rangos de puertos de conexión

Configure su flota de contenedores con un conjunto de puertos de conexión. Los puertos de conexión proporcionan acceso externo a las instancias de la flota en las que se utilizan sus contenedores. Amazon GameLift asigna los puertos de conexión y los asigna a los puertos de contenedores según sea necesario.

Al crear una flota de contenedores, defina un rango de puertos de conexión (consulte ContainerGroupsConfiguration: ConnectionPortRange). Asegúrese de que el rango tenga suficientes puertos para asignarlos a todos los puertos de contenedores de una instancia de flota. Para calcular los puertos de conexión mínimos necesarios, usa la siguiente fórmula:

[Total number of container ports defined for containers in the replica container group] * [Number of replica container groups per instance] + [Total number of container ports defined for containers in the daemon container group]

Como práctica recomendada, duplique el número mínimo de puertos de conexión.

nota

La cantidad de puertos de conexión puede limitar potencialmente la cantidad de grupos de contenedores de réplicas por instancia. Si una flota solo tiene puertos de conexión suficientes para un grupo de contenedores de réplicas por instancia, Amazon GameLift implementará solo un grupo de contenedores de réplicas, incluso si las instancias tienen suficiente potencia de cómputo para varios grupos de contenedores de réplicas.

Configure los permisos de entrada

Los permisos de entrada controlan el acceso externo a una flota de contenedores especificando qué puertos de conexión se deben abrir para el tráfico entrante. Puedes usar esta configuración para activar y desactivar el acceso a la red de una flota según sea necesario.

Al crear una flota de contenedores, defina un conjunto de permisos de entrada (consulte: CreateFleet EC2). InboundPermissions Defina las propiedades de los puertos de permisos de entrada para incluir algunos o todos los valores de la configuración del puerto de conexión de la flota. Para cambiar los permisos de entrada de una flota de contenedores existente, llama. UpdateFleetPortSettings

Escenario de ejemplo

Este ejemplo ilustra cómo configurar las tres propiedades de conexión de red.

  • El grupo de réplicas de contenedores de nuestra flota tiene 1 contenedor, que ejecuta los procesos del servidor del juego. La configuración del tiempo de ejecución indica al contenedor que ejecute 10 procesos simultáneos del servidor del juego.

    En la definición del grupo de contenedores de réplicas, establecemos el PortConfiguration parámetro para este contenedor de la siguiente manera:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 10, "ToPort": 20, "Protocol": "TCP"} ] }
  • Nuestra flota también tiene un grupo de contenedores daemon con 1 contenedor. Tiene 1 proceso que necesita acceso a la red. En la definición del grupo de contenedores daemon, configuramos el PortConfiguration parámetro para este contenedor de la siguiente manera:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 25, "ToPort": 25, "Protocol": "TCP"} ] }
  • Nuestra flota está configurada con 3 grupos de réplicas de contenedores por instancia de flota. Con esta información, podemos usar la fórmula para calcular el número de puertos de conexión que necesitamos:

    • Mínimo: 31 puertos [10 puertos de contenedores de réplicas * 3 grupos de contenedores de réplicas por instancia + 1 puerto de contenedor daemon]

    • Práctica recomendada: 62 puertos [puertos mínimo* 2]

    Al crear la flota de contenedores, configuramos el ConnectionPortRange parámetro de la ContainerGroupsConfiguration siguiente manera:

    "ConnectionPortRange": { "FromPort": 1010, "ToPort": 1071 }
  • Queremos permitir el acceso a todos los puertos de conexión disponibles. Al crear la flota de contenedores, configuramos el EC2InboundPermissions parámetro de la siguiente manera:

    "EC2InboundPermissions": [ {"FromPort": 1010, "ToPort": 1071, "IpRange": "10.24.34.0/23", "Protocol": "TCP"} ]

Configure los controles de estado de los contenedores

Un contenedor se reinicia automáticamente si sufre una falla en la terminal y deja de funcionar. Si el contenedor es esencial, se reinicia todo el grupo de contenedores.

Puede definir criterios personalizados adicionales para medir el estado del contenedor y utilizar una comprobación de estado para probar esos criterios. Para configurar una comprobación del estado de un contenedor, puede definirla en una imagen de contenedor de docker o en su definición de contenedor. Si configuras una comprobación de estado en la definición del contenedor, anulará cualquier configuración de la imagen del contenedor.

Defina las comprobaciones de estado opcionales en función del tipo de contenedor de la siguiente manera:

  • En el caso de un contenedor de réplica esencial, no configure las comprobaciones de estado. El GameLift agente de Amazon gestiona automáticamente los informes de estado de este contenedor.

  • En el caso de los contenedores de réplica no esenciales y de cualquier contenedor daemon, si lo desea, puede configurar los parámetros de comprobación de estado.

Defina las siguientes ContainerDefinition propiedades para la comprobación del estado de un contenedor:

  • Command— Proporcione un comando que compruebe algún aspecto del estado del contenedor. Usted decide qué criterios utilizar para medir la salud. El comando debe dar como resultado un valor de salida de 1 (en mal estado) o 0 (en buen estado).

  • StartPeriod— Especifique un retraso inicial antes de que los fallos en las comprobaciones de estado empiecen a contabilizarse. Este retraso da tiempo al contenedor para iniciar sus procesos.

  • Interval— Decida con qué frecuencia se va a ejecutar el comando de comprobación de estado. ¿Con qué rapidez desea detectar y resolver un fallo en un contenedor?

  • Timeout— Decida cuánto tiempo esperar para que se ejecute correctamente o no antes de volver a intentar ejecutar el comando de comprobación de estado. ¿Cuánto tiempo debe tardar en completarse el comando de comprobación de estado?

  • Retries— ¿Cuántas veces se debe volver a intentar el comando de verificación de estado antes de que se registre un error?

Establezca las dependencias de los contenedores

Dentro de cada grupo de contenedores, puede establecer las dependencias entre los contenedores en función del estado del contenedor. Una dependencia afecta al momento en que el contenedor dependiente puede iniciarse o cerrarse en función del estado de otro contenedor.

Un caso de uso clave de las dependencias es crear secuencias de inicio y cierre para el grupo de contenedores.

Por ejemplo, es posible que desee que el contenedor A comience primero y se complete correctamente antes de que se inicien los contenedores B y C. Para lograrlo, cree primero una dependencia para el contenedor B en el contenedor A, con la condición de que el contenedor A se complete correctamente. A continuación, cree una dependencia para el contenedor C en el contenedor A con la misma condición. Las secuencias de inicio se producen en orden inverso al de cierre.

Configure una flota de contenedores

Al crear una flota de contenedores, tenga en cuenta los siguientes puntos de decisión. La mayoría de estos puntos dependen de la arquitectura y configuración del contenedor.

Decida dónde quiere desplegar su flota

En general, querrás desplegar tus flotas geográficamente cerca de tus jugadores para minimizar la latencia. Puedes desplegar tu flota de contenedores en cualquier Each Región de AWS GameLift compatible con Amazon. Si quieres implementar el mismo servidor de juegos en ubicaciones geográficas adicionales, puedes añadir ubicaciones remotas a la flota, incluidas Regiones de AWS las Zonas Locales. En el caso de una flota con varias ubicaciones, puedes ajustar la capacidad de forma independiente en cada ubicación de la flota. Para obtener más información sobre las ubicaciones de flota compatibles, consulteUbicaciones GameLift de alojamiento de Amazon.

Elija un tipo y un tamaño de instancia para su flota

Amazon GameLift admite una amplia gama de tipos de instancias de Amazon EC2, todas las cuales están disponibles para su uso con una flota de contenedores. La disponibilidad y el precio del tipo de instancia varían según la ubicación. Puedes ver una lista de los tipos de instancias compatibles, filtrados por ubicación, en la GameLift consola de Amazon (en Recursos, instancias y cuotas de servicio).

Al elegir un tipo de instancia, ten en cuenta primero la familia de instancias. Las familias de instancias ofrecen varias combinaciones de capacidades de CPU, memoria, almacenamiento y red. Obtenga más información sobre las familias de instancias EC2. Dentro de cada familia, puede elegir entre una variedad de tamaños de instancia. Tenga en cuenta los siguientes aspectos al seleccionar un tamaño de instancia:

  • ¿Cuál es el tamaño mínimo de instancia que puede soportar tu carga de trabajo? Usa esta información para eliminar cualquier tipo de instancia que sea demasiado pequeña.

  • ¿Qué tamaños de tipos de instancias son adecuados para su arquitectura de contenedores? Lo ideal es elegir un tamaño que pueda alojar varias copias de su grupo de contenedores de réplicas con un mínimo de espacio desperdiciado.

  • ¿Qué granularidad de escalado tiene sentido para tu juego? Ampliar la capacidad de la flota implica añadir o eliminar instancias, y cada instancia representa la capacidad de albergar un número específico de sesiones de juego. Ten en cuenta la cantidad de capacidad que deseas añadir o eliminar con cada instancia. Si la demanda de los jugadores varía en miles de un minuto a otro, podría ser conveniente utilizar instancias muy grandes que puedan alojar cientos o miles de sesiones de juego. Por el contrario, es posible que prefieras un control de escalado más detallado con tipos de instancias más pequeñas.

  • ¿Hay ahorros de costos disponibles en función del tamaño? Es posible que el costo de algunos tipos de instancias varíe según la ubicación debido a la disponibilidad.

Optimice la configuración del tiempo de ejecución

La configuración del tiempo de ejecución de una flota es un conjunto de instrucciones sobre cómo ejecutar los procesos del servidor para el alojamiento de sesiones de juego. El GameLift agente de Amazon implementa estas instrucciones en cada grupo de contenedores de réplicas de la flota.

La configuración de tiempo de ejecución de una flota determina cuántos procesos de servidor se ejecutan simultáneamente en cada grupo de contenedores de réplicas. Esta configuración afecta a la forma en que calcula los límites de recursos de su grupo de contenedores y a la forma en que elige un tipo de instancia para su flota. Debe equilibrar estos tres elementos a la hora de diseñar su flota.

Para obtener más información sobre cómo utilizar las configuraciones de tiempo de ejecución, consulteAdministración de la forma en que Amazon GameLift lanza los servidores de juegos.

Establezca otros ajustes de flota opcionales

Puede utilizar las siguientes funciones opcionales al configurar una flota de contenedores:

  • Configura tus servidores de juegos para acceder a otros AWS recursos. Consulte Comunicación con otros recursos de AWS de sus flotas.

  • Evita que las sesiones de juego con jugadores activos finalicen prematuramente durante un evento a escala reducida.

  • Limita el número de sesiones de juego que una persona puede crear en la flota en un periodo de tiempo limitado.