Sobes.tech
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 run je obmedzené. Zvyčajne sa na to používajú externé nástroje, napríklad tc (traffic control), netem alebo nástroje orchestrácie (Kubernetes NetworkPolicy).

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.