= contenedores
== Contenedores
[{{ :info:cursos:openwebinars:intro-cloud-computing:pasted:20180628-003600.png | Containers VS Virtualización}}]
==== Contenedores (I) ====
* virtualización ligera o de SO
* todos los sistemas comparten núcleo (kernel)
* usados desde hace mucho en Solaris (Containers y Zones) y FreeBSD (Jails)
* hosting compartido
* Limitado en Linux: vservers, OpenVZ, chroot, ...
* contenedor más sencillo existente: chroot
==== Contenedores (II) ====
* Homogeneización del centro de datos
* "El Software libre ganó"
* SO que llenan los centros de datos son Linux
* facilita el uso de un sistema de contenedores, evita el uso de virtualización completa
* herramientas integradas en kernel que me garantizan seguridad, control recursos, etc..
* Linux cgroups (control groups)
* acceso controlado a recursos de sistema
* Linux namespaces
* LXC
==== LXC ====
* Integrado en el kernel de Linux
* se apoya en cgroups y namespaces
* cgroups: grupos de control, gestión a recursos
* namespaces : aislamiento
* los sistemas se instalan desde plantillas
* orientado al uso en sistemas
* docker le da una vuelta de tuerca al uso de los contenedores
==== Docker ====
* Muy similar a LXC "por abajo"
* se aprovecha del trabajo de LXC y añade capas
* orientado al despliegue en microservicios
* mover aplicaciones
* proporciona versionado
* proporciona capas (aufs o overlayfs)
* parto de cierta imagen y los cambios se almacenan como capas
* proporciona imágenes preconfiguradas
* dockerhub
* muy... "Infraestructure as a Code"
* muy... "devops"
* ¿de verdad usas bien docker?
* implica cambio de paradigma... orientado a microservicios
* sin sentido para aplicaciones monolíticas
==== rkt ====
* alternativa a docker
* desarrollado por CoreOS
==== LXD ====
* hipervisor de contenedores
* muy relacionado con LXC
* ¿LXC 2.0?
* basado en el uso de imágenes
* bien integrado con Ubuntu
* Canonical
== Sistemas Operativos Ligeros
* más allá en el mundo de los contenedores:
* instalo SO
* todo lo que monto después está conteneizado
* ¿me hace falta un sistema de gestión de paquetes? ¿necesito "instalar"?
* monto un container, que se comporta como un Linux "normal", donde monto la aplicación que quiero
* CoreOS: "rolling release" -> siempre usando la versión actualizada
==== Sistemas ligeros ====
* Container Linux (CoreOS)
* Project Atomic (RedHat)
* Ubuntu Core (Canonical)
* standar de aplicaciones -> inapi
* RancherOS
* Photon (VMWare)
* DCOS (Mesosphere) = Data Center Operating System
* para desplegar aplicaciones "contenerizadas"
* sin paquetes de aplicaciones
* aplicaciones sobre contenedores (snaps en Ubuntu)
* suelen utilizarse para clusters
* RancherOS: el propio sistema "contenerizado"
== Orquestación con contenedores
==== orquestadores de contenedores ====
* gestionan clusters de equipos
* aplicaciones "contenerizadas"
* aportan funcionalidad adicional
* alta disponibilidad
* balanceo de carga
* comunicación con el exterior
* despliegues en producción
==== kubernetes ====
* desarrollo inicial de Google
* liberado con licencia Apache
* no es el modus operandi habitual
* hace uso intensivo de herramientasde software libre
* Donado a la CNCF = Cloud Native Computing Fundation
* fundación, luego Google se aparta
* pretende estandarización y aportación por parte de otros
* Kubelet, pods
* kubelet: agente?
* pods: "contenedores"
* intercomunicación entre los diferentes contenedores -> compleja
* kube-proxy : acceso a/desde el exterior
* Docker, rkt,...
* software "nuevo", métodos de instalación "mejorables" -> no soportada en distros
{{ :info:cursos:openwebinars:intro-cloud-computing:pasted:20180628-012723.png }}
==== Docker swarm ====
* integrado en docker desde la v1.12
* aplicaciones definidas en docker compose
* se gestiona con comandos docker
==== Mesos / Marathon ====
* soporte para docker y rkt
* otras cargas de trabajo: big data
* utilizado en producción por twitter o airbnb
* Mesosphere proporciona soporte comercial
== Contenedores IaaS
==== Contenedores, clusters o "as a Service" ====
* despliegue desde templantes: heat, cfn...
* ¿bare-metal?
* servidores físicos
* automatización arranque y configuración de servidor físico (aka VMs) -> packet
* contenedores sobre MVs
* elasticidad
* containers as a Service
* Facilidad para desplegar contenedores
* imágenes o SO preconfigurados
* registros propios para imágenes de contenedores
==== Contenedores en AWS ====
* Amazon EC2 Container Service
* contenedores docker sobre instancias EC2
* cluster de instancias EC2
* no implementa kubernetes
==== Contenedores en Google ====
* Google Containers Engine
* Integración completa con kubernetes
* también docker, LXD o rkt directamente
==== Contenedores Azure ====
* Azure Container Service
* Swarm, kubernetes o DCOS
==== Contenedores en OpenStack ====
* contenedores sobre instacias
* despliegues de kubernetes, swarm, etc... con OpenStack heat
* OpenStack Magnum : Containers as a Service
* integración entre MVs y Contenedores a nivel de red
== Contenedores PaaS
==== Contenedores en PaaS ====
* contenedores como aplicación nativa cloud
* están sustituyendo a muchos PaaS
* nuevo enfoque: una capa más sobre orquestador
* aportan funcionalidad y facilidad de uso
* se centran en el desarrollo, no en la herramienta de orquestación
==== ejemplo: OpenShift v3 ====
* desarrollo de RedHat
* v2 - en local o en nube (redhat en AWS)
* como servicio o en privado
* funciona sobre kubernetes
* añade funcionalidad
* espacios de nombres
* facilitar gestión de kubernetes por varios desarrolladores
* RBAC
* plantillas
* integración con herramientas de desarrollo
* control versiones, CI, pruebas automáticas...