Ejecute kubernetes dentro de LXC


En este artículo, le diré cómo ejecutar kubernetes master dentro de un contenedor LXC.
Este método funciona bastante bien con Proxmox y puede considerarse como una alternativa al despliegue clásico de kubernetes con varios asistentes.


¿Por qué proxmox?


Porque proxmox listo para usar ofrece muchas funciones útiles.
Proxmox incluye funciones de alta disponibilidad, migración, copias de seguridad automáticas, control de acceso y todo esto es accesible a través de una interfaz gráfica simple.


También puede implementar la configuración de kubernetes más simple con un solo asistente, proxmox proporcionará alta disponibilidad.
Este método es ideal para implementar pruebas o pequeños grupos.


Para implementaciones más grandes, se recomienda colocar etcd en contenedores separados que usarán discos locales rápidos y combinarlos en un clúster.
Sin embargo, kubernetes-master en sí mismo puede seguir siendo un contenedor ha normal, no necesita tener un almacenamiento rápido.


Además, si está leyendo este artículo, supongo que en la mayoría de los casos ya tiene algún tipo de infraestructura en Proxmox, y tal vez desee tener una interfaz única para administrar sus servicios.


¿Por qué LXC?


Kubernetes se iniciará sin problemas dentro de una máquina virtual normal. Pero los contenedores LXC proporcionan la flexibilidad que no está disponible con las máquinas virtuales convencionales.


De hecho, los contenedores LXC no proporcionan un aislamiento completo de los contenedores del host; por el contrario, todos los procesos dentro de los contenedores comienzan como procesos de host normales, solo en un espacio de nombres separado.


Este método le ofrece un buen rendimiento pero impone algunas limitaciones en nuestro caso.


Discutiré estas limitaciones y cómo tratarlas en este artículo.


Configuracion


Dado que, de forma predeterminada, los contenedores no pueden cargar módulos del kernel por sí mismos, debe configurarlos para que se carguen directamente en los hipervisores.


Usaremos el controlador de overlay para Docker, así que esto es todo lo que necesitamos:


 echo overlay >> /etc/modules 

Ahora necesitamos agregar más privilegios para nuestro contenedor para permitirle ejecutar otros contenedores en su interior, agregue estas líneas a la configuración de su contenedor:


 lxc.apparmor.profile: unconfined lxc.cap.drop: lxc.cgroup.devices.allow: a lxc.mount.auto: proc:rw sys:rw 

A partir de la versión v11.0, kubelet requiere el modo compartido para todos los montajes del host.


Este truco sucio le permitirá lograr esto, dentro del contenedor LXC, ejecute:


 echo '#!/bin/sh -e mount --make-rshared /' > /etc/rc.local 

Esta acción agregará el mount --make-rshared / a /etc/rc.local y lo ejecutará cada vez que se cargue el contenedor.


Además, si planea usar HA-manager en proxmox, tenga en cuenta que en este momento hay un error desagradable # 1842 , que mata por la fuerza los procesos del contenedor durante la migración, lo que puede generar procesos zombies o incluso bloquear su almacenamiento.


Esto no es bueno, afortunadamente hay una solución simple:


 sed -i 's/forceStop => 1/forceStop => 0/' /usr/share/perl5/PVE/HA/Resources/PVECT.pm 

Además, puede agregar las siguientes opciones para su acoplador:


 --storage-driver overlay2 --iptables=false --ip-masq=false 

Copie docker.service de /lib a /etc para anular sus opciones:


 cp /{lib,etc}/systemd/system/docker.service 

Ahora agregue estas opciones a la sección ExecStart .


Eso es todo, después de estos pasos, la instalación estándar de kubeadm debería funcionar sin problemas.

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


All Articles