Sobes.tech
Middle

Comment la limitation des ressources est-elle effectuée dans Docker?

sobes.tech IA

Réponse de l'IA

La limitation des ressources dans Docker est réalisée via les namespaces et les groupes de contrôle (cgroups) du noyau Linux. Les namespaces isolent les ressources système, tandis que les cgroups limitent, comptabilisent et isolent l'utilisation des ressources pour des groupes de processus.

Paramètres clés pour limiter les ressources :

  • CPU :
    • --cpu-shares : Valeur pondérée pour répartir le CPU entre les conteneurs lorsqu'il est limité. Valeur par défaut 1024.
    • --cpu-quota : Quantité maximale de temps CPU (en microsecondes) à utiliser pendant la période (--cpu-period). Par défaut 100000.
    • --cpu-period : Période de temps CPU (en microsecondes) pour --cpu-quota.
    • --cpuset-cpus : Indique quels cœurs CPU peuvent utiliser les conteneurs.
  • Mémoire :
    • --memory : Limite stricte de mémoire RAM. Si le conteneur la dépasse, il peut être arrêté.
    • --memory-swap : Limite stricte de la somme de la mémoire RAM et du swap.
    • --memory-reservation : Limite douce de mémoire RAM. Lors de la limitation des ressources, les conteneurs avec une réservation moindre seront évincés en premier vers le swap que ceux avec une memory-reservation plus grande.
    • --kernel-memory : Limite de mémoire du noyau.
    • --memswap-swappiness : À quel point le noyau sera enclin à utiliser le swap pour ce conteneur (de 0 à 100). 0 - très peu enclin, 100 - très enclin.
  • Entrée/sortie de blocs :
    • --blkio-weight : Valeur pondérée pour répartir l'I/O entre les conteneurs.
    • --blkio-weight-device : Valeur pondérée pour un périphérique de bloc spécifique.
    • --device-read-bps : Limite de vitesse de lecture du périphérique (octets par seconde).
    • --device-write-bps : Limite de vitesse d'écriture sur le périphérique (octets par seconde).
    • --device-read-iops : Limite du nombre d'opérations de lecture du périphérique (opérations par seconde).
    • --device-write-iops : Limite du nombre d'opérations d'écriture sur le périphérique (opérations par seconde).
  • Réseau :
    • La limitation des ressources réseau directement via les drapeaux docker run est limitée. En général, on utilise des outils externes, comme tc (contrôle du trafic), netem ou des outils d'orchestration (Kubernetes NetworkPolicy).

Exemples d'utilisation :

# Exécuter un conteneur avec limitation de CPU Shares et mémoire
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Exécuter un conteneur avec limite stricte de CPU Quota et mémoire
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker convertit ces drapeaux en configurations cgroups correspondantes pour le groupe de processus lancé à l'intérieur du conteneur. Ces configurations sont gérées via le système de fichiers virtuel /sys/fs/cgroup à l'intérieur du conteneur (lors du montage) et sur le système hôte.