Sobes.tech
Middle

Kaip vykdomas išteklių apribojimas Docker?

sobes.tech AI

Atsakymas iš AI

Resursų apribojimas Docker'e įgyvendinamas naudojant Linux branduolio namespaces ir control groups (cgroups). Namespaces izoliuoja sisteminius išteklius, o cgroups riboja, stebi ir izoliuoja išteklių naudojimą procesų grupėms.

Pagrindiniai parametrai resursų apribojimui:

  • CPU:
    • --cpu-shares: Svorio reikšmė CPU paskirstymui tarp konteinerių, kai jis yra apribotas. Numatytoji reikšmė yra 1024.
    • --cpu-quota: Maksimalus CPU laiko kiekis (mikrossekundėmis) naudojimui per laikotarpį (--cpu-period). Numatytoji reikšmė yra 100000.
    • --cpu-period: Laiko periodas CPU (mikrossekundėmis) --cpu-quota.
    • --cpuset-cpus: Nurodo, kurie CPU branduoliai gali naudoti konteineriai.
  • Memory:
    • --memory: Tvirtas limitas operatyviajai atminčiai. Jei konteineris viršys šį limitą, jis gali būti nutrauktas.
    • --memory-swap: Tvirtas limitas operatyviosios atminties ir swap sumai.
    • --memory-reservation: Minkštas limitas operatyviajai atminčiai. Apribojus išteklius, konteineriai su mažesne rezervacija bus anksčiau perkelti į swap nei tie, kurių memory-reservation didesnė.
    • --kernel-memory: Branduolio atminties limitas.
    • --memswap-swappiness: Kiek noriai branduolys naudos swap šiam konteineriui (nuo 0 iki 100). 0 - labai nenoriai, 100 - labai noriai.
  • Block I/O:
    • --blkio-weight: Svorio reikšmė I/O paskirstymui tarp konteinerių.
    • --blkio-weight-device: Svorio reikšmė atskiram blokinio I/O įrenginiui.
    • --device-read-bps: Greičio limitas skaitymui iš įrenginio (baitai per sekundę).
    • --device-write-bps: Greičio limitas rašymui į įrenginį (baitai per sekundę).
    • --device-read-iops: Operacijų skaičiaus limitas skaitymui iš įrenginio (operacijos per sekundę).
    • --device-write-iops: Operacijų skaičiaus limitas rašymui į įrenginį (operacijos per sekundę).
  • Tinklas:
    • Tinklo išteklių apribojimas tiesiogiai per docker run vėliavėles yra ribotas. Paprastai tai daroma naudojant išorinius įrankius, pvz., tc (traffic control), netem arba orkestravimo įrankius (Kubernetes NetworkPolicy).

Pavyzdžiai:

# Konteinerio paleidimas su CPU Shares ir atminties apribojimu
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Konteinerio paleidimas su griežtu CPU Quota ir atmintimi
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker šiuos vėliavėlius paverčia atitinkamais cgroups nustatymais, kurie valdo procesų grupę konteineryje. Šie nustatymai valdoma per /sys/fs/cgroup virtualią failų sistemą konteineryje (montavimo metu) ir host operacinėje sistemoje.