Sobes.tech
Middle

Kako se vrši ograničenje resursa u Dockeru?

sobes.tech АИ

Одговор од АИ

Ograničenje resursa u Docker-u realizuje se putem namespaces i control groups (cgroups) Linux jezgra. Namespaces izoliraju sistemske resurse, a cgroups ograničavaju, prate i izoliraju korišćenje resursa za grupe procesa.

Ključni parametri za ograničenje resursa:

  • CPU:
    • --cpu-shares: Vaga vrednost za raspodelu CPU između kontejnera kada je ograničen. Podrazumevana vrednost je 1024.
    • --cpu-quota: Maksimalno vreme CPU (u mikrosekundama) za korišćenje tokom perioda (--cpu-period). Podrazumevano je 100000.
    • --cpu-period: Period vremena CPU (u mikrosekundama) za --cpu-quota.
    • --cpuset-cpus: Navodi koja CPU jezgra mogu koristiti kontejneri.
  • Memory:
    • --memory: Čvrto ograničenje na RAM. Ako kontejner pređe ovo ograničenje, može biti zaustavljen.
    • --memory-swap: Čvrto ograničenje na zbir RAM-a i swap-a.
    • --memory-reservation: Meko ograničenje na RAM. Pri ograničenju resursa, kontejneri sa manjim reservation biće ranije prebačeni u swap nego oni sa većim memory-reservation.
    • --kernel-memory: Ograničenje na memoriju jezgra.
    • --memswap-swappiness: Koliko će jezgro biti spremno da koristi swap za ovaj kontejner (od 0 do 100). 0 - vrlo nevoljno, 100 - vrlo voljno.
  • Block I/O:
    • --blkio-weight: Vaga vrednost za raspodelu I/O između kontejnera.
    • --blkio-weight-device: Vaga vrednost za pojedinačno uređaj blok I/O.
    • --device-read-bps: Limit brzine čitanja sa uređaja (u bajtovima u sekundi).
    • --device-write-bps: Limit brzine zapisivanja na uređaj (u bajtovima u sekundi).
    • --device-read-iops: Limit broja operacija čitanja sa uređaja (operacije u sekundi).
    • --device-write-iops: Limit broja operacija zapisivanja na uređaj (operacije u sekundi).
  • Mreža:
    • Ograničenje mrežnih resursa direktno putem docker run zastavica je ograničeno. Obično se za to koriste spoljašnji alati, na primer, tc (traffic control), netem ili alati za orkestraciju (Kubernetes NetworkPolicy).

Primeri upotrebe:

# Pokretanje kontejnera sa ograničenjem CPU Shares i memorije
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Pokretanje kontejnera sa čvrstim limitom CPU Quota i memorije
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker pretvara ove zastavice u odgovarajuće postavke cgroups za grupu procesa pokrenutu unutar kontejnera. Ove postavke se upravljaju putem virtuelnog fajl sistema /sys/fs/cgroup unutar kontejnera (pri montiranju) i na host sistemu.