Contenedores con Docker. con... · Es un entorno gestionado para la ejecución de contenedores....
Transcript of Contenedores con Docker. con... · Es un entorno gestionado para la ejecución de contenedores....
Contenedores con Docker.IV) Cloud.
Daniel A. Cialdella C., José M. Cousiño y Pablo P. Corral L.
Espacio ofrecido por
Travel Labs Madrid 10-2019
¿ Cuántos vinieron a los MeetUp anteriores ?
● Cuántos a la I) II) III) ? Experiencia anterior?
● Conocimientos a los que no vinieron?
● Subiremos la presentación.
¿Quiénes somos y porqué hicimos Dockertips?
2015. Comenzamos probando Docker.
2016. Implementaciones para desarrolladores.
2017. www.dockertips.com y publicaciones.
2018. Puesta en marcha de varios Proyectos.
2019. Comunidad establecida, compartiendo
experiencias y dando servicios.
Presentación.
Introducción.
● Una vez que se tienen los contenedores creados y probados en los entornos de
desarrollo, test, …, se tienen que poner en un entorno de producción.
● Generalmente las empresas no tienen entornos preparados para el despliegue y
mantenimiento de clusters para albergar los contenedores en sus propios CPD (costes,
instalaciones, mantenimiento, etc …).
● Una buena solución para esta problemática son las nubes que nos proporcionan:
○ Alta disponibilidad (mantenimiento, actualizaciones y gestión del cluster por
cuenta del proveedor de la nube).
○ Fácil escalado horizontalmente (contenedores) como vertical (nodos del
cluster).
○ Balanceo de carga.
○ Registro, estado de los contenedores, otros...
○ Costes bajos.
● En la actualidad hay muchas nubes que nos proporcionan servicios administrados
para el despliegue de contenedores:
○ Azure
○ Aws
○ Google Cloud
○ Digital Ocean
○ Red hat
○ IBM
● Todas las nubes son compatibles con contenedores Docker
● Cada nube tiene su propia línea de comandos con la que administrar los
contenedores:
● Azure Cli → línea de comandos de Azure.
● AWS Cli → línea de comandos de AWS.
● Cloud Shell → línea de comandos de Google Cloud.
● Al tener línea de comandos los despliegues de los contenedores es más simple → se
puede utilizar scripts tanto para crear los clúster como para el despliegue de los
contenedores (Infraestructura as code). Hay varias herramientas:
○ Terraform
○ Ansible
○ Powershell
○ ...
● La gestión de los contenedores en la nube se considera un servicio PaaS.
● Estos servicios PaaS han tenido un enorme crecimiento desde 2016, cuando
aparecieron los primeros servicios.
● Muchas consultoras (dedicadas a la nube) tienen claro que los “Contenedores son el
futuro”.
Azure.
● Azure nos proporciona las siguientes opciones para trabajar con
contenedores:
○ ACR: Azure Container Register.
○ ACS: Azure Container Service.
○ AKS: Azure Kubernetes Service.
○ ACI: Azure Container Instance.
○ WebApps.
Azure Container Register (ACR).
● Es el servicio administrado de Azure para el registro de imágenes de Azure.
● Almacena y administra imágenes para cualquier implementación de contenedores.
● Los contenedores se pueden replicar por las distintas zonas geográficas dependiendo
de la suscripción.
● Permite clasificar las imágenes.
● Mantenimiento del versionado de las imágenes.
● La inserción de las imágenes:
○ Manual (Azure CLI, web)
○ Aplicación de integración continua (Azure Devops,
Jenkins, Team City, …)
Azure Container Services (ACS)
● Es el servicio administrado de Azure que permite la ejecución de los contenedores
(estará en desuso 31-01-2020).
● Permite la configuración y administración de un clúster de máquinas virtuales
preconfiguradas para ejecutar contenedores.
● Permite la utilización de orquestadores para la administración de los contenedores:
○ Docker-Swarm.
○ DC/OS (Distributed Cloud Operating System).
○ Kubernetes.
● Permite escalar los contenedores.
● La administración se realiza a través de SSH.
● Este servicio nos ofrece:
○ Inicio rápido: en cuestión de segundos tenemos el contenedor ejecutándose.
○ Seguridad.
○ Tamaños personalizados: se especifica valores exactos de procesadores y
memoria.
○ Almacenamiento persistente: montaje de un recurso compartido en Azure Files
en un contenedor para recuperar el estado.
○ Ejecución de los contenedores en Windows o Linux.
○ Facturación por segundos de ejecución.
○ Escalado automático.
○ Actualización de aplicaciones.
Azure Kubernetes Services (AKS)
● Azure Kubernetes Services, es un servicio de orquestación de contenedores
administrado basado en Kubernetes.
● Este servicio permite de forma rápida y fácil implementar y administrar aplicaciones
en contenedores.
● Aks está disponible desde junio de 2018.
● Aks configura automáticamente los nodos maestros y workers durante el proceso de
implementación.
● Este servicio se integra con ACR y utiliza la persistencia de datos con Azure Disks.
● Actualizaciones:
○ Al ser un servicio administrado se puede activar que Microsoft maneje todas las
actualizaciones de Kubernetes, a medida que estas estén disponibles.
○ O el usuario puede decidir cuándo actualizar la versión de Kubernetes en su
clúster.
● Los nodos Aks pueden escalar hacia arriba o abajo para adaptarse a la demanda de
recursos.
● Aks admite agrupaciones de nodos habilitados por unidades de procesamiento de
gráficos (para cargas de trabajo intensivas en computación, como aplicaciones
científicas)
● Los usuarios pueden acceder a Aks:
○ A través del portal de administración.
○ La línea de comandos (Azure CLI).
○ Plantillas a través de herramientas como Azure Resource
Manager.
● AKS se puede conectar con los siguientes servicios de la nube de Azure:
○ Azure Load Balancer.
○ Almacenes de datos externos (Azure Sql Database, Cosmos DB, …).
○ Azure Active Directory.
○ Azure Container Register.
○ Azure Pipelines (Azure Devops).
○ Azure Monitor.
○ Azure Disks.
● AKS permite la ejecución de paquetes Helm.
● Escalabilidad horizontal:
○ Escalado en el número de pods que se asigna a una implementación.
■ Se escala en función de la CPU y la memoria observando las métricas.
■ Se tiene que especificar una métrica de destino para el mínimo y máximo
de réplicas.
○ Escalado del clúster.
■ Escala el número de nodos.
■ Si no se puede programar debido a restricciones de recursos, el escalador
automático del clúster aprovisionar mas nodos.
■ Una vez creado el clúster no se puede cambiar el tamaño de la máquina
virtual.
● Seguridad:
○ Control de acceso basado en roles (RBAC).
○ Azure Directory.
Azure Container Instance (ACI)
● Es el servicio administrado de Azure para la ejecución de una instancia de un
contenedor.
● Servicio totalmente administrado.
● Escalado automático.
● Permite ejecutar contenedores Windows o Linux.
● La creación del contenedor se crea bajo demanda.
● No tiene limite de tiempo para su procesamiento.
● Se utiliza para:
○ Procesamiento de datos.
○ Ampliación de AKS.
○ Aplicaciones con Azure Logic Apps.
○ No está pensada para microservicios.
● ACI ejecuta un contenedor:
○ En base a una imagen (pública o privada).
○ Con la memoria RAM y CPU que se necesite.
○ Se puede especificar una IP pública.
○ Se puede montar un volumen de Azure File Share.
WebApps for containers
● Es un servicio administrado que permite desplegar aplicaciones web en contenedores
Linux y Windows.
● Muy fácil de implementar.
● Muy fácil de actualizar.
● Alta disponibilidad.
● Tolerancia a errores.
● Solo se puede tener una contenedor. En versión preliminar utilización de Docker
Compose o Kubernetes.
● Escalado de la web app.
● Fácil acceso a los logs.
Demo.
AWS.
● AWS nos proporciona las siguientes opciones para trabajar con
contenedores:
○ ECR: Elastic Container Register.
○ ECS: Elastic Container Service.
○ EKS: Elastic Kubernetes Service.
Elastic Container Register (ECR)
● Es el servicio administrado de Amazon para almacenar imágenes de contenedores
Docker.
● Servicio completamente administrado, de alta disponible y escalable.
● ECR se integra con Elastic Container Service y Elastic Kubernetes Service.
● Está integrado con Identity Access Managment (IAM).
● Permite tener versionado de las imágenes.
● “Solo” se paga por la cantidad de datos almacenados y la transferencia de Internet.
Elastic Container Services (ECS)
● Es el servicio administrado de AWS para la ejecución de contenedores de alto
rendimiento y escalabilidad compatibles con Docker.
● Permite ejecutar y escalar aplicaciones de una forma sencilla.
● Los contenedores se lanzan en una VPC de Amazon, por lo que se puede utilizar
grupos de seguridad de VPC y ACL.
● No comparten recursos con otros clientes.
● ECS monitoriza el uso de CPU y memoria por parte de los contenedores.
● Ventajas:
○ No se tiene que instalar ni ejecutar ningún software propio.
○ No tiene que administrar la escala de los clusters en máquinas virtuales
(Fargate).
○ Llamadas sencillas a APIs para consultar el estado de los contenedores:
■ CloudWatch.
■ CloudTrail.
■ CloudFormation.
○ Integración con los servicios administrados de AWS.
○ Utilización de AWS Fargate.
● Cuando utilizarlo:
○ Con microservicios.
○ Ejecutar cargas de trabajo en lotes.
● AWS Fargate:
○ Es un motor para ejecutar contenedores sin administrar servidores ni Clusters.
○ No se tiene que aprovisionar, configurar, escalar clúster de máquinas virtuales
para ejecutar contenedores.
○ Se elimina la necesidad de elegir servidor donde se va a ejecutar.
○ Dos tipos de lanzamiento:
■ Lanzamiento Fargate: se empaqueta la aplicación indicando los requisitos
de CPU y memoria que necesita y las políticas de seguridad.
■ Lanzamiento EC2: permite disponer de control más granular (tipo de
servidor) y de infraestructura.
○ Escalado perfecto.
Elastic Kubernetes Services (EKS)
● Es un servicio que facilita la implementación y escalado de aplicaciones en
contenedores.
● EKS ejecuta la infraestructura de administración de Kubernetes en varias Availability
Zones de una región.
● EKS dispone de un certificado de conformidad de Kubernetes para que se puedan
utilizar todas las herramientas de la comunidad.
● Características:
○ Es un servicio totalmente administrado (no tenemos que administrar la
infraestructura)
○ Elimina la necesidad de diseñar alta disponibilidad y escalabilidad para los
nodos maestros.
○ Solo nos tenemos que centrar en las cargas de trabajo.
○ Distribuye la carga de trabajo y el procesamiento en paralelo.
○ No se tiene que realizar ninguna instalación.
○ Se puede integrar con los servicios de AWS.
○ Los pods pueden asumir los roles de IAM.
○ EKS garantiza la disponibilidad del cluster de Kubernetes en tres Availability
Zones.
○ Se paga por lo que se consuma (0,20€ por hora de cluster)
y por cada worker.
● ¿Cómo funciona?
○ Es un servicio totalmente administrado (no tenemos que administrar la
infraestructura)
○ Elimina la necesidad de diseñar alta disponibilidad y escalabilidad para los
nodos maestros.
○ Solo nos tenemos que centrar en las cargas de trabajo.
○ Distribuye la carga de trabajo y el procesamiento en paralelo.
○ No se tiene que realizar ninguna instalación.
○ Se puede integrar con los servicios de AWS.
○ Los pods pueden asumir los roles de IAM.
○ EKS garantiza la disponibilidad del cluster de Kubernetes en tres Availability
Zones.
Demo.
Google Cloud.
● Google Cloud Platform ofrece las siguientes opciones para ejecutar
contenedores:
○ Google Kubernetes Engine.
○ Google Compute Engine.
○ Google App Engine.
○ Google Container Register.
Google Kubernetes Engine (gke)
● Es un entorno gestionado para la ejecución de contenedores.
● Kubernetes era de google, que lo cedió a la comunidad por que su solución tiene una
amplia experiencia (cerca de 12 años).
● Esta solución es utilizada en servicio de google como Gmail o Youtube.
● Google se encarga de la gestión y administración de los clúster. Solo nos tenemos que
dedicar a nuestras aplicaciones.
● Cuenta con el certificado de Kubernetes que asegura la portabilidad de un clúster en
on-promise a la nube o al revés.
● Características:
○ Gestión de identidades y acceso.
○ Seguridad y cumplimiento de las políticas.
○ Redes híbridas.
○ Compatibilidad con imágenes docker.
○ Autoescalado. Aumenta o reduce automáticamente la cantidad de recursos en
función del uso de CPU y memoria.
○ Está totalmente gestionado.
○ Actualización de versiones automática.
○ Reparación automática.
○ Límites de recursos.
○ Sistema operativo para contenedores (Container-Optimized OS).
○ Compatibilidad con GPU.
Google Compute Engine (gce)
● Es una máquina virtual con el sistema operativo de google para contenedores
(Container-Optimized OS).
● Esta máquina virtual tiene instalado Docker Engine.
● Cuando se arranca la máquina se lanza el contenedor.
● Estas máquinas virtuales se administran de la misma manera que cualquier otra
máquina virtual.
● Para escalar se tiene que crear grupos de escalados en las que se asocian las máquinas
que se quieren escalar.
● No está recomendada para aplicaciones con arquitecturas de microservicios -> puede
producir sobrecarga del sistema.
● La implementación de los contenedores se realiza:
○ Implementando un script en el arranque de la máquina virtual.
○ Crear una imagen de un disco con la aplicación incluida.
● Limitaciones:
○ Solo se puede implementar un contenedor por instancia.
○ Crear una imagen de un disco con la aplicación incluida.
○ Solo se puede implementar contenedores desde repositorios públicos o desde un
repositorio privado en Google Container Register.
○ No se puede asignar los puertos de una instancia de VM a los puertos del
contenedor.
○ Solo se pueden usar imágenes preparadas para el sistema operativos Conainer-
Optimized OS.
○ solo se puede usar esta función a través de Google Cloud Platform Console o
gcloud (la herramienta de línea de comandos).
Google App Engine (gae)
● Es un servicio que permite a los desarrolladores centrarse en el código sin tener
interferencias con la infraestructura.
● Está basado en Google Compute Engine.
● Escala automáticamente hacia arriba o abajo.
● Tiene compatibilidad con:
○ Autorización.
○ Bases de datos sql y NoSQL.
○ División de tráfico.
○ Control de versiones.
○ Redes.
● Se puede personalizar la CPU y memoria.
● Lenguajes: soporta los siguientes lenguajes de programación
○ Java8 o superior.
○ Eclipse Jetty 9.
○ Python 2.7 y 3.6.
○ Node.js.
○ Ruby.
○ Php.
○ Net Core.
○ Go.
Google Container Register (GCR)
● Es el servicio de registro de imágenes docker de Google Cloud Platform.
● Versionado de las imágenes.
● Permite realizar análisis de vulnerabilidades.
● Bloqueo de imágenes “peligrosas”.
● Está accesible para las aplicaciones de integración continua (CI) y entrega continua
(CD) (Jenkins, Team City, ….).
● Compatibilidad nativa con Docker.
Digital Ocean.
● Digital Ocean es una nube que ofrece un servicio de Kubernetes en la nube para
albergar nuestros contenedores.
● Tiene todas las ventajas de cualquier otra nube:
○ Escalado automático.
○ Despliegues rápidos.
○ Alta disponibilidad.
○ Tolerancia a fallos.
○ Compatibilidad con las herramientas de CI/CD.
○ Portabilidad de aplicaciones.
● Pero una de las grandes ventajas que ofrece es su precio.
https://www.digitalocean.com/
Preguntas.
Gracias por participar.