Sobes.tech
Middle

Cum se realizează limitarea resurselor în Docker?

sobes.tech AI

Răspuns de la AI

Limitarea resurselor în Docker se realizează prin namespace-uri și control groups (cgroups) ale nucleului Linux. Namespace-urile izolează resursele sistemului, iar cgroups limitează, contabilizează și izolează utilizarea resurselor pentru grupurile de procese.

Parametrii cheie pentru limitarea resurselor:

  • CPU:
    • --cpu-shares: Valoare ponderată pentru distribuirea CPU între containere atunci când este limitată. Valoare implicită 1024.
    • --cpu-quota: Cantitatea maximă de timp CPU (în microsecunde) pentru utilizare în perioada (--cpu-period). Implicit 100000.
    • --cpu-period: Perioada de timp CPU (în microsecunde) pentru --cpu-quota.
    • --cpuset-cpus: Indică ce nuclee CPU pot utiliza containerele.
  • Memorie:
    • --memory: Limita strictă de memorie RAM. Dacă containerul o depășește, poate fi închis.
    • --memory-swap: Limita strictă pentru suma memoriei RAM și swap.
    • --memory-reservation: Limita moale de memorie RAM. La limitarea resurselor, containerele cu o rezervare mai mică vor fi evacuate mai devreme în swap decât cele cu o memory-reservation mai mare.
    • --kernel-memory: Limita de memorie a nucleului.
    • --memswap-swappiness: Cât de dispus va fi nucleul să utilizeze swap pentru acest container (de la 0 la 100). 0 - foarte nedispus, 100 - foarte dispus.
  • I/O pe bloc:
    • --blkio-weight: Valoare ponderată pentru distribuirea I/O între containere.
    • --blkio-weight-device: Valoare ponderată pentru un dispozitiv de bloc specific.
    • --device-read-bps: Limita vitezei de citire a dispozitivului (octeți pe secundă).
    • --device-write-bps: Limita vitezei de scriere pe dispozitiv (octeți pe secundă).
    • --device-read-iops: Limita numărului de operații de citire a dispozitivului (operații pe secundă).
    • --device-write-iops: Limita numărului de operații de scriere pe dispozitiv (operații pe secundă).
  • Rețea:
    • Limitarea resurselor de rețea direct prin flag-urile docker run este limitată. De obicei, se folosesc instrumente externe, precum tc (traffic control), netem sau instrumente de orchestrare (Kubernetes NetworkPolicy).

Exemple de utilizare:

# Pornirea unui container cu limitare CPU Shares și memorie
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Pornirea unui container cu limită strictă de CPU Quota și memorie
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker convertește aceste flag-uri în configurații cgroups corespunzătoare pentru grupul de procese lansat în interiorul containerului. Aceste configurații sunt gestionate prin sistemul de fișiere virtual /sys/fs/cgroup din interiorul containerului (la montare) și pe sistemul gazdă.