RancherOS: un Linux más simple para los amantes de Docker

Al igual que las diversas distribuciones de escritorio y servidor Linux, las distribuciones de Linux orientadas a contenedores combinan y combinan varios proyectos y componentes para construir una infraestructura de contenedores completa. Estas distribuciones generalmente combinan un kernel de sistema operativo mínimo, un marco de orquestación y un ecosistema de servicios de contenedor. RancherOS no solo encaja en el molde, sino que lleva el kernel mínimo y el paradigma del contenedor a los extremos.

RancherOS es una plataforma de infraestructura de contenedores que ejecuta Docker directamente sobre un kernel de Linux de tamaño reducido (20 MB). La versión de Rancher de un sistema operativo minimalista es única en el sentido de que incluso el proceso de inicio es un contenedor de servicios Dockerizado. Asimismo, los servicios de nivel de sistema tradicionales, como NTP y DNS, han sido reemplazados por equivalentes en contenedores.

Los sistemas operativos mínimos tienen varias ventajas en la producción. La eliminación de bibliotecas y paquetes innecesarios permite un arranque más rápido, una gestión de versiones más sencilla y una superficie de ataque más pequeña, lo que significa menos parches de seguridad. RancherOS lleva las "actualizaciones" un paso más allá y distribuye todos los servicios del sistema como contenedores Docker. Una actualización de seguridad simplemente significa descargar una nueva imagen y reiniciar el contenedor, un proceso que toma solo unos segundos sin tiempo de inactividad para el servicio.

Como sistema operativo diseñado para contenedores, RancherOS apenas será reconocible para alguien que provenga de un entorno Unix tradicional. Solo se conserva un pequeño subconjunto del kernel; todo lo demás se realiza en contenedores. Pero si está familiarizado con Docker, se sentirá como en casa en RancherOS.

Diseñado para Docker

Para comprender el diseño de RancherOS, debe recordar que los sistemas Unix tradicionales se configuran con poca frecuencia, con aplicaciones superpuestas sobre una imagen base estable. En una infraestructura de contenedores, el sistema operativo es, en cierto sentido, desechable y es probable que se cambie con frecuencia. Aunque podría usar una herramienta como Ansible, SaltStack, Puppet o Chef para configurar y mantener hosts de contenedores, cuando se ejecuta a escala es más fácil usar la misma API para el sistema operativo que para los contenedores y lanzar una nueva instancia de OS.

Por lo tanto, RancherOS elimina todo menos lo esencial para ejecutar Docker y agentes de alojamiento para plataformas de administración de contenedores como Rancher o Kubernetes. De hecho, RancherOS es tan mínimo que solo se admiten dos usuarios: root y rancher. Para comprender este diseño, es mejor comenzar con una ilustración de la arquitectura del sistema:

Ranchero

RancherOS se ha colocado en contenedores hasta el punto de que incluso el proceso de inicio, PID 1, del que se generan todos los demás procesos, es un demonio de Docker. Aunque aparentemente es un pequeño detalle, reemplazar el sistema de inicio tradicional como Sysvinit o Systemd con un proceso de inicio Dockerizado es una de las características centrales de RancherOS, ya que supera algunas de las incompatibilidades en las arquitecturas de Systemd y Docker de una manera limpia. Aunque los desarrolladores de Systemd están avanzando en la resolución de estas incompatibilidades, el diseño de RancherOS asegura cero problemas aquí, ahora y en el futuro, aunque a costa de administrar las cosas de manera un poco diferente.

RancherOS ejecuta dos demonios de Docker, System Docker y User Docker. Todos los servicios a nivel del sistema, como la consola, la administración de dispositivos, NTP y DHCP, son administrados por el system-dockercomando, mientras que las cargas de trabajo del contenedor se administran con el dockercomando tradicional . Estos comandos son idénticos, excepto por los tipos de contenedores en los que pueden operar. Por lo tanto, si desea ver qué servicios de nivel de sistema se están ejecutando, debe ingresar system-docker ps.

Si lo hace, notará que los nombres en el extremo derecho (Syslog, NTP, Udev, etc.) son todos servicios del sistema Linux. Detener, iniciar y actualizar un servicio del sistema se maneja de la misma manera que con cualquier otro contenedor, utilizando la API de Docker.

Tenga en cuenta también que el contenedor de servicios del sistema denominado docker, que inicia System Docker, es un demonio de Docker independiente para administrar contenedores de usuarios. Esta es una importante separación de privilegios. Debido a que todos los contenedores de usuario se ejecutan dentro del contenedor de User Docker, eliminar todos los contenedores de usuario, por ejemplo, no reducirá los contenedores del sistema que ejecutan los servicios de RancherOS.

Puede ver cuáles son las cargas de trabajo del contenedor de usuario tal como lo haría normalmente con Docker, ingresando docker ps. Incluso el shell es un contenedor (el que se llama consola), por lo que puede elegir cuál desea ejecutar. Los shells disponibles actualmente son BusyBox (el predeterminado), Alpine, CentOS, Debian, Fedora y Ubuntu.

Debido a que los servicios del sistema son contenedores, no hay administración de paquetes. Para actualizar un servicio, simplemente detén el contenedor anterior, extrae una nueva versión y reinicia el servicio, todo usando la misma API de Docker.

Instalación y configuración de RancherOS

Lo primero que debe hacer un administrador de Unix tradicional es dejar de pensar en "SO multiusuario" y empezar a pensar en "plataforma de infraestructura". RancherOS está diseñado para aprovisionarse en una variedad de entornos, incluidos bare metal, máquina virtual y una serie de nubes, incluidas AWS y Google, de una manera predecible y automatizada.

Lo instalé en una máquina virtual usando la imagen ISO y no encontré ningún problema en la instalación básica. No hay opciones ni pantallas de configuración. Inicia el sistema operativo (que lo registra automáticamente), establece una partición de disco para RANCHER_STATE, y luego reinicia y configura.

Si echa un vistazo al directorio de configuración, / etc, verá que no hay archivos / etc / rc, o mucho más, y lo que hay no se modifica con un editor de texto. RancherOS tiene el equivalente a tres niveles de ejecución en el sentido tradicional que corresponden a System Docker, User Docker y Container. La configuración la realiza bootcmd, que se ejecuta antes de System Docker y runcmd, que se ejecuta en System Docker, se ejecuta antes de que se inicie User Docker.

RancherOS se configura de dos maneras: manualmente mediante el ros configcomando y en el momento del arranque mediante un archivo de configuración de configuración en la nube. Encontré esto un poco complicado al principio, especialmente si nunca ha usado cloud-config (pista: use un editor compatible con YAML, como Emacs y Tramp Mode, para la configuración inicial). Una vez que pude SSH en la máquina, fue relativamente fácil de usar ros configpara obtener la configuración que quería y escribir el archivo YAML de configuración de nube correspondiente para que entre en vigencia en el próximo reinicio. Debido a que el arranque es rápido, el ciclo de desarrollo aquí también es rápido.

Todo lo que desee configurar se puede hacer con el archivo YAML o ros configcon la carga de módulos del kernel, la configuración de TLS y los parámetros de ajuste del kernel. Sería bueno tener una forma de preservar las inversiones existentes en herramientas de administración de configuración como SaltStack y Puppet, al menos parcialmente, para facilitar la transición a plataformas de contenedores. El Reactor de SaltStack parece que sería bueno para este caso de uso. Tal como está ahora, la mayoría de las personas aprenderán una forma completamente nueva de administrar configuraciones de máquinas. La mayoría de los administradores de contenedores utilizarán la interfaz de usuario web de administración de contenedores de Rancher, por lo que esta tarea probablemente sea más fácil en ese nivel.

Almacenamiento y redes de RancherOS

Mencioné anteriormente que se instala RancherOS especificando un dispositivo para almacenar el estado persistente. En la mayoría de las situaciones, este es el único disco que usará RancherOS. Debido a que todos los servicios se ejecutan en contenedores Docker, usarán volúmenes Docker para almacenamiento persistente, reflejando aproximadamente la arquitectura del sistema. Los volúmenes del sistema proporcionan almacenamiento persistente para los contenedores del sistema, volúmenes de usuario para los servicios de consola y volúmenes de comandos para los binarios utilizados por los servicios del sistema. La gran cantidad de volúmenes y servicios significa que el mountcomando no será de mucha ayuda: hay una página completa de salida incomprensible. Deseo que la documentación explique esto un poco mejor, porque la persistencia es un tema de importancia crítica para comprender.

Rancher admite instantáneas en vivo y copias de seguridad de los volúmenes de Docker, lo que permite a los usuarios realizar copias de seguridad de contenedores y servicios con estado. Esto no está incluido en RancherOS, pero es parte de la función Convoy del sistema de administración de contenedores de Rancher. Con Convoy, puede tomar instantáneas de volúmenes, realizar copias de seguridad incrementales de instantáneas en almacenes de objetos como Amazon S3 y restaurar volúmenes en hosts en ejecución.

El sistema de archivos ZFS es compatible, pero no tuve la oportunidad de probarlo. Dado el estado de la documentación y la restricción de que zpool solo se puede montar en / mnt, recomendaría realizar pruebas exhaustivas antes de usarlo en producción.

Puede realizar toda la configuración de red habitual en RancherOS, pero utilizando archivos de configuración o roscomandos YAML . La configuración de red reside en el espacio de nombres rancher.network.interfaces, donde se configuran DHCP, puertas de enlace, MTU, etc. Se pueden configurar varias NIC, enlaces, puentes y VLAN de la misma manera. DNS está en el espacio de claves rancher.networks.dns. Hasta que se acostumbre a las asignaciones de espacios de nombres, espere investigar un poco.

Actualizaciones y degradaciones de RancherOS

Las actualizaciones y degradaciones in situ no podrían ser más fáciles. Deberá actualizar (o degradar) dos sistemas: el sistema operativo y el motor Docker. Administrar cualquiera de ellos es fácil y solo toma unos segundos usando, lo adivinó, el roscomando. Todo lo que necesita hacer es seleccionar la versión del sistema operativo que desea ejecutar y reiniciar. Ojalá todas las actualizaciones y degradaciones de Unix fueran tan fluidas. Por ejemplo, la degradación de 1.0.1 a 1.0.0 tomó menos de un minuto:

Ranchero

Agradable. Si desea cambiar los motores de Docker, puede hacerlo con la misma facilidad:

ros engine switch docker-1.11.2

RancherOS es un pequeño y agradable sistema operativo. Sus enfoques para la configuración del sistema y la administración de paquetes serán nuevos y diferentes a los administradores de sistemas tradicionales, y la documentación no siempre es la que podría ser. Pero si conoce Docker, sabrá la mayor parte de lo que necesita para ejecutar RancherOS.

La nueva generación de contenedores está alcanzando la madurez y el despliegue de producción de contenedores es una posibilidad genuina para los primeros usuarios. RancherOS facilita la construcción de una infraestructura de alojamiento de contenedores, pero se requieren nuevas habilidades.