23 – RancherOS

Bienvenidos al episodio 23 de deployandome, el podcast de tecnología para sysadmins y devops. Soy Rodolfo Pilas y estoy grabando el 21 de noviembre de 2017.

Con este episodio abro una nueva serie de podcast. Como ya hice en otros episodios que los junté en series, por ejemplo de OpenSSH o sobre el Correo Electrónico, este podcast es el primero de los dedicados a Docker.

Y no tengo un interés en particular de empezar a contarte lo que es Docker, ni tampoco explicar las diferencias entre contenedores y virtualización. No, esa temática estará implícita a lo largo de las ediciones que hable sobre docker. Si tu necesitas entenderlo o refrescar los conocimientos básicos de Docker en Internes hay Gigas de información en nuestro idioma sobre los contenedores y sobre docker en particular.

Por eso, hoy abro la serie de podcast de Docker, pero dedicados a aquellas herramientas o software que conozco que ha llamado mi atención.

Y en este episodio 23, te voy a contar de un verdadero porta-contenedores.

A ver si me explico, con una analogía de los contenedores marítimos, que todos tenemos una idea de lo que son, o sea esas cajas metálicas que se usan para transportar mercaderías en barcos, aviones o medios de transporte de carga.

A nivel de barcos para llevar contenedores se utilizan unos navíos diseñados y construidos especialmente para llevar contenedores, es decir barcos cuya estructura está pensada para optimizar la relación entre la carga y la gestión de los recursos, es decir, el transporte. A esos barcos los conocemos como porta-contenedores.

Ahora imaginemos a nuestro kernel Linux levantando contenedores docker como si fuera un barco para transportar contenedores.

Una distribución estándar, diseñada para ser un servidor o desktop, podrá cargar contenedores sin problemas, pero a la hora de cargar contenedores en serio… me refiero a que nuestro servidor esté 100% dedicado a contenedores ¿una distribución estándar para servidor, ¿es lo podemos tener?

¿podemos diseñar y construir una distribución destinada a optimizar la relación entre carga de contenedores y gestión de recursos? Como si fuera uno de esos barcos porta-contenedores enormes cuando está lleno y diminuto cuando está vacío que solemos ver en nuestros puertos..

Y la respuesta es SI, podemos crear una distribución de GNU/Linux pensada para la carga de contenedores docker. Y una de esas distribuciones es RancherOS.

Como te comentaba, RancherOS es una distribución de GNU/Linux diseñada para correr contenedores docker. No es la única, otras son CoreOS, Redhat Project Atomic o Ubuntu Core OS, pero entones ¿cuál es la diferencia de RancherOS? pues que lleva el concepto de porta-contenedor al extremo. Y seguro te preguntarás qué quiere decir llevar el concepto de porta-contenedor al extremo en una distribución GNU/Linux.

En proceso de booteo cuando el kernel finaliza su arranque, con el scheduler tomando control del sistema para proveer la multi-tarea comienza el proceso de init. En una distribución estándar
hablamos que se arranca el PID 1 que es systemd. Pero en RancherOS el PID 1 es docker daemon y a partir de allí lo que podemos hacer es correr contenedores docker.

Decimelo vos, ¿esto ya no parece fantástico? Kernel, Docker y a cargar contenedores.

Seguramente te estarás preguntando qué pasa con todos esos servicios que require un sistema GNU/Linux para correr. Cosas tan básicas como udev para tener dispositivos en espacio de usuario, o network, o acpid, o directamente console para tener un login, o syslog, cron. Es decir, esos servicios que solemos darle restart con systemctl cuando actualizamos o configuramos. Pues los arquitectos de RancherOS han cargado estos servicios como contenedores, un contenedor por cada uno.

Un RancherOS recién iniciado, es un kernel cuyo init es docker daemon y luego arrancan una serie de contenedores para cada uno de los servicios básicos del sistema. Y esto en RancherOS constituye una primer instalación de docker, que se denomina system-docker.

System-docker es un docker engine para esta función de mantener los servicios básicos, con su propio docker registry y que se definen docker-compose y se configuran mediante cloud-init. Si, si, el mismo cloud-init que se utiliza para configurar instancias en cloud computing.

Te confieso que la primera vez que vi esto y comencé a entender cómo estaba construida esta distribución sentí la misma emoción que allá por los 90 del siglo pasado sentí cuando empecé a ver por primera vez GNU/Linux, así con la mochila vacía por la ignorancia y el afán de descubrir cosas.

En RancherOS no solo usas docker, sino que todo es docker. Si quiere agregar a tu sistema base, por ejemplo, un agente de monitoreo como zabbix tendrás que construir una imagen con Dockerfile y la tendrás que poner a correr con system-docker run.

Si quieres modificar el comportamiento de un servicio que está corriendo se dispone de un utilitario llamado `ros`, por ejemplo para modificar el `/etc/resolv.conf` del contenedor de sistema network. ros también se usa para generar conocer cómo está configurado un servicio en el contenedor y para ayudarte a crear los archivos yaml de cloud-init.

“¿querías docker? dos platos”

Y el segundo plato de docker es precisamente docker común, el que puede estar delegado a nivel de usuarios. En RancherOS se le llama “user docker”, para diferenciarlo del system-docker. User Docker para nosotros es el comando docker de siempre. Tiene su obviamente docker registry y es lo que podemos definir como la “carga útil” del porta contenedor.

Si seguimos la analogía de porta-contenedores marítimo, una vez que aseguramos los servicios para la tripulación y el barco en si mismo, lo que podemos hacer es empezar a cargar contenedores… como que en un porta-contenedores no hay mucho más para hacer, bueno, si podríamos tomar sol en su cubierta, pero seguramente hay lugares más interesantes donde hacerlo.

RancherOS se define como un distribución para correr containers en niveles de desarrollo, testing o producción. Donde los servicios del sistema se presentan en contenedores, reduciendo la carga de administración. Las librerías y los servicios extra han sido eliminados lo que resulta en sistema base muy reducido, simple de actualizar, aplicar parches y mantener.

Se pueden dar cuenta las ventajas de esta arquitectura de armado de distribución ya que la lógica de contenedores se aplica desde el vamos: monitorear un proceso, es monitorear un contenedor; automatizar la configuración de un servicio, es automatizar el deploy de un contenedor.

¿y cómo lo instalamos?

Empezando como cualquier otra distribución de GNU/Linux: a partir de un .ISO de 59MB, de un dump para RaspberryPI de 87MB o de una imagen para máquina virtual, que las hay en Amazon, DigitalOcean, Openstack, Azure.

Antes de usarlo en producción y para pruebas yo lo levanto con docker-machine en una máquina virtual Virtualbox, directamente del ISO, como explica la Guía Rápida de instalación.

Fíjate que con ese tamaño puedes arrancarlo desde un USB y utilizar todo el espacio de disco de tus servidores para volúmenes de tus contenedores docker.

¿y hasta donde podemos llegar con RancherOS?

Pues RancherOS es una excelente plataforma para soluciones de cluster. Podemos subir kubernetes en containers, cargando en cada nodo del cluster los servicios de kubernetes necesarios para las funciones de Master o Minion, dejando la plataforma para los contenedores de carga útil.

Equivalente podemos hacer con un cluster docker-swarm.

Si te has entusiasmado con RancherOS como yo lo estoy, esta es solamente la punta del hilo, si recorres Github o Gitlab encontrarás una cantidad proyectos vinculados a RancherOS.

Rancher Labs Inc, la empresa detrás de RancherOS, provee un panel de administración web de docker llamado Rancher (que se puede instalar independientemente de RancherOS) que se carga también como un contenedor más en RancherOS, dándote una plataforma para tus dockers, si! muchos click para tener tus docker corriendo, aunque también tiene su API.

RancherOS es obviamente una distribución que utiliza software con diferentes licencias, pero su licencia principal es Apache 2.0, lo que nos asegura que podemos estudiarlo a fondo, modificarlo si tenemos necesidad y eventualmente compartir esas modificaciones.

Soy Rodolfo Pilas, en twitter me siguen por @pilasguru y les dejo un saludo a todos, confiando en que este podcast les haya aportado para mejorar y, como siempre, espero sus inquietudes y sugerencias comentando en deployando.me

Hasta la próxima edición.