Cómo limitar los recursos que puede usar un contenedor LXD

En un artículo anterior, puede explorar qué es LXD y cómo comenzar con él, en caso de que no esté familiarizado con la plataforma.

En la mayoría de los casos, utilizará varios contenedores en el mismo sistema para dividir un todo más grande en componentes más pequeños. Tiene sentido limitar la cantidad de recursos que puede usar cada componente. ¿Pero por qué? Obviamente, la cantidad de razones es tan ilimitada como los escenarios para los que puede usar contenedores.

Cuándo pueden ser útiles los límites en los contenedores LXD

  • Brindar un servicio y dar a cada cliente una instancia de LXD. Por ejemplo, este podría ser un servidor grande y usted aloja cada sitio web de cliente en un contenedor separado. Si un sitio web recibe una ráfaga repentina de tráfico, esto podría ralentizar las otras instancias. Con límites, solo un contenedor disminuirá la velocidad y el resto funcionará normalmente.
  • En un escenario similar, puede vender fácilmente diferentes planes de servicio. Un cliente puede pagar X cantidad de recursos y el otro puede pagar Y cantidad. Y puede ajustar esto fácilmente con unos pocos comandos simples.
  • Puede protegerse contra formas más simples de ataques de denegación de servicio. Cuando un contenedor es bombardeado, alcanzará sus límites de uso de recursos. Los otros contenedores no se verán afectados.
  • Tiene dos contenedores, cada uno de los cuales usará el 100 % del tiempo de CPU disponible. Sin embargo, desea que uno termine el trabajo más rápido que el otro. Por ejemplo, uno podría renderizar un video para un proyecto que necesita mañana. Puede asignar el 90% del tiempo de CPU al primero y el 10% al segundo.

Por supuesto, usted puede tener sus propias razones. Y si solo usa un contenedor en todo el sistema, es posible que ni siquiera necesite esto. Pero si usa varios contenedores, casi siempre necesita establecer algunos tipos de límites. Porque un ataque, un error o alguna otra forma de mal comportamiento en una instancia de LXD puede afectar todo el sistema y ralentizarlo. Cuantos más contenedores tenga, mayor será la probabilidad de que se produzca tal escenario.

Cómo establecer límites de recursos en contenedores LXD

El control de recursos relacionado con las operaciones del disco necesitará la instalación de ZFS. Si siguió el tutorial aquí, ya está instalado. De lo contrario, instale las utilidades de ZFS como se indica en el tutorial y luego vuelva a ejecutar el comando a continuación. Elija ZFS cuando se le pregunte qué backend de almacenamiento usar.

Limitar el uso de la memoria

En los comandos a continuación, reemplace «container_name» con el nombre real de su contenedor. Establecer un límite de memoria es tan simple como ingresar:

lxc config set container_name limits.memory 100MB

Escriba «GB» en lugar de «MB» si desea utilizar gigabytes en lugar de megabytes.

Limite el uso de la CPU

Cuando desee limitar la cantidad de núcleos de CPU que puede usar un contenedor, escriba:

lxc config set container_name limits.cpu 2

Para «anclar» a núcleos de CPU específicos, utilice:

lxc config set container_name limits.cpu 0-0

Esto haría que el contenedor solo use la primera CPU. Para usar el segundo, escribiría 1-1. Para usar todos los núcleos de la CPU del primero al tercero, debe escribir 0-3.

Otro tipo de límite es cuánto tiempo de CPU puede usar un contenedor.

lxc config set container_name limits.cpu.allowance 10ms/100ms

Esto solo permitiría que el contenedor use diez milisegundos de tiempo de CPU cada 100 milisegundos, es decir, alrededor del 10 % de un núcleo de CPU.

Limitar el uso del disco

Para limitar los recursos relacionados con el disco, primero debe agregar un dispositivo de disco raíz a su contenedor. Ya existe de forma predeterminada, heredado del perfil LXD predeterminado. Pero no puede cambiar su configuración por contenedor hasta que haga esto.

lxc config device add container_name root disk pool=default path=/

Si nombró su grupo de manera diferente, reemplace «predeterminado» con el nombre de su grupo de almacenamiento. Si olvidó su nombre, puede mostrarlo con:

Para limitar el espacio en disco que puede usar una instancia LXD:

lxc config device set container_name root size 7GB

Desafortunadamente, los límites de E/S (“velocidades” de lectura/escritura e IOPS) no trabajo en este momento.

Limitar el uso de la red

Al igual que con los discos, primero debe agregar un dispositivo Ethernet virtual que pueda configurar. Encuentre el nombre de su puente de red que conecta sus instancias LXD con el mundo exterior.

Reemplace «lxdbr0» si es necesario (si el puente tiene un nombre diferente en su caso). Si no eligió el tipo de red como puenteada (respuesta predeterminada), en los pasos de configuración de «lxd init», es posible que deba adaptar el siguiente comando para reflejar su elección. Por ejemplo, es posible que también deba reemplazar «nictype» con lo que haya usado para su red LXD.

lxc config device add container_name eth0 nic name=eth0 nictype=bridged parent=lxdbr0

Finalmente, establezca límites en la entrada (descarga) y/o salida (carga) de la red.

lxc config device set container_name eth0 limits.ingress 1Mbit

1Mbit es un megabit (no megabyte). Un byte contiene 8 bits, lo que significa que esto limitará las descargas a alrededor de 1/8 = 0,125 Mbits por segundo, aproximadamente 120 kilobytes. Por lo tanto, si desea que se descargue con 1 MB/s (megabyte), multiplique por 8 y establezca el límite de entrada en 8 Mbit.

Para la salida, utilice:

lxc config device set container_name eth0 limits.egress 1Mbit

Conclusión

Esto cubre las propiedades más utilizadas relacionadas con los límites de recursos. Pero hay muchas más variables que puede configurar con lxc config device set y lxc config set. Puedes lea más sobre estas propiedades de contenedor ajustables en la página de GitHub de LXD.

Publicaciones Similares

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *