Talos - "Una distribución moderna de Linux para Kubernetes" introducida



El otro día, el ingeniero estadounidense Andrew Rynhard presentó un proyecto interesante: una distribución compacta de Linux diseñada específicamente para ejecutar clústeres de Kubernetes. Recibió el nombre de la mitología griega antigua: Talos .

El proyecto apareció inspirado en el tweet de Kelsey Hightower en 2015, en el que dijo que solo teníamos que esperar a que apareciera el KubeOS condicional (después de lo cual la vida de los entornos nublados será finalmente maravillosa):



Por cierto, con el advenimiento de Talos, esta historia continuó : alguien respondió un tweet histórico de que tal sistema ya había aparecido, y el autor de Talos dijo que estaría contento si Kelsey miraba el proyecto. La reacción de este último, sin embargo, no se ha seguido (todavía).

Aparentemente, una persona estaba desarrollando Talos (que se representaba a sí mismo como parte de una empresa completa, Autonomía ) , le llevó más de un año. Y ahora, cuando se alcanza el estado de disponibilidad mínima, el autor espera que otros representantes de la comunidad nativa de Kubernetes / cloud se unan a él. Entonces, ¿cuál es la esencia del proyecto?

Principios y características de Talos


Talos se posiciona como una distribución moderna de Linux creada específicamente (¡y exclusivamente!) Para Kubernetes. Para lograr el objetivo en su implementación, adhiérase a los siguientes enfoques:

Minimalismo


El minimalismo ubicuo es una de las piedras angulares de la arquitectura Talos. Uno de los ejemplos sorprendentes aquí es el servicio de inicialización utilizado, que (al contrario de las tendencias modernas en esta área) sigue la filosofía de UNIX de que "cada programa hace una cosa, pero es bueno":

Queríamos hacer que init se enfocara en una sola tarea: lanzar Kubernetes. Simplemente no tiene mecanismos para ninguna otra acción.

Los desarrolladores fueron más allá y privaron a su sistema operativo del acceso de los usuarios al host familiar para los administradores del sistema: Talos no tiene shells de comandos, ni un demonio SSH, ni siquiera la capacidad de iniciar sus propios procesos en el host. Y realmente: ¿por qué todo esto si necesitas ejecutar Kubernetes y más? Casi todos los procesos en Talos operan dentro de contenedores.

Sin embargo, dado que el mundo no es tan perfecto (para que el sistema operativo funcione completamente "por sí mismo"), todavía hay herramientas para operar el sistema operativo:

  • osd daemon, implementado según el principio de proporcionar los privilegios mínimos necesarios (Principio de privilegio mínimo) y ofrecer una API (basada en gRPC) para administrar nodos;
  • La utilidad osctl CLI le permite comunicarse con el servicio osd, que se ejecuta en cada nodo.

Por lo tanto, se ha implementado un conjunto de capacidades operativas básicas: reiniciar servicios y nodos de clúster, recibir registros de kernel (dmesg) y de contenedores, insertar datos en archivos de configuración de nodos, etc.

Todos estos componentes (init, osd, osctl ...), así como algunos otros en el kit de distribución, están escritos en Go . Por cierto, todo el código fuente se distribuye bajo los términos de la licencia de código abierto Mozilla Public License 2.0.

Seguridad


El enfoque minimalista descrito anteriormente (todo lo que es necesario solo para ejecutar Kubernetes) + el principio de emitir solo privilegios mínimos por sí mismos reduce la superficie de ataque potencial. También en Talos:

  • el kernel incluido se configura de acuerdo con las recomendaciones del Proyecto de autoprotección del kernel ( KSSP ), que se enfoca en la capacidad del kernel para proteger de manera independiente contra posibles errores y vulnerabilidades (en lugar de utilizar las utilidades del espacio del usuario para los mismos fines);
  • el sistema de archivos raíz está montado en solo lectura, lo que, combinado con la ausencia de shells / SSH, hace que el sistema sea inmutable;
  • usa TLS bidireccional (mTLS) para interactuar con la API;
  • Los ajustes y configuraciones de Kubernetes se aplican de acuerdo con las pautas de CIS (Centro de Seguridad de Internet).

Una ventaja adicional que surge del minimalismo y se enfoca en lo inmutable es la previsibilidad del sistema en el comportamiento (ya que la cantidad de factores que afectan el medio ambiente disminuye).

Relevancia


Los autores prometen basar Talos en la penúltima versión ascendente de Kubernetes (sin embargo, K8s 1.13.3 es compatible en este momento) y la última versión del kernel LTS Linux disponible (ahora usando 4.19.10).

Componentes del sistema


Los componentes principales de la distribución (además del núcleo y las utilidades "propietarias") son:

  • musl-libc - como una biblioteca estándar de C;
  • golang - para init y sus otras herramientas;
  • gRPC: para la API;
  • containerd: para iniciar los servicios del sistema en contenedores (utilizados con el complemento CRI para Kubernetes);
  • kubeadm: para implementar clústeres.

Trabajar con talos


En la documentación del proyecto se proporcionan ejemplos de implementación de Talos para implementaciones de AWS, KVM y Xen. Para ilustrar rápidamente cómo se ve esto, aquí está el algoritmo de instalación para máquinas virtuales KVM de Linux:

1. Instalación del nodo maestro en el host:

 docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdb -f -p bare-metal \ -u http://${IP}:8080/master.yaml 

2. Crear una VM:

 virt-install -n master --description "Kubernetes master node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdb \ --network bridge=br0,model=e1000,mac=52:54:00:A8:4C:E1 \ --graphics none --boot hd --rng /dev/random 

3. Acciones similares para crear un nodo de trabajo:

 docker run --rm --privileged --volume /dev:/dev \ autonomy/talos:latest image -b /dev/sdc -f -p bare-metal \ -u http://${IP}:8080/worker.yaml virt-install -n master --description "Kubernetes worker node." \ --os-type=Linux --os-variant=generic --virt-type=kvm --cpu=host \ --vcpus=2 --ram=4096 --disk path=/dev/sdc \ --network bridge=br0,model=e1000,mac=52:54:00:B9:5D:F2 \ --graphics none --boot hd --rng /dev/random 

La configuración de la interacción entre osd y osctl básicamente se reduce a generar claves para su autenticación (mTLS ya mencionado) y se describe aquí .

El trabajo adicional con ellos se reduce a comandos como osctl reboot osctl stats , osctl stats osctl logs y osctl logs . Demostración de la salida de contenedores en el espacio de nombres k8s.io :

 $ osctl ps -k NAMESPACE ID IMAGE PID STATUS k8s.io 0ca1… sha256:da86… 2341 RUNNING k8s.io 356f… sha256:da86… 2342 RUNNING … k8s.io e42e… sha256:4ff8… 2508 RUNNING k8s.io kubelet k8s.gcr.io/… 2068 RUNNING 

El proceso de configuración de un clúster de Kubernetes con Talos está disponible aquí (nodos mater) y aquí (trabajadores).

Estado y perspectivas


El proyecto está en la etapa de versión alfa (la última versión es v0.1.0-alpha.18 ) y, por supuesto, en esta etapa se parece más a un experimento interesante que a algo realmente cercano a la producción.

Sin embargo, el aumento de interés en Talos después de su reciente anuncio (ya más de 600 estrellas en GitHub) y el llamado del único autor para la creatividad conjunta pueden servir como un excelente incentivo para su desarrollo.


Actividad del proyecto Talos en los últimos días

Como mínimo, la distribución contiene las ideas nativas de la nube relevantes para el mundo, cuya implementación de calidad es cuestión de tiempo.

PS


Lea también en nuestro blog:

Source: https://habr.com/ru/post/440810/


All Articles