馃敟 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).