Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
Desmembrando Contenedores
Iván ChaveroRed Hat
Hace muuuuucho mucho tiempo...
● Aplicaciones● Redes● Web
Hace no tanto tiempo(y todavía)
Bendita Ley de Moore
Virtualización
● Plataforma ● Kernel● Sistema Operativo
Virtualización
● KVM, VMware, Xen● User Mode Linux● LXC, Linux Vserver, OpenVZ
Casos de Uso
● Aislamiento lógico● Provisionamiento Rápido● Transporte● Homogeneidad● Administración de Recursos
Contenedores vs KVM?
● Casos de uso convergentes● Eficiencia● Rapidez● Espacio
Peras y Manzanas
Peras y Manzanas
Peras y Manzanas
Usuarios Famosos
LXC
● CGroups● Namespaces● Virtualización de S.O.● Virtualización de Procesos
LXC
Docker/runC/rkt/*Libcontainer
● Basado en Contenedores● Virtualización de S.O.● Aislamiento de Procesos● Overlay COW
Arquitectura
Host
Container 1
Container 2
Container 3
Container ...
Docker Clientdock er pull
dock er run
dock er ...
Docker Index
Docker Daemon
Cgroups
Tecnología del Kernel Linux que:
● Limita● Mide● Prioriza
El uso de recursos de una colección de procesos.
Cgroups
● Organizado de Manera jerárquica.
Cgroups● cpu● memory● net_cls, net_prio● Blkid● cpuacct● cpuset● devices● Ns
Namespaces
Funcionalidad del Kernel Linux que aísla y virtualiza:
● PID● Hostname● UID● Red● IPC● Filesystem
Basados en namespaces de Plan9 :)
Namespaces
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
A jugar poquito...
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#
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
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
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 :(
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
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
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.
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.
Conclusiones
● Casos de uso de servicios de internet● Versiones de SO + Kernel● Microservidores de bajo costo● Aprovechamiento de recursos
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●