Debian 9-10 con LXC 3.1


Bueno en mi aventura de contenedores y negado a usar Docker (simplemente no me gusta) decidí usar LXC y no LXD de Canonical, simplemente y a secas LXC, cuando use LXC 2.x en Debian 9 (stable) no tuve problemas, pero quería probar la nueva versión porqué corregía “bugs” entonces me ven metido en un lió en LXC 3.1, así que como lo resolví (con ayuda de la comunidad de Telegram Fedora México).

El ambiente es un Debian que inició en Stable (Stretch) y lo pase a Testing (Buster)

  • Modelo: Dell T1650
  • Procesador: Xeon E-1240 V2
  • HDD: 1.5 TB
  • RAM: 8GB

Primero lo primero

¿qué es LXC?

LXC es una tecnología de virtualización en el nivel de sistema operativo para Linux. LXC permite que un servidor físico ejecute múltiples instancias de sistemas operativos aislados, conocidos como Servidores Privados Virtuales o Entornos Virtuales.

Para instalarlos es muy simple:

sudo apt-get install lxc

Y para crear un contenedor es:

sudo lxc-create -n debian-9 -t debian

Nota: la lista de imágenes posibles (templates) son estas o aquí:

Linux Containers Image server

Pero el “chiste” de un contenedor es poder limitarlo, es así que me dispuse a limitar sus recursos, para ello debo apoyarme de CGroups.

¿Qué es cgroups?

cgroups es una característica del kernel de Linux que limita, explica y aísla el uso de recursos de una colección de procesos. Los ingenieros de Google comenzaron a trabajar en esta función en 2006 con el nombre de “contenedores de proceso”.

Para ello debía verificar que LXC podía usar esta magnífica creación, con lo que me apoye del comando:

sudo lxc-checkconfig

Captura de pantalla 2019-06-29 a la(s) 15.03.23

Y la ventaja de usar cgroups es que podría modificar los recursos desde el arranque o en ejecución. Para hacerlo en el arranque del contenedor es modificando su archivo config. Los contenedores se almacenan en el path:

/var/lib/lxc

Y dentro de ella están los contenedores, por ejemplo hice uno que se llama “debian-9” entonces la ruta es:

/var/lib/lxc/debian-9

y el archivo está en:

/var/lib/lxc/debian-9/config

Y quería usar la siguiente configuración:

lxc.cgroup.cpu.shares = "250"
lxc.cgroup.cpuset.cpus = "0"
lxc.cgroup.memory.limit_in_bytes = "512M"
lxc.cgroup.memory.memsw.limit_in_bytes = "1G"

Pero tenía problemas con “memory.memsw.limit_in_bytes”, buscando entre foros y muchos lugares decían que no era posible, entonces me cuestioné pero en 2.x la podía usar.

Y como bien me dijeron un upgrade debe ser mejorar funcionalidad no restringir o quitar funcionalidad… pero eso lo dejaremos para otro post.

Entonces entre la ayuda del grupo de Fedora México salió el tema de que posiblemente mi kernel del HOST no lo estaba soportando.

Entonces puse unos flags (banderas) en mi grub, agregando a la variable GRUB_CMDLINE_LINUX_DEFAULT, lo siguiente:

GRUB_CMDLINE_LINUX_DEFAULT="cgroup_enable=memory swapaccount=1 "

Ahora tenía que actualizar el grub

sudo update-grub

Después simplemente es reiniciar.

Nota: Si ni con los flags funciona debe recompilar su kernel para agregar esta opción CONFIG_MEMCG_SWAP_ENABLED (referencia aquí).

Ahora ya podía iniciar mi contenedor sin problema, para iniciar el contenedor es:

sudo lxc-start -n debian-9

Aquí la evidencia que me lo permitió.

Captura de pantalla 2019-06-29 a la(s) 15.19.30

Ahora incluso podría hacerlo en tiempo de ejecución con el siguiente comando:

sudo lxc-cgroup -n debian-9 memory.memsw.limit_in_bytes "2G"

Y así ya pude hacer lo que deseaba.

Referencias:

Y próximamente haré un post de usando LXC con LVM.

Recuerden que es gratis compartir y comentar, Saludos!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.