Definiciones de tareas de daemon
La definición de una tarea de daemon es el esquema de su daemon. Los daemons administrados de Amazon ECS utilizan un recurso de definición de tareas de daemon especificado, distinto de las definiciones de tareas estándar de Amazon ECS. Registra una definición de tarea de daemon para especificar la imagen del contenedor, los requisitos de recursos y la configuración del daemon.
Creación de una definición de tarea de daemon
Puede crear una definición de tarea de daemon mediante la Consola de administración de AWS o la AWS CLI.
Uso de Consola de administración de AWS
-
Abra la consola de Amazon ECS. En el panel de navegación izquierdo, elija Definiciones de tareas de daemon.
-
Elija Crear nueva definición de tarea de daemon.
-
En Familia de definiciones de tareas de daemon, introduzca un nombre único. El nombre puede contener hasta 255 caracteres alfanuméricos, guiones y guiones bajos.
-
(Opcional) En Rol de tarea, agregue un rol de IAM que conceda permisos a las aplicaciones que se ponen en marcha en los contenedores. Deje este campo en blanco si los contenedores no llaman a las API de AWS.
-
(Opcional) En Rol de ejecución de tareas, seleccione
ecsTaskExecutionRole. Amazon ECS necesita este rol para extraer imágenes de contenedores y publicar registros. -
(Opcional) En Tamaño de la tarea, especifique la CPU y memoria que se debe reservar para el daemon. Por ejemplo,
0.25 vCPUy512 MBde memoria. -
Configure los detalles del contenedor:
-
Nombre del contenedor: ingrese un nombre para el contenedor. El nombre puede contener hasta 255 caracteres alfanuméricos, guiones y guiones bajos.
-
Contenedor esencial: seleccione Sí. Cada definición de tareas de daemon debe contener al menos un contenedor esencial. Si se produce un error en un contenedor esencial, Amazon ECS detiene toda la tarea.
-
URI de la imagen: introduzca el URI de la imagen de Docker. Puede buscar imágenes de Amazon ECR o utilizar imágenes públicas de Docker Hub u otros registros.
-
-
(Opcional) Configure la asignación de recursos, la comprobación de estado, las variables de entorno, la recopilación de registros y las etiquetas según sea necesario.
-
Revise la configuración y elija Crear.
Uso de AWS CLI
Para registrar una definición de tarea de daemon, cree un archivo JSON y utilice el comando register-daemon-task-definition.
A continuación se muestra un ejemplo de un archivo JSON:
{ "family": "my-daemon-task", "containerDefinitions": [ { "name": "daemon-container", "image": "public.ecr.aws/docker/library/busybox:latest", "essential": true, "command": ["sh", "-c", "while true; do echo 'Daemon running'; sleep 30; done"], "memoryReservation": 512 } ] }
Ejecute el siguiente comando para registrar la definición de tarea de daemon:
aws ecs register-daemon-task-definition --cli-input-json file://daemon-taskdef.json
Parámetros de definición de tarea de daemon
Puede utilizar los siguientes parámetros al registrar una definición de tarea de daemon.
Parámetros requeridos
-
family: el apellido de la definición de la tarea. Esto agrupa varias revisiones de la misma definición de tarea de daemon. -
containerDefinitions: una matriz de objetosDaemonContainerDefinitionque describen los contenedores de la tarea de daemon.
Parámetros opcionales
-
cpu: unidades de CPU a nivel de tarea como cadena (por ejemplo,"256"). -
memory: memoria a nivel de tarea en MiB como cadena (por ejemplo,"512"). -
taskRoleArn: el ARN del rol de IAM que concede permisos a los contenedores de la tarea de daemon. -
executionRoleArn: el ARN del rol de IAM que el agente de contenedor de Amazon ECS utiliza para realizar llamadas a la API de AWS en su nombre (por ejemplo, extraer imágenes de Amazon ECR). -
volumes: una matriz de objetosDaemonVolume. Los volúmenes de daemon solo admiten montajes de vinculación conhostysourcePath. Las definiciones de tareas de Daemon no admiten Amazon EBS, Amazon EFS, FSx para Windows File Server, volúmenes de Docker ni almacenamiento efímero. -
tags: una matriz de pares clave-valor para etiquetar la definición de tarea de daemon. -
pidMode: controla el modo del espacio de nombres PID del daemon. -
ipcMode: controla el modo del espacio de nombres IPC del daemon.
Modo de red
Los daemons utilizan un modo de red daemon_bridge especial que Amazon ECS establece automáticamente. No puede especificar un modo de red en la definición de tarea de daemon. Todos los daemons de una instancia comparten un único espacio de nombres de red y se puede acceder a ellos de forma local mediante una dirección IP estática de puente de daemon (169.254.172.2 para IPv4 o fd00:ec2::172:2 para IPv6). Las tareas de la aplicación (que no son daemons) se pueden comunicar con los daemons en esta dirección sin necesidad de configurar la red adicional.
Como los daemons se ejecutan en un espacio de nombres de red independiente del de las tareas de aplicación, las tareas que no son de daemon no se tienen que preocupar de los conflictos de puertos con los daemons. Sin embargo, dado que todas las tareas de daemon comparten el mismo espacio de nombres, los daemons de la misma instancia no pueden vincularse al mismo puerto. Al implementar varios daemons, asegúrese de que cada daemon utilice un puerto único.
Capacidades con privilegios
En las instancias administradas de Amazon ECS, los daemons admiten capacidades de Linux privilegiadas para las operaciones a nivel de sistema. Los agentes de seguridad, las herramientas de supervisión de redes y los agentes de observabilidad a menudo necesitan acceso a nivel de núcleo para funcionar correctamente.
Puede conceder capacidades de dos maneras:
El modo con todos los privilegios otorga todas las capacidades de Linux al contenedor. Utilícelo cuando el agente necesite un amplio acceso al sistema:
{ "containerDefinitions": [{ "name": "security-daemon", "image": "my-security-agent:latest", "privileged": true }] }
Las capacidades individuales solo conceden los permisos que necesita el daemon siguiendo el principio de privilegio mínimo. Use el campo linuxParameters.capabilities para agregar capacidades individuales, como SYS_ADMIN, NET_ADMIN, SYS_PTRACE, BPF y PERFMON:
{ "containerDefinitions": [{ "name": "monitoring-daemon", "image": "my-monitoring-agent:latest", "linuxParameters": { "capabilities": { "add": ["NET_ADMIN", "SYS_PTRACE"] } } }] }
Uso compartido de espacios de nombres PID e IPC
En Amazon ECS Managed Instances, los daemons admiten el uso compartido de espacios de nombres PID e IPC para casos de uso como agentes de seguridad, herramientas de supervisión y daemons de observabilidad que necesitan visibilidad sobre los procesos de las tareas de aplicación o los recursos IPC.
pidMode-
Tipo: cadena
Requerido: no
Valores válidos:
none|sharedValor predeterminado:
noneEl modo del espacio de nombres PID del daemon. Si se especifica
noneo no se proporciona ningún valor, el daemon se ejecuta con su propio espacio de nombres PID, aislado de las demás tareas. Si se especificashared, el daemon se une al espacio de nombres PID del host, lo que permite que accedan a este las tareas que no son de daemon que usanpidMode: "host"u otros daemons que usanpidMode: "shared". ipcMode-
Tipo: cadena
Requerido: no
Valores válidos:
none|sharedValor predeterminado:
noneModo del espacio de nombres IPC del daemon. Si se especifica
noneo no se proporciona ningún valor, el daemon se ejecuta con su propio espacio de nombres IPC, aislado de las demás tareas. Si se especificashared, el daemon se une al espacio de nombres IPC del host, lo que permite que accedan a este las tareas que no son de daemon que usanipcMode: "host"u otros daemons que usanipcMode: "shared".
En el siguiente ejemplo, se muestra una definición de tarea de daemon con el uso compartido de espacios de nombres PID e IPC habilitado:
{ "family": "my-monitoring-daemon", "pidMode": "shared", "ipcMode": "shared", "containerDefinitions": [ { "name": "monitoring-agent", "image": "public.ecr.aws/my-company/monitoring-agent:latest", "essential": true } ] }
Para compartir el espacio de nombres PID con un daemon que tiene pidMode establecido en shared, una tarea que no sea de daemon debe especificar pidMode: "host" en la definición de tarea. Esto permite que los contenedores de la tarea vean los procesos del daemon y habilita casos de uso como la supervisión de procesos y el envío de señales.
Para compartir el espacio de nombres IPC con un daemon que tenga ipcMode establecido en shared, una tarea que no sea de daemon debe especificar ipcMode: "host" en la definición de la tarea. Esto permite que los contenedores de la tarea accedan a los recursos IPC del daemon, como segmentos de memoria compartida y colas de mensajes.
Volúmenes
Los daemons administrados admiten montajes de vinculación mediante volúmenes host con una especificación de sourcePath. Esto permite que los contenedores daemon monten directorios de hosts para acceder a los registros, las métricas y la información del sistema de la instancia de Amazon EC2 subyacente. Los agentes de recopilación de registros, los exportadores de métricas y los escáneres de seguridad suelen utilizarlos para obtener visibilidad de los datos a nivel de host.
La definición de tareas de daemon es compatible con las especificaciones de volumen de los hosts con sourcePath. Los volúmenes de daemon persisten durante todo el ciclo de vida de la instancia de contenedor subyacente.
nota
Los volúmenes de Amazon EBS, los volúmenes de Amazon EFS, los volúmenes de FSx para Windows File Server, los volúmenes de Docker y el almacenamiento efímero no se admiten en las definiciones de tareas de daemon.
nota
Los daemons no admiten el uso compartido de volúmenes entre sí. Cada daemon funciona con su propia configuración de volumen independiente.
En el ejemplo que sigue se muestra un daemon que recopila registros con un montaje de vinculación:
{ "containerDefinitions": [{ "name": "log-collector", "image": "fluent/fluentd:latest", "mountPoints": [{ "sourceVolume": "var-log", "containerPath": "/var/log" }] }], "volumes": [{ "name": "var-log", "host": { "sourcePath": "/var/log" } }] }
Parámetros de contenedor admitidos
Las definiciones de contenedor de daemon admiten los siguientes parámetros:
-
image(obligatorio): URI de imagen del contenedor -
name(obligatorio): nombre del contenedor -
cpu: unidades de CPU reservadas para el contenedor -
memory/memoryReservation: límites de memoria fijos y flexibles -
essential: si el contenedor es esencial (predeterminado: true) -
command/entryPoint: anula el comando o el punto de entrada del contenedor -
environment/environmentFiles/secrets: configuración del entorno -
privileged: ejecute el contenedor en modo privilegiado -
user: usuario en nombre del que se ejecutará el contenedor -
workingDirectory: directorio de trabajo dentro del contenedor -
readonlyRootFilesystem: monte el sistema de archivos raíz como de solo lectura -
mountPoints: puntos de montaje de volúmenes (montajes de vinculación únicamente con host y sourcePath) -
logConfiguration: configuración de registro (admite awslogs, splunk y awsfirelens) -
healthCheck: configuración de la comprobación de estado del contenedor -
dependsOn: dependencias de inicio de contenedores -
ulimits: límites de recursos -
systemControls: parámetros del núcleo -
linuxParameters.capabilities: capacidades de Linux que se agregarán o eliminarán -
linuxParameters.initProcessEnabled: ejecute un proceso de inicio en el contenedor -
repositoryCredentials: credenciales para registros privados -
restartPolicy: política de reinicio de contenedores