Middle
Как се осъществява ограничаването на ресурсите в Docker?
sobes.tech AI
Отговор от AI
Ограничението на ресурсите в Docker се реализира чрез namespaces и control groups (cgroups) на Linux ядрото. Namespaces изолират системните ресурси, а cgroups ограничават, следят и изолират използването на ресурси за групи процеси.
Ключови параметри за ограничаване на ресурсите:
- CPU:
--cpu-shares: Тегловна стойност за разпределение на CPU между контейнерите, когато е ограничен. Стойността по подразбиране е 1024.--cpu-quota: Максимално количество време CPU (в микросекунди) за използване през периода (--cpu-period). По подразбиране е 100000.--cpu-period: Период на време за CPU (в микросекунди) за--cpu-quota.--cpuset-cpus: Посочва кои ядра CPU могат да използват контейнерите.
- Memory:
--memory: Твърд лимит на оперативната памет. Ако контейнерът го превиши, може да бъде прекратен.--memory-swap: Твърд лимит на сумата на оперативната памет и swap.--memory-reservation: Мек лимит на оперативната памет. При ограничаване на ресурсите, контейнерите с по-малко reservation ще бъдат изтласкани по-рано в swap, отколкото тези с по-голям memory-reservation.--kernel-memory: Лимит на паметта на ядрото.--memswap-swappiness: Колко охотно ядрото ще използва swap за този контейнер (от 0 до 100). 0 - много неохотно, 100 - много охотно.
- Block I/O:
--blkio-weight: Тегловна стойност за разпределение на I/O между контейнерите.--blkio-weight-device: Тегловна стойност за отделно устройство за block I/O.--device-read-bps: Лимит на скоростта на четене от устройството (байтове в секунда).--device-write-bps: Лимит на скоростта на запис към устройството (байтове в секунда).--device-read-iops: Лимит на броя операции на четене от устройството (операции в секунда).--device-write-iops: Лимит на броя операции на запис към устройството (операции в секунда).
- Мрежа:
- Ограничаването на мрежовите ресурси директно чрез флаговете
docker runе ограничено. Обикновено за това се използват външни инструменти, напримерtc(traffic control), netem или инструменти за оркестрация (Kubernetes NetworkPolicy).
- Ограничаването на мрежовите ресурси директно чрез флаговете
Примери за използване:
# Стартиране на контейнер с ограничение на CPU Shares и памет
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity
# Стартиране на контейнер с твърд лимит на CPU Quota и памет
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity
Docker преобразува тези флагове в съответните настройки на cgroups за групата процеси, стартирана вътре в контейнера. Тези настройки се управляват чрез виртуалната файлова система /sys/fs/cgroup вътре в контейнера (при монтиране) и на хост системата.