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 omemory-reservationmai 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 runeste limitată. De obicei, se folosesc instrumente externe, precumtc(traffic control), netem sau instrumente de orchestrare (Kubernetes NetworkPolicy).
- Limitarea resurselor de rețea direct prin flag-urile
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ă.