Comment limiter les ressources pouvant être utilisées à partir d'un conteneur LXD

Dans un article précédent, nous avons proposé Introduction détaillée au conteneur LXD et comment démarrer Si vous ne connaissez pas le Statut.

Dans la plupart des cas, plusieurs conteneurs seront utilisés sur le même système pour diviser des blocs plus grands en composants plus petits. Il est logique de déterminer la quantité de ressources que chaque composant peut utiliser. Mais pourquoi? De toute évidence, le nombre de raisons est illimité, tel que le nombre de scénarios dans lesquels vous pouvez utiliser des conteneurs.

Comment limiter les ressources pouvant être utilisées à partir d'un conteneur LXD

Quand les limites sur les conteneurs LXD sont utiles

Fournir un service et donner à chaque client une instance LXD. Par exemple, il peut s'agir d'un serveur volumineux et chaque site Web client héberge un conteneur distinct. Si un site Web reçoit beaucoup de trafic soudain, cela peut ralentir d'autres cas. Avec les limites nécessaires (ressources maximales), un seul conteneur ralentira et le reste fonctionnera normalement.

Dans un scénario similaire, vous pouvez facilement vendre différents plans de services. Un client peut payer pour la taille de ressource X, et l'autre peut payer pour la taille Y. Vous pouvez facilement l'ajuster avec quelques commandes simples.

Vous pouvez vous protéger des formes les plus simples d'attaques par déni de service. Lorsqu'un conteneur est bombardé, il atteindra les limites d'utilisation des ressources. Les autres conteneurs ne seront pas affectés.

Vous disposez de deux conteneurs qui utilisent chacun 100% du processeur disponible. Cependant, vous voulez que l'un termine la tâche plus rapidement que l'autre. Par exemple, on peut montrer une vidéo d'un projet dont vous avez besoin demain. Vous pouvez définir 90% du temps CPU sur le premier et 10% sur le second.

Bien sûr, vous pouvez avoir vos propres raisons. Si vous n'utilisez qu'un seul conteneur sur l'ensemble du système, il est possible que vous n'en ayez pas besoin. Mais si vous utilisez plusieurs conteneurs, vous devrez toujours définir certaines restrictions. Toute attaque, erreur ou autre forme d'inconduite dans une seule instance de LXD pouvant affecter et ralentir l'ensemble du système. Plus vous avez de conteneurs, plus ces scénarios sont probables.

Comment définir des limites de ressources sur les conteneurs LXD

Le contrôle des ressources liées au disque nécessitera l'installation de ZFS. Si J'ai suivi le tutoriel ici , Il a déjà été installé. Sinon, installez les utilitaires pour ZFS comme décrit dans le tutoriel, puis exécutez la commande ci-dessous. Choisissez ZFS lorsque vous êtes interrogé sur l’arrière-plan de stockage à utiliser.

sudo lxd init

Limiter l'utilisation de la mémoire

Dans les commandes ci-dessous, remplacez "nom_conteneur«Avec le nom réel de votre conteneur. Définissez une limite de mémoire simple comme l'entrée suivante:

lxc config set container_name limits.memory 100MB

Type "GB" Au lieu de "MB"Si vous souhaitez utiliser un gigaoctet au lieu d'un mégaoctet.

Limiter l'utilisation du processeur

Lorsque vous souhaitez spécifier le nombre de cœurs de processeur pouvant être utilisés par le conteneur, tapez:

lxc config set container_name limits.cpu 2

Pour spécifier des cœurs de processeur spécifiques, utilisez:

lxc config set container_name limits.cpu 0-0

Cela ne fera que rendre le conteneur en utilisant le premier processeur. Pour utiliser une seconde, vous pouvez taper 1-1. Pour utiliser tous les cœurs de la CPU I-III, vous pouvez taper 0-3.

Un autre type de restriction est la quantité de temps processeur que le conteneur peut utiliser.

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

Cela permettrait au conteneur d'utiliser seulement dix millisecondes de temps processeur sur chaque millisecondes 100, c'est-à-dire environ 10% d'un processeur unique.

Réduire l'utilisation du disque

Pour réduire les ressources de disque, vous devez d'abord ajouter un périphérique de disque racine à votre conteneur. Il existe déjà par défaut, extrait du profil LXD par défaut. Mais vous ne pouvez pas modifier ses paramètres par conteneur tant que vous ne le faites pas.

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

Si vous le nommez pool Remplacez le mot "défaut" par le nom de votre groupe de stockage. Si vous oubliez leur nom, vous pouvez le voir avec:

lxc storage list

Pour limiter l'espace disque qu'une instance LXD peut utiliser:

lxc config device set container_name root size 7GB

Malheureusement, les limites d'E / S (lecture / écriture "vitesses" et IOPS) Maintenant.

Réduire l'utilisation du réseau

Comme pour les disques, vous devez d'abord ajouter un périphérique Ethernet par défaut que vous pouvez configurer. Recherchez le nom du pont réseau reliant les instances LXD au monde extérieur.

lxc network list

Remplacer "lxdbr0"Si nécessaire (si le pont est nommé différemment dans votre cas). Si vous ne choisissez pas le type de réseau comme pont (réponse par défaut), vous devrez peut-être ajuster la commande ci-dessous lors de la configuration de "lxd init" pour refléter votre sélection. Par exemple, vous devrez peut-être remplacer "nictype" par tout ce que vous avez utilisé pour votre réseau LXD.

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

Enfin, limitez l’accès au réseau (téléchargement) et / ou sortez (téléchargement).

lxc config device set container_name eth0 limits.ingress 1Mbit

1 est un mégabit mégabit (Pas mégaoctet). Un octet contient 8 bits, ce qui signifie que cela limitera les téléchargements à environ 1/8 = 0.125 Mbps, soit environ 120 Ko. Donc, si vous souhaitez le télécharger à 1 Mo / s (Mo), multipliez-le par 8 et définissez le maximum sur 8 Mbit.

Pour sortir, utilisez:

lxc config device set container_name eth0 limits.egress 1Mbit

Conclusion

Cela couvre les fonctionnalités les plus fréquemment utilisées liées à la limitation de l'utilisation des ressources. Mais il y a beaucoup de variables que vous pouvez ajuster en utilisant le jeu de configuration lxc et le jeu de configuration lxc. Vous pouvez en savoir plus sur les propriétés du conteneur éditable sur une page. GitHub de LXD.

Aller au bouton supérieur