Saltar al contenido

¿Por qué mi servicio Amazon ECS no es estable?

7 minutos de lectura
0

Mi servicio Amazon Elastic Container Service (Amazon ECS) se reinicia periódicamente. Quiero que mi servicio Amazon ECS sea estable.

Descripción corta

Es posible que tu servicio Amazon ECS no sea estable por uno de los siguientes motivos:

  • Errores en las comprobaciones de estado del contenedor.
  • Errores en las comprobaciones de estado de Elastic Load Balancing (ELB).
  • Una tarea de Amazon ECS se cierra con códigos de salida distintos de cero.
  • Una instancia de contenedor no cumple los requisitos de tareas de Amazon ECS.
  • Una instancia de contenedor termina inesperadamente.
  • Las tareas de Amazon ECS del servicio no se inician.

Resolución

Utiliza los eventos de Amazon ECS en la consola de Amazon ECS para comprobar por qué el servicio no es estable.

Errores en las comprobaciones de estado del contenedor

Antes de implementar la aplicación en Amazon ECS, realiza comprobaciones de estado para asegurarte de que el contenedor funciona según lo previsto. Si tu servicio Amazon ECS no pasa de repente las comprobaciones de estado de los contenedores, comprueba los registros de la aplicación. Si tu aplicación usa el controlador awslogs, comprueba los registros en Amazon CloudWatch.

Nota: Los parámetros de comprobación de estado que especificas en una definición de contenedor anulan las comprobaciones de estado de Docker que existen en la imagen del contenedor.

Errores en las comprobaciones de estado de ELB

Los equilibradores de carga ejecutan periódicamente comprobaciones de estado de los contenedores en cada servidor para determinar cuáles son los servidores a los que es seguro dirigir el tráfico. Cuando un servicio de Amazon ECS falla debido a las comprobaciones de estado de ELB, es posible que haya un problema de comunicación entre el equilibrador de carga y el servicio.

Para comprobar si has configurado correctamente los equilibradores de carga y el servicio Amazon ECS, lleva a cabo las siguientes acciones:

  • Confirma que el grupo de seguridad del contenedor permita el tráfico desde el equilibrador de carga.

  • Ejecuta el siguiente comando en el contenedor para asegurarte de que la aplicación escucha el puerto correcto:

    netstat -tulpn | grep LISTEN
  • Asegúrate de que la ruta de comprobación de estado sea correcta.

  • Comprueba si hay errores en los registros de la aplicación.

  • Ejecuta un comando curl para la ruta de comprobación de estado en Amazon Elastic Compute Cloud (Amazon EC2). O bien, activa ECS exec en AWS Fargate y ejecuta un comando curl parar llevar a cabo la comprobación de estado del contenedor y confirmar el código de respuesta.

  • Supervisa las métricas de CPU y memoria del servicio, ya que un uso elevado de la CPU puede provocar que la aplicación no responda y las comprobaciones de estado de ELB fallen.

  • Establece el periodo de gracia mínimo de comprobación de estado entre 1,5 y 2,0 veces más largo que el tiempo que tarda la aplicación en alcanzar el estado ACTIVO.

Una tarea de Amazon ECS se cierra con un código de salida distinto de cero

Si hay un problema en un contenedor, las tareas de Amazon ECS dentro del servicio se cierran con un código de salida distinto de cero. Todas las tareas deben tener al menos un contenedor esencial. Si el contenedor esencial se cierra por cualquier motivo, se produce un error en toda la tarea y el servicio Amazon ECS se vuelve inestable.

Los siguientes códigos de salida son motivos por los que la tarea de Amazon ECS podría fallar:

  • Aparece el código de salida 1 cuando hay un error en la aplicación. Para obtener más información sobre el error, consulta los registros de la aplicación.
  • Aparece el código de salida 137 cuando se obligó a la tarea a salir (SIGKILL) del contenedor o cuando se produjo un error de falta de memoria (OOM). Para comprobar si tienes un problema de OOM, revisa las métricas de CloudWatch.
  • Aparece el código de salida 139 cuando hay un error de segmentación. Esto suele ocurrir cuando la aplicación intenta acceder a memoria que no está disponible, o cuando hay una variable de entorno o no configurada que no es válida.
  • Aparece el código de salida 255 cuando el comando ENTRYPOINT CMD del contenedor falla debido a un error. Para confirmar que esta es la causa, revisa las métricas de CloudWatch.

Nota: Puedes usar la API DescribeTasks para ver los detalles de una tarea detenida. Sin embargo, los detalles de la tarea detenida aparecen en los resultados solo durante 1 hora.

Una instancia de contenedor no cumple los requisitos de tareas de Amazon ECS

Para obtener más información sobre cómo cambiar los requisitos de los contenedores, consulta ¿Cómo soluciono el error «ninguna instancia de contenedor cumplió con todos sus requisitos» en Amazon ECS?

Una instancia de contenedor termina inesperadamente

Si utilizas un proveedor de capacidad en tu clúster de Amazon ECS sin una terminación administrada, el proveedor de capacidad podría terminar las instancias que tienen tareas en ejecución. Esto ocurre cuando hay una acción de desescalamiento horizontal y el servicio AWS ECS se vuelve inestable. Activa la protección de terminación administrada para que el proveedor de capacidad no termine las instancias de contenedor que tienen tareas en ejecución.

Para activar la protección de terminación administrada, debes activar la protección de desescalamiento horizontal de instancias para el grupo de escalamiento automático.

Para activar la protección de desescalamiento horizontal, sigue estos pasos:

  1. Abre la consola de Amazon EC2.
  2. En el panel de navegación, elige Grupos de escalamiento automático y, a continuación, selecciona tu grupo de escalamiento automático.
  3. En la pestaña Detalles, en Configuraciones avanzadas, elige Editar.
  4. En Protección de desescalamiento horizontal de instancias, selecciona Habilitar la protección de desescalamiento horizontal de instancias.
  5. Selecciona Actualizar.

Para activar la protección de terminación administrada, sigue estos pasos:

  1. Abre la consola de Amazon ECS.
  2. En el panel de navegación, selecciona Clústeres.
  3. En la página Clústeres, selecciona tu clúster.
  4. En la página Cluster: nombre, elige Infraestructura y, a continuación, selecciona Actualizar.
  5. En la página Crear proveedores de capacidad, en Grupo de escalamiento automático, en Políticas de escalamiento, configura las siguientes opciones:
    Selecciona Activar escalamiento administrado.
    Selecciona Activar protección de escalamiento.
  6. Selecciona Actualizar.

Nota: Asegúrate de que las demás herramientas que utilices no eliminen la etiqueta AmazonECSManaged del grupo de escalamiento automático. Cuando una herramienta elimina la etiqueta, Amazon ECS no puede administrar el escalamiento.

Las tareas de Amazon ECS dentro del servicio no se inician

Al crear o actualizar un servicio, es posible que el servicio no sea estable porque la tarea de Amazon ECS no puede extraer la imagen.

Para resolver este problema, consulta los siguientes artículos de AWS Knowledge Service:

Información relacionada

¿Cómo puedo solucionar los errores de comprobación de estado del contenedor para las tareas de Amazon ECS?

¿Cómo soluciono el error de configuración de protección de terminación administrada para el proveedor de capacidad en Amazon ECS?

¿Por qué se ha detenido mi tarea de Amazon ECS?

Control de instancias en las que Amazon ECS termina

Metadatos de eventos de servicio de AWS

OFICIAL DE AWSActualizada hace 2 años