ECS (Amazon Elastic Container Service)

ECS (Amazon Elastic Container Service)

Amazon elastic container service para Docker

Docker es una plataforma de software que permite crear, probar y desplegar aplicaciones rápidamente.

Docker es altamente confiable: se pueden realizar deploys y escalar aplicaciones en un ambiente y saber como el código va a ejecutarse.

Docker escala de manera infinita: Ejecutar docker en AWS es una buena forma de montar aplicaciones distribuidas a cualquier escala.

Docker empaqueta paquetes de software en una forma estandarizada llamada “contenedores”.

Los contenedores te permiten de manera sencilla empaquetar el código de una aplicación, la configuración y las dependencias en bloques que proveen consistencia ambiental, eficiencia operacional, productividad de desarrollo y control de versiones.

Ejemplos

En un stack de aplicación normal se tienen varias capas.

  • El sistema operativo (Windows, Linux, etc).
  • Las dependencias (Apache, PHP, MySQL, etc).
  • La Aplicación (una aplicación web).

Si consideramos que PHP, MySQL y Apache existen en diferentes versiones, al momento de escalar hay que asegurarse que todas las instancias provistas con estas dependencias tengan las mismas versiones instaladas para que funcionen de la misma forma.

La forma en la que docker funciona es envolviendo todas las dependencias en la misma forma, de tal forma que no importa que tipo de instancia se provisione, el ambiente será siempre el mismo.

Virtualización tradicional vs docker

En la virtualización tradicional contiene toda la VM como una sola entidad (SO, Dependencias, Aplicaciones, etc), esto provoca que solo el sistema operativo consuma hasta el 80% de los recursos asignados a la VM.

Los contenedores no requieren montar un sistema operativo sobre la VM, solo contienen la aplicación y sus dependencias.

Cuáles son las ventajas del uso de contenedores?

  • Escapan de la problemática de las dependencias.
  • Progresión consistente de DEV-TEST-QA-PRDO.
  • Aislamiento, estabilidad del performance con la app A en el contenedor A que no impactará la app B en el contenedor B.
  • Mejor manejo de recursos.
  • Hace el código extremadamente portable.
  • Permite crear micro-servicios.

Cuáles son los componentes de Docker?

  • Docker image (el iso donde se encuentra el SO).
  • Docker container (contiene todo lo requerido para ejecutar la aplicación de forma aislada).
  • Layers / Union File Systems.
  • DockerFile (definen las instrucciones para provisionar las imágenes).
  • Docker Daemon / Engine (se ejecuta en Linux, y comunica con Docker client para ejecutar comandos).
  • Docker Client (permite la creación y manipulación de los contenedores y el control del docker daemon).
  • Docker Registries / Docker Hub (contiene todas colección de imágenes que pueden ser publicas y privadas).

Amazon EC2 Container Service (ECS)

Es un manejador de contenedores altamente escalable y rápido que permite de manera sencilla, ejecutar, detener y manejar contenedores de Docker en un cluster de instancias EC2. Permite desplegar aplicaciones basadas en contenedores con llamadas sencillas a una API, para determinar el estado centralizado del cluster desde un servicio centralizado, y proporcionar acceso a muchas de las características de Amazon EC2.

Componentes

ECS (Elastic Container Service)

ECS es un servicio regional que permite utilizar una o mas Availability Zones a traves de un VPC nuevo o existente, para programar el despliegue de contenedores a traves de un cluster basado en los recursos requeridos, las políticas de aislamiento, y la disponibilidad de los requerimientos.

ECS elimina la necesidad de administrar y configurar su propio cluster, o de preocuparse por escalar la administración de su infraestructura.

ECS puede también ser utilizado para crear despliegues consistentes, escalar conforme a los workloads y construir aplicaciones con arquitecturas sofisticadas basadas en modelos de microservicios.

Contenedores

Los contenedores son un medo de operar sistemas de virtualización, que permiten ejecutar aplicaciones y sus dependencias en un ambiente aislado.

Los contenedores tienen todos los requerimientos que el software necesita, como librerías, herramientas del sistema y código.

Los contenedores son creados desde un template de solo escritura llamado imagen.

Docker Image

Una imagen es un template de solo lectura con instrucciones para la creación de un contenedor de Docker.

Contiene una colección ordenada de cambios del root filesystem y la correspondiente ejecución de parámetros para el uso dentro de un contenedor en tiempo de ejecución.

Una imagen es creada desde un dockerfile, un archivo de texto plano que especifica los componentes que han de ser incluidos en el contenedor.

Las imágenes son almacenadas en un registro, como DockerHub o AWS ECR.

Registros de Contenedores

Amazon EC2 Container Registry (Amazon ECR) soporta repositorios privados de Docker con permisos basados en recursos utilizando AWS IAM, de forma que especifica usuarios o instancias de Amazon EC2 que pueden acceder a repositorios e imágenes. Los desarrolladores pueden utilizar Docker CLI para empujar, extraer y manejar imágenes.

ECS Task

Una Task Definition es requerida para ejecutar contenedores de Docker en Amazon ECS.

Las task definitions son archivos de texto en formato JSON que describen uno o mas contenedores que componen una aplicación.

Algunos de los parámetros que se pueden especificar en una task definition incluyen:

  • Que imágenes de Docker se van a utilizar.
  • Cuanto CPU y memoria se va a utilizar para cada contenedor.
  • Si los contenedores están vinculados en una tarea.

El netowrking mode de docker para utilizado por los contenedores.

Si hay puertos del contenedor mapeados al host.

Si la tarea debe continuar ejecutándose si el contenedor se finalizó o falló.

El comando que el contenedor debe ejecutar cuando se inicie.

Si hay variables de entorno enviadas al contenedor cuando este inicie.

Cualquier data-volume que deba ser utilizado dentro del contenedor.

Si hay algún role de IAM que la tarea deba utilizar relacionado a algunos permisos.

Basicamente una task definition describe un contenedor de docker en formato json.

ECS Services

Permite ejecutar y mantener un numero de instancias ejecutándose simultáneamente en un cluster de ECS.

Es en cierta forma un grupo auto-scaling para ECS.

Si una tarea falla o se detiene, Amazon ECS dispara otra instancia para reemplazarla y mantener el numero deseado de tareas en ejecución.

ECS Clusters

Un cluster de ECS es un grupo lógico de instancias de contenedores sobre los cuales se pueden montar tareas. Cuando se utiliza ECS, un cluster por default es creado, pero pueden ser creados múltiples cluster en una cuenta para mantener los recursos separados.

Los clusters pueden contener múltiples diferentes contenedores de diferentes tipos de instancias.

Los clusters son específicos de una región.

Los instancias de los contenedores pueden solo formar parte de un cluster a la vez.

Se pueden crear policies de IAM para sus clusters, de manera que restrinjan el acceso al cluster a usuarios específicos.

Calendarización en ECS

Servicio de calendarización.
Se asegura que el numero especifo de tareas se ejecuten de manera constante y se re-calendaricen cuando estas fallan (por ejemplo, si el contenedor falla por alguna razón).
Puede asegurar que las tareas se registren en un ELB.
Calendarizador personalizado.
Usted puede crear su propio calenzarizador que cumpla los requerimientos requeridos.
Aprovechar calendarizadores de terceros, como Blox.

Los calendarizadores de Amazon ECS (Amazon ECS Schedulers) aprovechan la la misma información del estado del cluster provista por el API de ECS, para tomar decisiones apropiadas.

ECS Container Agent

El agente de contenedores de ECS (ECS Container Agent) permite a las instancias tipo contenedor conectarse al cluster. El agente de contenedores de Amazon ECS esta incluido en el Amazon ECS-Optimized AMI, pero puede ser instalado en cualquier instancia de EC2 que soporte las especificaciones de Amazon ECS. El agente de ECS solo es soportado en instancias de EC2.

  • Preinstalado en instancias especiales.
  • Basado en Linux, funciona con Amazon Linux, Ubuntu, RedHat, Centos, etc.
  • No funciona en Windows.

Seguridad en ECS

Roles IAM.
Las instancias de EC2 utilizan roles de IAM para acceder a ECS.
Las ECS tasks utilizan IAM para acceder a servicios y recursos.

Los security groups se asocian al nivel de la instancia (no de la tarea o del contenedor).

Se pueden acceder y configurar el sistema operativo de una instancia de EC2 desde un cluster de ECS.

Límites de ECS

Soft limits.
Clusters por región (1000 por default).
Instancias por cluster (1000 por default).
Servicios por cluster (500 por default).
Hard Limits.
Un load balancer por servicio.
1000 tasks por servicio.
Un máximo de 10 contenedores por definición de task.
Un máximo de 10 tasks por instancia (host).