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 runvėliavėles yra ribotas. Paprastai tai daroma naudojant išorinius įrankius, pvz.,tc(traffic control), netem arba orkestravimo įrankius (Kubernetes NetworkPolicy).
- Tinklo išteklių apribojimas tiesiogiai per
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.