Personalice una flota de Amazon GameLift Servers contenedores - Amazon GameLift Servers

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.

Personalice una flota de Amazon GameLift Servers contenedores

En los temas de esta sección se describen algunas de las funciones opcionales de los contenedores Amazon GameLift Servers gestionados. Puede optar por utilizar cualquiera de estas funciones o todas ellas.

Establece límites de recursos

Para cada grupo de contenedores, puede determinar cuánta memoria y potencia de cálculo necesita el grupo de contenedores para ejecutar su software. Amazon GameLift Serversse basa en esta información para administrar los recursos en todo el grupo de contenedores. También utiliza esta información para calcular cuántos grupos de contenedores de servidores de juegos puede contener una imagen de flota. También puedes establecer límites para los contenedores individuales.

Puede establecer un límite máximo de memoria y potencia de cálculo para un grupo de contenedores. De forma predeterminada, todos los contenedores del grupo comparten estos recursos. Puede personalizar aún más la administración de recursos estableciendo límites para los contenedores individuales.

Establezca límites opcionales para contenedores individuales

Establecer límites de recursos específicos para cada contenedor le 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.

  • MemoryHardLimitMebibytes— Establezca un límite máximo de memoria para el contenedor. Si el contenedor supera este límite, se reinicia.

  • Vcpulímite: reserve una cantidad mínima de recursos de vCPU para 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

Si estableces límites para contenedores individuales, es posible que tengas que modificar la cantidad de recursos de memoria y vCPU que necesita el grupo de contenedores. El objetivo es asignar recursos suficientes para optimizar el rendimiento del servidor de juegos. Amazon GameLift Serversutiliza estos límites para calcular cómo empaquetar los grupos de contenedores de servidores de juegos en una instancia de flota. También los usarás al elegir un tipo de instancia para una flota de contenedores.

Calcule la memoria total y la vCPU necesarias para un grupo de contenedores. Considere lo siguiente:

  • ¿Cuáles son todos los procesos que se ejecutan en todos los contenedores del grupo de contenedores? Sume los recursos necesarios para estos procesos. Tome nota de los límites específicos de los contenedores.

  • ¿Cuántos procesos simultáneos del servidor de juegos planeas ejecutar en cada grupo de contenedores? Esto lo determinas en la imagen del contenedor del servidor de juegos.

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

  • TotalMemoryLimitMebibytes— Establezca un límite máximo de memoria para el grupo de contenedores. Todos los contenedores del grupo comparten la memoria asignada. Si establece límites de contenedores individuales, el límite de memoria total debe ser igual o superior al límite máximo de memoria específico del contenedor.

  • TotalVcpuLimit— Establezca un límite máximo de vCPU 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 específicos del contenedor. 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 servidores de juegos con los tres contenedores siguientes:

  • El contenedor A es nuestro contenedor para servidores de juegos. Estimamos los requisitos de recursos para un servidor de juegos en 512 MiB y 1024 CPU. Planeamos que el contenedor ejecute un proceso de servidor. Como este contenedor ejecuta nuestro software más crítico, no establecemos ningún límite de memoria ni límite de reserva de vCPU.

  • El contenedor B runs es un contenedor de soporte con requisitos de recursos estimados en 1024 MiB y 1536 CPU. Hemos establecido un límite de memoria de 2048 MiB y un límite de reserva de CPU de 1024 CPU.

  • El contenedor C es otro contenedor de soporte. 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 el límite de memoria más alto (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 un grupo de contenedores por instancia, designa cada contenedor como esencial o no esencial. Los grupos de contenedores por instancia deben tener al menos un contenedor de soporte esencial. El contenedor esencial realiza el trabajo fundamental del grupo de contenedores. Se espera que el contenedor esencial esté siempre funcionando. Si se produce un error, se reinicia todo el grupo de contenedores.

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

Configure las conexiones de red

Puede personalizar 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 Serversmantiene las asignaciones entre los puertos 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 Serversproporciona un nivel adicional de control para las conexiones de red. Cada flota de contenedores tiene una configuración de permisos de entrada, que le permite controlar el acceso a cada puerto de conexión externo. Por ejemplo, puedes eliminar los permisos de todos los puertos de conexión para impedir el acceso a los contenedores de la flota.

Puedes actualizar los permisos de entrada, los puertos de conexión y los puertos de contenedores de una flota.

Establezca los rangos de puertos de contenedores

Configure los rangos de puertos de contenedores como parte de la definición de cada contenedor. Este es un parámetro obligatorio para la definición de un grupo de contenedores. Debe configurar suficientes puertos para alojar todos los procesos que se ejecutan simultáneamente y que necesitan acceso externo. Algunos contenedores no necesitarán ningún puerto.

El contenedor del servidor de juegos, en el que se ejecutan los servidores de juegos, necesita un puerto para cada proceso del servidor de juegos que se ejecute simultáneamente. El proceso del servidor de juegos escucha en el puerto asignado y envía un informe al respecto. Amazon GameLift Servers

Configura 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 Serversasigna los puertos de conexión y los asigna a los puertos de contenedores según sea necesario.

De forma predeterminada, Amazon GameLift Servers calcula el número de puertos necesarios para todos los grupos de contenedores y establece un rango de puertos para acomodarlos. Le recomendamos encarecidamente que utilice valores Amazon GameLift Servers calculados, que se actualizan al implementar actualizaciones en la definición de un grupo de contenedores. Si necesita personalizar los rangos de puertos de conexión, utilice las siguientes instrucciones.

Al crear una flota de contenedores, defina un rango de puertos de conexión (consulte ContainerFleet: InstanceConnectionPortRange). Asegúrese de que el rango tenga suficientes puertos para asignarlos a todos los puertos de contenedores definidos para todos los contenedores de ambos grupos de contenedores de la 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 game server container group] * [Number of game server container groups per instance] + [Total number of container ports defined for containers in the per-instance container group]

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

nota

El número de puertos de conexión puede limitar potencialmente el número de grupos de contenedores de servidores de juegos por instancia. Si una flota solo tiene puertos de conexión suficientes para un grupo de contenedores de servidores de juegos por instancia, solo Amazon GameLift Servers desplegará un grupo de contenedores de servidores de juegos, incluso si las instancias tienen suficiente potencia de cálculo para varios grupos de contenedores de servidores de juegos.

Configura 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.

De forma predeterminada, Amazon GameLift Servers calcula el número de puertos necesarios para todos los grupos de contenedores y establece un rango de puertos para acomodarlos. Le recomendamos encarecidamente que utilice valores Amazon GameLift Servers calculados, que se actualizan al implementar actualizaciones en la definición de un grupo de contenedores. Si necesita personalizar los rangos de puertos de conexión, utilice las siguientes instrucciones.

Al crear una flota de contenedores, defina un conjunto de permisos de entrada (consulte ContainerFleet: InstanceInboundPermisssions). Los puertos de permisos de entrada deben coincidir con los rangos de puertos de conexión de la flota.

Escenario de ejemplo

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

  • El grupo de contenedores de servidores de juegos de nuestra flota tiene 1 contenedor, que ejecuta 1 proceso de servidor de juegos.

    En la definición del grupo de contenedores de servidores de juegos, 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 por instancia con 1 contenedor. Tiene 1 proceso que necesita acceso a la red. En la definición del contenedor por instancia, establecemos el PortConfiguration parámetro para este contenedor de la siguiente manera:

    "PortConfiguration": { "ContainerPortRanges": [ { "FromPort": 25, "ToPort": 25, "Protocol": "TCP"} ] }
  • Nuestra flota está configurada con 20 grupos de contenedores de servidores de juegos 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: 21 puertos [1 puerto contenedor de servidor de juegos * 20 grupos de contenedores de servidores de juegos por instancia + 1 puerto contenedor por instancia]

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

    Al crear la flota de contenedores, configuramos el ConnectionPortRange parámetro de la 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 InstanceInboundPermissions parámetro de la siguiente manera:

    "InstanceInboundPermissions": [ {"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 un contenedor se considera esencial, solicita a todo el grupo de contenedores que se reinicie.

Todos los contenedores de servidores de juegos se consideran esenciales automáticamente. Los contenedores Support pueden considerarse esenciales, pero deben tener un mecanismo para informar sobre el estado de salud. También puede establecer controles de estado para los contenedores de apoyo no esenciales.

Puede definir criterios personalizados adicionales para medir el estado de los contenedores y utilizar una comprobación de estado para comprobar esos criterios. Para configurar una comprobación del estado de un contenedor, puedes definirla en una imagen de contenedor de Docker o en tu 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 siguientes SupportContainerDefinition propiedades para una comprobación del estado del 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. Puede desplegar su flota de contenedores en cualquier Each Región de AWS que lo Amazon GameLift Servers soporte. 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, consulteAmazon GameLift Serversubicaciones de servicio.

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

Amazon GameLift Serversadmite una amplia gama de tipos de EC2 instancias de Amazon, 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 Amazon GameLift Servers consola (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. Obtén más información sobre las familias de EC2 instancias. Dentro de cada familia, puede elegir entre una variedad de tamaños de instancias. 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 del grupo de contenedores de servidores de juegos 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 capacidad que quieres 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.

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 Comuníquese con otros AWS recursos 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.