Agente de contenedor de Amazon ECS
El agente de Amazon ECS es un proceso que se ejecuta en todas las instancias de contenedor que estén registradas en el clúster. Facilita la comunicación entre sus instancias de contenedor y Amazon ECS.
nota
En las instancias de contenedores de Linux, el contenedor de agente monta directorios de nivel superior como /lib
, /lib64
y /proc
. Esto es necesario para las características y funcionalidades de ECS, como los volúmenes de Amazon EBS, el modo de red awsvpc
, Amazon ECS Service Connect y FireLens para Amazon ECS.
Cada versión del agente de contenedor de Amazon ECS admite un conjunto de características diferente y proporciona correcciones de errores de versiones anteriores. Cuando sea posible, siempre recomendamos utilizar la versión más reciente del agente de contenedor de Amazon ECS. Para actualizar el agente de contenedor a la versión más reciente, consulte Actualización del agente de contenedor de Amazon ECS.
Para ver las características y mejoras incluidas en cada versión del agente, consulte https://github.com/aws/amazon-ecs-agent/releases
importante
La versión mínima de Docker para obtener métricas fiables es la versión de Docker v20.10.13
y versiones posteriores, que se incluyen en la AMI 20220607
optimizada para Amazon ECS y versiones posteriores.
Los agentes de Amazon ECS versión 1.20.0
y posteriores ya no admiten versiones de Docker anteriores a la 1.9.0
.
Ciclo de vida
Cuando el agente de contenedor de Amazon ECS registra una instancia de Amazon EC2 en el clúster, la instancia de Amazon EC2 notifica su estado como ACTIVE
y su estado de conexión del agente como TRUE
. Esta instancia de contenedor puede aceptar solicitudes de ejecución de tareas.
Si detiene (no termina) una instancia de contenedor, el estado permanece ACTIVE
, pero el estado de conexión del agente cambia a FALSE
en pocos minutos. Cualquier tarea que se estuviera ejecutando en la instancia de contenedor se para. Si vuelve a comenzar la instancia de contenedor, el agente de contenedor vuelve a conectarse al servicio de Amazon ECS, y usted podrá volver a ejecutar tareas en la instancia.
importante
Si detiene e inicia una instancia de contenedor o reinicia esa instancia, algunas versiones más antiguas del agente de contenedor de Amazon ECS vuelven a registrar la instancia sin anular el registro del ID de la instancia de contenedor original. En este caso, Amazon ECS muestra más instancias de contenedor en el clúster de las que tiene en realidad. (Si dispone de ID de instancias de contenedor duplicados para el mismo ID de instancia de Amazon EC2, puede anular con seguridad el registro de los duplicados que se muestran como ACTIVE
con un estado de conexión de agente FALSE
). Este problema se corrige en la versión actual del agente de contenedor de Amazon ECS. Para obtener más información sobre cómo actualizar a la versión actual, consulte Actualización del agente de contenedor de Amazon ECS.
Si cambia el estado de una instancia de contenedor a DRAINING
, las nuevas tareas no se colocan en la instancia de contenedor. Cualquier tarea de servicio que se ejecute en la instancia de contenedor se elimina, si es posible, para que pueda llevar a cabo las actualizaciones del sistema. Para obtener más información, consulte Drenaje de instancias de contenedor de Amazon ECS.
Si cancela el registro o termina una instancia de contenedor, el estado de la instancia de contenedor cambia a INACTIVE
de inmediato y la instancia de contenedor ya no se notifica cuando se enumeran las instancias de contenedor. No obstante, puede seguir describiendo la instancia de contenedor para una hora tras la terminación. Después de una hora, la descripción de la instancia ya no está disponible.
importante
Puede drenar las instancias manualmente o crear un enlace del ciclo de vida del grupo de Auto Scaling para establecer el estado de la instancia en DRAINING
. Para obtener más información sobre los enlaces de ciclo de vida de Auto Scaling, consulte Enlaces de ciclo de vida de Amazon EC2 Auto Scaling.
AMI optimizada para Amazon ECS
Las variantes de Linux de la AMI optimizada para Amazon ECS utilizan la AMI de Amazon Linux 2 como base. El nombre de AMI de origen de Amazon Linux 2 para cada variante se puede recuperar consultando la API de Systems Manager Parameter Store. Para obtener más información, consulte Recuperación de metadatos de las AMI de Linux optimizadas para Amazon ECS. Cuando lanza las instancias de contenedor desde la AMI de Amazon Linux 2 optimizada para Amazon ECS más reciente, recibirá la versión actual del agente de contenedor. Para lanzar una instancia de contenedor con la AMI de Amazon Linux 2 optimizada para Amazon ECS, consulte Lanzamiento de una instancia de contenedor de Linux de Amazon ECS.
Información adicional
En las páginas siguientes se proporciona información adicional acerca de los cambios:
-
El código de origen de la aplicación
ecs-init
y los scripts y la configuración para empaquetar el agente ahora forman parte del repositorio de agentes. Para ver versiones anteriores deecs-init
y paquetes, consulte el registro de cambios de Amazon ecs-initen GitHub. -
Notas de la versión de Docker Engine
en la documentación de Docker -
Documentación de controlador NVIDIA
en la documentación de NVIDIA
Parámetros de configuración del registro del agente de contenedor de Amazon ECS
El agente de contenedor de Amazon ECS almacena registros en las instancias de contenedor.
Para el agente de contenedor versión 1.36.0 y posterior, los registros se encuentran de forma predeterminada en /var/log/ecs/ecs-agent.log
en instancias de Linux y en C:\ProgramData\Amazon\ECS\log\ecs-agent.log
en instancias de Windows.
Para el agente de contenedor versión 1.35.0 y anterior, los registros se encuentran de forma predeterminada en /var/log/ecs/ecs-agent.log.
en instancias de Linux y en timestamp
C:\ProgramData\Amazon\ECS\log\ecs-agent.log.
en instancias de Windows.timestamp
De forma predeterminada, los registros de agente rotan cada hora y se almacena un máximo de 24 registros.
A continuación se muestran las variables de configuración del agente de contenedor que se pueden utilizar para cambiar el comportamiento de registro de agente predeterminado. Para obtener más información, consulte Configuración del agente de contenedor de Amazon ECS.
ECS_LOGFILE
-
Valores de ejemplo:
/ecs-agent.log
Valor predeterminado en Linux: Null
Valor predeterminado en Windows: Null
La ubicación en la que se deben escribir los registros del agente. Si está ejecutando el agente a través de
ecs-init
, que es el método predeterminado cuando se utiliza la AMI optimizada para Amazon ECS, la ruta dentro del contenedor es/log
, yecs-init
lo monta en el directorio/var/log/ecs/
del host. ECS_LOGLEVEL
-
Valores de muestra:
crit
,error
,warn
,info
ydebug
Valor predeterminado en Linux:
info
Valor predeterminado en Windows:
info
El nivel de detalle con el que se va a registrar.
ECS_LOGLEVEL_ON_INSTANCE
-
Valores de muestra:
none
,crit
,error
,warn
,info
,debug
Valor predeterminado en Linux:
none
, siECS_LOG_DRIVER
se establece explícitamente en un valor no vacío; de lo contrario, el mismo valor queECS_LOGLEVEL
Valor predeterminado en Windows:
none
, siECS_LOG_DRIVER
se establece explícitamente en un valor no vacío; de lo contrario, el mismo valor queECS_LOGLEVEL
Se puede utilizar para anular
ECS_LOGLEVEL
y establecer un nivel de detalle que debe registrarse en el archivo de registro en la instancia, separado del nivel que se registra en el controlador de registro. Si se establece explícitamente un controlador de registro, los registros en la instancia se desactivan de forma predeterminada. Se pueden volver a activar con esta variable. ECS_LOG_DRIVER
-
Valores de ejemplo:
awslogs
,fluentd
,gelf
,json-file
,journald
,logentries
syslog
,splunk
Valor predeterminado en Linux:
json-file
Valor predeterminado en Windows: No aplicable
Determina el controlador de registro que utiliza el contenedor del agente.
ECS_LOG_ROLLOVER_TYPE
-
Valores de ejemplo:
size
yhourly
Valor predeterminado en Linux:
hourly
Valor predeterminado en Windows:
hourly
Determina si el archivo de registro del agente del contenedor se sustituye en función de la hora o del tamaño. De forma predeterminada, el archivo de registro del agente se sustituye cada hora.
ECS_LOG_OUTPUT_FORMAT
-
Valores de ejemplo:
logfmt
yjson
Valor predeterminado en Linux:
logfmt
Valor predeterminado en Windows:
logfmt
Determina el formato de salida del registro. Cuando se utiliza el formato
json
, cada línea del registro es un mapa JSON estructurado. ECS_LOG_MAX_FILE_SIZE_MB
-
Valores de ejemplo:
10
Valor predeterminado en Linux:
10
Valor predeterminado en Windows:
10
Cuando la variable
ECS_LOG_ROLLOVER_TYPE
se establece ensize
, determina el tamaño máximo (en MB) del archivo de registro antes de que se sustituya. Si el tipo de sustitución está establecido enhourly
, esta variable no se tiene en cuenta. ECS_LOG_MAX_ROLL_COUNT
-
Valores de ejemplo:
24
Valor predeterminado en Linux:
24
Valor predeterminado en Windows:
24
Determina el número de archivos de registro sustituidos que deben conservarse. Los archivos de registro más antiguos se eliminan cuando se alcanza este límite.
Para el agente de contenedor versión 1.36.0 y posterior, a continuación se ofrece un archivo de registro de ejemplo cuando se utiliza el formato logfmt
.
level=info time=2019-12-12T23:43:29Z msg="Loading configuration" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-agent:latest" module=parse.go
level=info time=2019-12-12T23:43:29Z msg="Image excluded from cleanup: amazon/amazon-ecs-pause:0.1.0" module=parse.go
level=info time=2019-12-12T23:43:29Z msg="Amazon ECS agent Version: 1.36.0, Commit: ca640387" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Creating root ecs cgroup: /ecs" module=init_linux.go
level=info time=2019-12-12T23:43:29Z msg="Creating cgroup /ecs" module=cgroup_controller_linux.go
level=info time=2019-12-12T23:43:29Z msg="Loading state!" module=statemanager.go
level=info time=2019-12-12T23:43:29Z msg="Event stream ContainerChange start listening..." module=eventstream.go
level=info time=2019-12-12T23:43:29Z msg="Restored cluster 'auto-robc'" module=agent.go
level=info time=2019-12-12T23:43:29Z msg="Restored from checkpoint file. I am running as 'arn:aws:ecs:us-west-2:0123456789:container-instance/auto-robc/3330a8a91d15464ea30662d5840164cd' in cluster 'auto-robc'" module=agent.go
A continuación se ofrece un archivo de registro de ejemplo cuando se utiliza el formato JSON.
{"time": "2019-11-07T22:52:02Z", "level": "info", "msg": "Starting Amazon Elastic Container Service Agent", "module": "engine.go"}
Para el agente de contenedor versión 1.35.0 y anterior, a continuación se muestra el formato del archivo de registro.
2016-08-15T15:54:41Z [INFO] Starting Agent: Amazon ECS Agent - v1.12.0 (895f3c1)
2016-08-15T15:54:41Z [INFO] Loading configuration
2016-08-15T15:54:41Z [WARN] Invalid value for task cleanup duration, will be overridden to 3h0m0s, parsed value 0, minimum threshold 1m0s
2016-08-15T15:54:41Z [INFO] Checkpointing is enabled. Attempting to load state
2016-08-15T15:54:41Z [INFO] Loading state! module="statemanager"
2016-08-15T15:54:41Z [INFO] Detected Docker versions [1.17 1.18 1.19 1.20 1.21 1.22]
2016-08-15T15:54:41Z [INFO] Registering Instance with ECS
2016-08-15T15:54:41Z [INFO] Registered! module="api client"