Sobes.tech
Middle

Jak je v Dockeru prováděno omezení zdrojů?

sobes.tech AI

Odpověď od AI

Omezení zdrojů v Dockeru je realizováno prostřednictvím namespaces a control groups (cgroups) jádra Linux. Namespaces izolují systémové zdroje a cgroups omezují, sledují a izolují využívání zdrojů pro skupiny procesů.

Klíčové parametry pro omezení zdrojů:

  • CPU:
    • --cpu-shares: Váhová hodnota pro rozdělení CPU mezi kontejnery, když je omezen. Výchozí hodnota je 1024.
    • --cpu-quota: Maximální množství času CPU (v mikrosekundách) pro použití během období (--cpu-period). Výchozí je 100000.
    • --cpu-period: Období času CPU (v mikrosekundách) pro --cpu-quota.
    • --cpuset-cpus: Určuje, která jádra CPU mohou používat kontejnery.
  • Memory:
    • --memory: Pevný limit na operační paměť. Pokud kontejner tento limit překročí, může být ukončen.
    • --memory-swap: Pevný limit na součet operační paměti a swapu.
    • --memory-reservation: Měkký limit na operační paměť. Při omezení zdrojů budou kontejnery s menším reservation dříve přesunuty do swapu než ty s větším memory-reservation.
    • --kernel-memory: Limit na paměť jádra.
    • --memswap-swappiness: Jak ochotně jádro bude používat swap pro tento kontejner (od 0 do 100). 0 - velmi neochotně, 100 - velmi ochotně.
  • Block I/O:
    • --blkio-weight: Váhová hodnota pro rozdělení I/O mezi kontejnery.
    • --blkio-weight-device: Váhová hodnota pro jednotlivé zařízení block I/O.
    • --device-read-bps: Limit rychlosti čtení ze zařízení (v bytech za sekundu).
    • --device-write-bps: Limit rychlosti zápisu na zařízení (v bytech za sekundu).
    • --device-read-iops: Limit počtu operací čtení ze zařízení (operace za sekundu).
    • --device-write-iops: Limit počtu operací zápisu na zařízení (operace za sekundu).
  • Network:
    • Omezení síťových zdrojů přímo přes příznaky docker run je omezené. Obvykle se k tomu používají externí nástroje, například tc (traffic control), netem nebo nástroje orchestrace (Kubernetes NetworkPolicy).

Příklady použití:

# Spuštění kontejneru s omezením CPU Shares a paměti
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Spuštění kontejneru s pevným limitem CPU Quota a Memory
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker tyto příznaky převádí na odpovídající nastavení cgroups pro skupinu procesů spuštěnou uvnitř kontejneru. Tato nastavení jsou řízena přes virtuální souborový systém /sys/fs/cgroup uvnitř kontejneru (při montáži) a na hostitelském systému.