Middle
Ako sa vykonáva obmedzenie zdrojov v Docker?
sobes.tech AI
Odpoveď od AI
Obmedzenie zdrojov v Docker je realizované prostredníctvom namespaces a control groups (cgroups) jadra Linux. Namespaces izolujú systémové zdroje a cgroups obmedzujú, sledujú a izolujú využívanie zdrojov pre skupiny procesov.
Kľúčové parametre pre obmedzenie zdrojov:
- CPU:
--cpu-shares: Váhová hodnota pre rozdelenie CPU medzi kontajnermi, keď je obmedzený. Predvolená hodnota je 1024.--cpu-quota: Maximálne množstvo času CPU (v mikrosekundách) na použitie počas obdobia (--cpu-period). Predvolene je 100000.--cpu-period: Obdobie času CPU (v mikrosekundách) pre--cpu-quota.--cpuset-cpus: Uvádza, ktoré jadro CPU môžu používať kontajnery.
- Memory:
--memory: Pevný limit na operačnú pamäť. Ak kontajner tento limit prekročí, môže byť ukončený.--memory-swap: Pevný limit na súčet operačnej pamäte a swapu.--memory-reservation: Mäkší limit na operačnú pamäť. Pri obmedzení zdrojov budú kontajnery s menším reservation skôr presunuté do swapu než tie s väčším memory-reservation.--kernel-memory: Limit na pamäť jadra.--memswap-swappiness: Ako ochotne bude jadro používať swap pre tento kontajner (od 0 do 100). 0 - veľmi neochotne, 100 - veľmi ochotne.
- Block I/O:
--blkio-weight: Váhová hodnota pre rozdelenie I/O medzi kontajnermi.--blkio-weight-device: Váhová hodnota pre jednotlivé zariadenie block I/O.--device-read-bps: Limit rýchlosti čítania zo zariadenia (v bajtoch za sekundu).--device-write-bps: Limit rýchlosti zápisu na zariadenie (v bajtoch za sekundu).--device-read-iops: Limit počtu operácií čítania zo zariadenia (operácie za sekundu).--device-write-iops: Limit počtu operácií zápisu na zariadenie (operácie za sekundu).
- Sieť:
- Obmedzenie sieťových zdrojov priamo cez vlajky
docker runje obmedzené. Zvyčajne sa na to používajú externé nástroje, napríkladtc(traffic control), netem alebo nástroje orchestrácie (Kubernetes NetworkPolicy).
- Obmedzenie sieťových zdrojov priamo cez vlajky
Príklady použitia:
# Spustenie kontajnera s obmedzením CPU Shares a pamäte
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity
# Spustenie kontajnera s pevným limitom CPU Quota a pamäte
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity
Docker tieto vlajky prevádza na zodpovedajúce nastavenia cgroups pre skupinu procesov spustenú vo vnútri kontajnera. Tieto nastavenia sa riadia cez virtuálny súborový systém /sys/fs/cgroup vo vnútri kontajnera (pri montáži) a na hostiteľskom systéme.