Contenedores

Sistemas Operativos

Unidad 1  (parte 4)

Pregunta guía
¿Cómo proporcionar un entorno de ejecución aislado, consistente y potable para una aplicación?

Virtualización

Sistema Operativo

Hipervisor

App

HW

SO

App

App

App

HW

SO

App

App

App

HW

SO

App

App

App

HW

SO

App

App

  • Vimos la abstraccion entre hardware y aplicaciones.

 

  • Definimos virtualizacion.

 

  • Ubicamos las principales estrategias actuales.

 

  • Máquinas virtuales como aislamiento fuerte.

Virtualizacion de sistema operativo

Entornos aislados de ejecución para aplicaciones, construidos sobre mecanismos nativos del sistema operativo.

Sistemas Operativos

Comparten kernel del sistema anfitrión.

Permiten ejecutar una aplicación de forma consistente en distintos entornos.

Sistema Operativo

Sistema Operativo

App

Sistema Operativo

App

App

App

App

Sistema Operativo

App

App

App

App

App

App

App

App

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

IP

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

IP

IP

IP

IP

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

IP

IP

IP

IP

Contenedores

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

IP

IP

IP

IP

Contenedores

Sistema Operativo

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

App

IP

IP

IP

IP

a

b

c

d

Virtualizacion vs. Contenedores

Virtualizacion vs. Contenedores

  • Distinto sistema operativo
  • VM corriendo en VM es difícil
  • Recursos reales fijos asignados
  • Sobreventa de HW virtual
  • Distinta versión de Linux
  • Máxima performance
  • Máxima densidad
  • Corre en VM
  • Limitacion de recursos por límites
  • "disco" y "red" propios

Un contenedor empieza como un proceso

  • sigue siendo un proceso de Linux
  • comparte el kernel del host
  • no crea otra computadora

Formula simple

Contenedor = proceso + aislamiento + limites

Sistemas Operativos

Un contenedor empieza como un proceso

  • Proceso tiene Pid (Process ID) y PPid (Parent process ID)
  • Puedo correr muchas veces la misma aplicación, cada una es un proceso

Sistemas Operativos

echo $$

ps ef 

ps -o pid,ppid,cmd

ls /proc

Namespace

Sistemas Operativos

Mecanismo del kernel de Linux que aísla la vista que un proceso tiene del sistema.

Webasignatura tarea: Namespace

PID namespace

Que cambia

El arbol de procesos visible.

Idea importante

El proceso sigue siendo un proceso normal de Linux, pero ya no ve el mismo conjunto de procesos que ve el host.

Sistemas Operativos

UTS namespace

Que cambia

El hostname visible para el proceso.

Idea importante

Cambiar el nombre que ve el proceso no significa crear otra maquina virtual.

Sistemas Operativos

Mount namespace

Que cambia

El mapa de sistemas de archivos montados.

Idea importante

Un proceso puede tener otra vista del filesystem sin salir del mismo kernel.

Sistemas Operativos

Namespaces: resumen

  • cambian lo que el proceso ve
  • no crean otro kernel
  • no crean otra maquina

Frase clave

Namespaces cambian el contexto visible del proceso.

Sistemas Operativos

CGroups

Sistemas Operativos

Mecanismo del kernel de Linux que controla y limita los recursos que un proceso puede usar.

Webasignatura tarea: CGroups

Cgroups

Que hacen

Los cgroups no cambian la vista del proceso.

Los cgroups cambian:

  • cuanta memoria puede usar
  • cuanto peso tiene en CPU
  • cuantos procesos puede crear

Sistemas Operativos

Namespaces y cgroups

No hacen lo mismo

  • namespaces responden: que ve el proceso
  • cgroups responden: que puede usar el proceso

Esta distincion es fundamental

Ver y usar no son la misma cosa.

Sistemas Operativos

Filesystem del contenedor

Sistemas Operativos

Estructura de archivos que el proceso ve como su propio entorno de ejecución

Root filesystem visible

Que significa

El proceso puede arrancar viendo otra raiz de archivos.

Importante

Otra raiz de archivos no significa otra maquina virtual.

Significa otra vista del sistema de archivos.

Sistemas Operativos

OverlayFS

Ayuda a construir el filesystem del contenedor con capas.

Conceptos clave

  • capa base
  • capa de escritura
  • copy-on-write

Idea importante

El contenedor puede parecer tener su propio filesystem, aunque ese filesystem se construya a partir de capas. 

Sistemas Operativos

Docker populariza la idea.

OverlayFS

  • base: la raíz original, read-only
  • cambios: donde se guardan las modificaciones
  • trabajo: directorio interno que necesita overlayfs
  • contenedor: la vista final que el proceso “cree” que es su filesystem

Sistemas Operativos

mkdir -p demo-overlay/{base,cambios,trabajo,contenedor}
tar -xzf alpine-minirootfs-*.tar.gz -C demo-overlay/base

mount -t overlay overlay \
  -o lowerdir=demo-overlay/base,upperdir=demo-overlay/cambios,workdir=demo-overlay/trabajo \
  demo-overlay/contenedor

OverlayFS

Sistemas Operativos

ls demo-overlay/base
ls demo-overlay/contenedor
cat demo-overlay/contenedor/etc/os-release
echo "Materia: Sistemas Operativos" > demo-overlay/contenedor/root/prueba.txt
echo "Modificado en clase" >> demo-overlay/contenedor/etc/motd
find demo-overlay/cambios | head -20
cat demo-overlay/cambios/etc/motd
cat demo-overlay/base/etc/motd

Red virtual del contenedor

Sistemas Operativos

Entorno de red aislado que el proceso ve como propio dentro del sistema

Webasignatura tarea: Red

Red virtual

Aqui si aparece virtualizacion

Pero solo en red.

No significa

una maquina virtual completa

Significa

interfaces virtuales, namespaces de red y enlaces virtuales

Sistemas Operativos

Namespace de red

Que cambia

El proceso puede ver:

  • distintas interfaces a las del host
  • otra configuracion de red
  • otro loopback

Idea importante

Cada namespace de red tiene su propia vista de la red.

Sistemas Operativos

Par veth

Un par veth funciona como un cable virtual con dos extremos.

  • un extremo puede quedar en el host
  • el otro extremo puede quedar dentro de un namespace

Sistemas Operativos

Bridge virtual

Switch virtual del kernel que conecta interfaces de red virtuales.

Linux puede construir una red interna para contenedores sin crear otra maquina.

Sistemas Operativos

El ping final

Un proceso dentro de un namespace puede enviar paquetes:

  • por su interfaz virtual
  • a traves de un enlace virtual
  • hacia otra interfaz del host o de otro namespace

Sistemas Operativos

Contenedor

Proceso aislado y controlado por mecanismos nativos de Linux.

Frase para recordar

Linux: reorganiza lo que el proceso ve y lo que puede usar.
Docker no inventa el contenedor: lo construye y lo administra sobre Linux.

Sistemas Operativos

Docker

Herramienta que crea, empaqueta y ejecuta contenedores usando esos mecanismos del sistema operativo.

Ideas que deberias poder explicar

  • un contenedor comparte kernel con el host
  • namespaces cambian lo que el proceso ve
  • cgroups cambian lo que el proceso puede usar
  • overlayfs ayuda a construir el filesystem del contenedor
  • la red del contenedor se arma con mecanismos virtuales de Linux

Sistemas Operativos

Contenedores en Linux

By Rodolfo Pilas

Contenedores en Linux

  • 66