Desde hace bastante tiempo estaba pensando que distribución sería la ideal para alojar contenedores Docker. Hay que tener en cuenta que nuestro SO anfitrión tiene que ser lo más liviano posible y no disponer de más herramientas de las necesarios para ejecutar contenedores.
Nuestra primera opción suele ser Debian, en este caso la versión 8 (Wheezy) y con la opción de instalación mínima por red. Pero aún así Debian cuenta con demasiados paquetes que no se usarán jamas porque lo que queremos es instalar contenedores que hagan el trabajo.
En este punto lo que nos encontramos fue el mundo de las distribuciones atómicas. Son distribuciones muy ligeras y optimizadas cuyo propósito puede ser albergar otros sistemas. Una de las más famosas es CoreOS. Pero encontramos una distribución todavía más ligera que rizaba el rizo: una distribución para albergar contenedores Docker hecha con contenedores Docker: RancherOS.
RancherOS es una distribución dividida en 2 capas o niveles de contenedores sobre el kernel. La primera capa controla los contenedores del sistema tales como logger, udev,… que mantienen el sistema operativo en funcionamiento. La otra capa, sirve para que el usuario puede arrancar sus contenedores sin interferir con el sistema.
Para evitar problemas de falta de memoria o si un usuario elimina un contenedor del sistema, RancherOS proporciona un comando diferente para gestionar los contenedores de sistema.
Rancheros se encuentra en el repositorio en Github https://github.com/rancher/os que podemos ver en detalle cómo funciona esta distribución.
Instalación de RancherOS
En nuestro caso la instalación del sistema operativo las hacemos sobre máquinas virtuales XenServer pero se puede usar cualquier otro hypervisor o incluso hacer una instalación bare metal.
El primer paso será descargarnos la iso correspondiente al sistema operativo que podemos encontrar en el Github del proyecto para generar la ISO a partir del código o descargarnos directamente la release correspondiente en este enlace. Si no tienes experiencia al generar ISOS o no vas a incluir ningún módulo adicional recomiendo descargar la iso directamente.
Una vez que ya disponemos de la ISO, creamos la máquina virtual y que use esa ISO para el arranque. Dado el pequeño tamaño de la imagen en unos segundos habrá cargado todos los módulos que necesita en memoria RAM y nos pedirá el usuario y contraseña.
Como hemos comentado, la imagen se ha cargado en memoria pero en estos momentos no está instalado en el disco duro y si apagásemos la máquina virtual perderíamos todo el contenido (como en un liveCD).
Para la instalación lo primero que haremos será loguearnos con usuario rancher
y password rancher
. Una vez dentro tenemos que crear un fichero que configuración que es el que var a usar RancherOS en la instalación. Para facilitar las cosas el fichero tiene un formato YAML común.
Una de las peculiaridades de RancherOS es que, por motivos de seguridad, no permite el acceso una vez instalado con usuario y contraseña. La única forma válida es usar una llave pública que guardaremos en el fichero de configuración y con nuestra llave privada accederemos sin necesidad de usuario ni contraseña.
Otro de los puntos a configurar, a parte del la llave ssh, es la red, para poder tener acceso al servidor y que a su vez tenga acceso al exterior. Además nos viene muy bien la posibilidad de acceso desde el exterior ya que RancherOS no dispone de ningún editor de textos y para escribir la configuración haremos un pequeño truco.
En mi caso solo es necesario configurar el ip pública de la máquina y el gateway. Lo hacemos con el comando ip
y route
:
>_ sudo ip addr add xxx.xxx.xxx.xxx/24 dev eth0
>_ sudo route add default gw xxx.xxx.xxx.254
Donde xxx.xxx.xxx.xxx es la ip publica y en nuestro caso el gateway es la máquina 254 de esa red. Una vez hecho esto podemos verificar que desde la máquina tenemos red:
>_ ping -c 2 google.com
Una vez verificada la red ya no será necesario seguir conectado a la máquina y el resto de la instalación la haremos por ssh, aunque eso sí, todavía no podemos apagar o reiniciar la máquina porque perderíamos todas las configuraciones. Creamos ahora en nuestro equipo un fichero llamado cloud-config.yml
en el que vamos a escribir la configuración. En nuestro caso y por usar el caso más sencillo solo tenemos que configurar la llave de acceso y la red pero en la web de RancherOS podrás encontrar muchos más parámetros de configuración:
ssh_authorized_keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDpkGwbXY... xxxx@xxxx
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC4cNDms4... yyyy@yyyy
hostname: rancheros-cd02
rancher:
network:
dns:
nameservers:
- yyy.yyy.yyy.yyy
interfaces:
eth*:
dhcp: false
eth0:
address: xxx.xxx.xxx.xxx/24
gateway: xxx.xxx.xxx.254
mtu: 1500
- ssh_authorized_keys. Es el campo donde vamos a poner todas las llaves. Podemos añadir más de una para dar acceso desde más equipos.
- hostname. Es el nombre que se le va a la máquina.
- rancher. Son los parámetros de configuración, en este caso todo se centra en la red.
- dns. Es opcional, ya que podríamos usar los dns del anfitrión pero en mi caso suelo configurar
8.8.8.8
o8.8.4.4
- interfaces. Se especifica como se configuran las interfaces, en este caso decimos que todas desactiven el DHCP, para evitar problemas, y en nuestro caso a
eth0
le configuramos la ip que definimos antes para el acceso. (IP publica y gateway)
Una vez completado el fichero de configuración lo enviamos por ssh:
>_ scp cloud-config.yml rancher@xxx.xxx.xxx.xxx:/home/rancher/
En estos momentos ya tenemos todo preparado para iniciar la instalación:
>_ ssh rancher@xxx.xxx.xxx.xxx
>_ # Saber la partición donde instalar
>_ sudo fdisk -l
Disk /dev/sda: 274.8 GB, 274877906944 bytes
....
Device Boot Start End Blocks Id System
/dev/sda1 1 98113 268434432 83 Linux
>_ sudo ros install -c cloud-config.yml -d /dev/sda1
Ahora nos preguntará si queremos empezar con la instalación, ya que eliminará todo lo que hayamos guardado. Indicamos que si y comenzará el proceso de instalación que empezará por hacer un docker pull
de aquellos contenedores que necesita para el funcionamiento.
Por último, montará los sistemas de ficheros necesarios, copiará los ficheros de manera persistente en el disco duro e instalará el grub para que arranque el sistema operativo con la máquina. Una vez terminado y si la configuración es correcta aparecerá el prompt y nos pedirá que reiniciemos la máquina.
>_ sudo reboot
Ahora nos podremos conectar por ssh igual que antes y poder utilizar RancherOS.
Instalación de un controlador web
Si accedemos a la máquina, vemos que las limitaciones son enormes y no podemos hacer casi nada y tiene que ser así, aunque duela. La idea es tener una distribución que no tiene lo superfluo, algo para ir en un coche de carreras, no se puede esperar a tener la comodidad de una berlina de lujo. Así que ahora tenemos que dar nuestro sistema de gestión de la instalación más amigable.
Este sistema no es otro que Rancher (no confundir con RancherOS). Una interfaz web para controlar los contenedores, tanto para instalar en máquinas locales cómo manipular servicios externos, tales como Amazon, digitalocean y otros. Aunque se puede instalar cualquier otro gestor, con tal de que se “DOCKERICE“.
Para instalar Rancher sólo hay que ejecutar el siguiente comando:
>_ docker run -d -p 8080:8080 rancher/server
Esto arrancará un contenedor que ya tiene este servicio prestándose por el puerto 8080. Como siempre, todo se hace con contenedores.
Para acceder al servicio lo haremos a través de la url http://xxx.xxx.xxx.xxx:8080
. Nos pedirá que nos autentiquemos con Github, esto lo usa como control de acceso y lo único que haremos será dar permiso a una aplicación para que use nuestra cuenta de Github.
El sistema tiene una simple división, por una parte, los anfitriones que pueden crear contenedores y el arrancar aplicaciones hecha por los contenedores. Por lo tanto, nuestra primera tarea será la creación de una nueva anfitriones, será el mismo lugar donde instalamos RancherOS. Vamos a ir al instalador de hosts, seleccione el personalizado el cual nos devuelve un código de docker que tenemos que ejecutar en el hosts anfitrión. Con esto se creará el agente de Rancher al cual le hemos pasado el ID.
Con este sistema en funcionamiento podemos ir creando contenedores y servicios sin necesidad de acceder al servidor con ssh. Por otro lado, Rancher posee una utilidad de comandos que permite la puesta en marcha de un conjunto de contenedores desde la terminal.
Aunque son dos cosas distintas (distribución y controlador web de contenedores) al llamarse igual o similar suele llevar a confusión. Personalmente me quedo con la ligereza de la distribución RancherOS aunque si quieres usar un sistema sencillo de control de contenedores Rancher puede ser de mucha ayuda.
Una vez más gracias por leer nuestras pequeñas experiencias y animarte a contarnos algo, ya sea en los comentarios o por las redes sociales.
Comentarios recientes