34
Desmembrando Contenedores Iván Chavero Red Hat

Desmembrando Contenedores - rootzilopochtli

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Desmembrando Contenedores - rootzilopochtli

Desmembrando Contenedores

Iván ChaveroRed Hat

Page 2: Desmembrando Contenedores - rootzilopochtli

Hace muuuuucho mucho tiempo...

● Aplicaciones● Redes● Web

Page 3: Desmembrando Contenedores - rootzilopochtli

Hace no tanto tiempo(y todavía)

Page 4: Desmembrando Contenedores - rootzilopochtli

Bendita Ley de Moore

Page 5: Desmembrando Contenedores - rootzilopochtli

Virtualización

● Plataforma ● Kernel● Sistema Operativo

Page 6: Desmembrando Contenedores - rootzilopochtli

Virtualización

● KVM, VMware, Xen● User Mode Linux● LXC, Linux Vserver, OpenVZ

Page 7: Desmembrando Contenedores - rootzilopochtli

Casos de Uso

● Aislamiento lógico● Provisionamiento Rápido● Transporte● Homogeneidad● Administración de Recursos

Page 8: Desmembrando Contenedores - rootzilopochtli

Contenedores vs KVM?

● Casos de uso convergentes● Eficiencia● Rapidez● Espacio

Page 9: Desmembrando Contenedores - rootzilopochtli

Peras y Manzanas

Page 10: Desmembrando Contenedores - rootzilopochtli

Peras y Manzanas

Page 11: Desmembrando Contenedores - rootzilopochtli

Peras y Manzanas

Page 12: Desmembrando Contenedores - rootzilopochtli

Usuarios Famosos

Page 13: Desmembrando Contenedores - rootzilopochtli

LXC

● CGroups● Namespaces● Virtualización de S.O.● Virtualización de Procesos

Page 14: Desmembrando Contenedores - rootzilopochtli

LXC

Page 15: Desmembrando Contenedores - rootzilopochtli

Docker/runC/rkt/*Libcontainer

● Basado en Contenedores● Virtualización de S.O.● Aislamiento de Procesos● Overlay COW

Page 16: Desmembrando Contenedores - rootzilopochtli

Arquitectura

Host

Container 1

Container 2

Container 3

Container ...

Docker Clientdock er pull

dock er run

dock er ...

Docker Index

Docker Daemon

Page 17: Desmembrando Contenedores - rootzilopochtli

Cgroups

Tecnología del Kernel Linux que:

● Limita● Mide● Prioriza

El uso de recursos de una colección de procesos.

Page 18: Desmembrando Contenedores - rootzilopochtli

Cgroups

● Organizado de Manera jerárquica.

Page 19: Desmembrando Contenedores - rootzilopochtli

Cgroups● cpu● memory● net_cls, net_prio● Blkid● cpuacct● cpuset● devices● Ns

Page 20: Desmembrando Contenedores - rootzilopochtli

Namespaces

Funcionalidad del Kernel Linux que aísla y virtualiza:

● PID● Hostname● UID● Red● IPC● Filesystem

Basados en namespaces de Plan9 :)

Page 21: Desmembrando Contenedores - rootzilopochtli

Namespaces

Page 22: Desmembrando Contenedores - rootzilopochtli

COW (Copy On Write)

Sólo crea los archivos que se han modificado

● Crea contenedores al instante● Almacenamiento en capas● Se registra lo que se ha cambiado● AUFS, device mapper, BTRFS● Reduce tiempo de booteo

Page 23: Desmembrando Contenedores - rootzilopochtli

A jugar poquito...

Page 24: Desmembrando Contenedores - rootzilopochtli

CGroups

# cd /sys/fs/cgroup/freezer/# mkdir test; cd test# ps -C xterm -o pid= > tasks

Con (el infame) systemd (evitamos instalar herramientas de cgroups)# systemd-cgls#

Page 25: Desmembrando Contenedores - rootzilopochtli

Namespaces

Sesión 1# unshare --mount /bin/bash# mount /dev/sda1 /mnt/test# grep test /proc/mounts

Sesión 2# grep test /proc/mounts# ls -la /mnt/test

Page 26: Desmembrando Contenedores - rootzilopochtli

A manoCreamos el fielsystem de nuestro contenedor# cp -rp images/alpine containers/alpine-demo# chroot containers/alpine-demo# apk# exit

Usamos namespaces para desacoplarnos del host# unshare –mount –uts –ipc –net –pid –fork bash# hostname alpine-demo# exec bash# psVemos los id’s de los proces pero...# kill -TERM $(pidof sudo)ehhh!! estamos aislados!# mount -t proc none /proc# ps

Page 27: Desmembrando Contenedores - rootzilopochtli

A mano

Usamos pivot_root para que el root sea el filesystem de nuestro contenedor# cd containers/alpine-demo# mkdir oldroot /alpine_demo# mount -o bind /home/demodir/containers/alpine-demo /alpine_demo# cd /alpine_demo# pivot_root . oldroot# umount -a# mount -t proc none /proc

Estamos en algo que parece un contenedor pero no tenemos red :(

Page 28: Desmembrando Contenedores - rootzilopochtli

A manoEn el host configramos la red de nuestro “contenedor”# CID=$(pidof unshare)# ip link add name host-$CID type veth peer name cont-$CID# ip link set cont-$CID netns $CID# ip link set host-$CID master docker0 upChecamos en el contenedor# ip addr (interfaces DOWN)# ip link set lo up# ip link set cont-12223 up# ip addr add 172.17.100.3/16 dev cont-12223# ip route add default via 172.17.0.1# ping 8.8.8.8

Para finalizar y estar totalmente dentro del contenedor:# chroot / sh

Page 29: Desmembrando Contenedores - rootzilopochtli

LXC (Fedora+Libvirt)

Instalación:$ sudo dnf install lxc lxc-templates lxc-extra debootstrap libvirt

Iniciamos Libvirt$ sudo systemctl start libvirtd

Configuramos LXC para su uso con Libvirt:Editar: /etc/lxc/default.conf$ sudo nano /etc/lxc/default.confcambiar:lxc.network.link = lxcbr0alxc.network.link = virbr0

Page 30: Desmembrando Contenedores - rootzilopochtli

LXC (Fedora+Libvirt)

Creación:$ lxc-create -n fedora-container -t fedora -- release 24

Uso:$ lxc-ls$ lxc-start -n fedora-container$ lxc-info --name fedora-container$ lxc-attach -n fedora-container$ lxc-console -n fedora-container$ lxc-clone fedora-container clone-f-container$ lxc-destroy -n imcsk8-fedora-container

Los contenedores pertenecen al usuario que los ha creado.

Page 31: Desmembrando Contenedores - rootzilopochtli

DockerCreación:$ docker build .

Uso:$ docker images$ docker ps$ docker run –name=test-nginx -d -p 8080:80 centos/nginx$ docker attach test-nginx$ docker exec test-nginx ls -la$ docker exec test-nginx /bin/bash$ docker stop test-nginx$ docker rm test-nginx$ docker rmi imagen

Los contenedores pertenecen al usuario que los ha creado.

Page 32: Desmembrando Contenedores - rootzilopochtli

Conclusiones

● Casos de uso de servicios de internet● Versiones de SO + Kernel● Microservidores de bajo costo● Aprovechamiento de recursos

Page 33: Desmembrando Contenedores - rootzilopochtli

Referencias

● https://linuxcontainers.org/●

● http://en.wikipedia.org/wiki/Virtualization●

● http://waytoit.wordpress.com/2014/06/24/introduction-to-docker/●

● http://domino.research.ibm.com/library/cyberdig.nsf/papers/0929052195DD819C85257D2300681E7B/$File/rc25482.pdf● http://kencochrane.net/blog/2013/08/the-docker-guidebook●

Page 34: Desmembrando Contenedores - rootzilopochtli

Virtualización Ligera con Docker

Iván Chavero [email protected]

@imcsk8http://ivan.chavero.com.mx