Cómo limitar los recursos que se pueden usar desde un contenedor LXD

En un artículo anterior, mostramos Introducción detallada al contenedor LXD y cómo empezar , 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 bloques más grandes en componentes más pequeños. Tiene sentido limitar la cantidad de recursos que puede usar cada componente. ¿pero porque? Obviamente, la cantidad de razones es tan ilimitada como la cantidad de escenarios en los que puede usar contenedores.

Cómo limitar los recursos que se pueden usar desde un contenedor LXD - Linux

¿Cuándo son útiles los límites en los contenedores LXD?

Proporcione servicio y proporcione 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 muchas visitas repentinas, puede ralentizar otros casos. Con los límites necesarios (recursos máximos), solo un contenedor se ralentizará, el resto funcionará con normalidad.

En un escenario similar, puede vender fácilmente diferentes planes de servicio. Un cliente puede pagar el volumen de recursos X y el otro puede pagar el volumen Y. Puede ajustar esto fácilmente con unos pocos comandos simples.

Puede protegerse de formas más simples de ataques de denegación de servicio. Cuando se bombardea un contenedor, alcanzará los límites de uso de recursos. Otros contenedores no se verán afectados.

Tiene dos contenedores, cada uno de los cuales utiliza el 100 % de la CPU disponible. Sin embargo, desea que uno termine el trabajo más rápido que el otro. Por ejemplo, uno podría mostrar un video de un proyecto que necesita mañana. Puede establecer el 90 % del tiempo de CPU en el primero y el 10 % en el segundo.

Por supuesto, usted puede tener sus propias razones. Y si solo usa un contenedor en todo el sistema, es posible que no lo necesite. Pero si está utilizando varios contenedores, siempre deberá establecer algún tipo de restricción. Porque un ataque, error u otra forma de mal comportamiento en una sola instancia de LXD puede afectar y ralentizar todo el sistema. Cuantos más contenedores tenga, más probable es que ocurran estos escenarios.

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

El control de recursos relacionado con las operaciones del disco deberá tener ZFS instalado. Si Seguí el tutorial aquí. Ya ha sido instalado. De lo contrario, instale las utilidades de ZFS como se muestra en el tutorial y luego reinicie el comando a continuación. Elija ZFS cuando se le pregunte qué almacenamiento de back-end usar.

sudo lxd init

Reducir el uso de la memoria

En los comandos a continuación, reemplace "nombre_contenedorCon el nombre real de su contenedor. Poniendo un límite de memoria simple como la siguiente entrada:

lxc config set container_name limits.memory 100MB

escribir "GB" en vez de "MBSi 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 el contenedor, escriba:

lxc config set container_name limits.cpu 2

Para seleccionar núcleos de CPU específicos, utilice:

lxc config set container_name limits.cpu 0-0

Esto solo hará que el contenedor use la primera CPU. Para usar el segundo, puede escribir 1-1. Para usar todos los núcleos en la CPU del 0 al 3, puede escribir XNUMX-XNUMX.

Otro tipo de limitación es la cantidad de tiempo de CPU que puede usar el contenedor.

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

Esto permitiría que el contenedor use solo diez milisegundos de tiempo de CPU fuera de cada 100 milisegundos, que es aproximadamente el 10 % de una sola CPU.

Reducir el uso del disco

Para limitar los recursos relacionados con el disco, primero debe agregar el dispositivo de disco raíz a su contenedor. Ya está ahí por defecto, extraído del perfil LXD por defecto. Pero no puede cambiar su configuración por contenedor hasta que lo haga.

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

si tu nombras alberca de manera diferente, reemplace la palabra "predeterminado" con el nombre de su grupo de almacenamiento. Si olvidaste su nombre, puedes verlo con:

lxc storage list

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 funcionan en el presente.

Limitar el uso de la red

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

lxc network list

reemplazar "lxdbr0Si es necesario (si el puente tiene un nombre diferente en su caso). Si no eligió el tipo de red como puente (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 deba reemplazar la palabra "nictype" con lo que haya usado para su red LXD también.

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

Finalmente, establezca restricciones de entrada (descarga) y/o salida (carga) de la red.

lxc config device set container_name eth0 limits.ingress 1Mbit

1 megabyte es uno megabit (no megabyte). Un byte tiene 8 bits, lo que significa que esto limitará las descargas a alrededor de 1/8 = 0.125 Mbps, que es aproximadamente 120 KB. Entonces, si desea descargarlo a 1 MB/seg (megabyte), multiplíquelo por 8 y establezca el máximo en 8 Mbit.

Para realizar el pago, utilice:

lxc config device set container_name eth0 limits.egress 1Mbit

Conclusión

Esto cubre las funciones más utilizadas relacionadas con la restricción del uso de recursos. Pero hay muchas variables que puede configurar usando el grupo de dispositivos de configuración lxc y el grupo de configuración lxc. Puede leer más sobre las propiedades de contenedores personalizables en la página GitHub de LXD.

fuente
Ir al botón superior