Middle
Dockerде ресурстарды чектөө кандай жүргүзүлөт?
sobes.tech AI
AIден жооп
Docker-да ресурстарды чектөө Linux ядросунун namespaces жана control groups (cgroups) аркылуу ишке ашырылат. 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ко которулат.--kernel-memory: Ядро эс тутумунун чеги.--memswap-swappiness: Ядро бул контейнер үчүн swapты канчалык каалайт (0дан 100гө чейин). 0 - өтө аз каалайт, 100 - өтө каалайт.
- Block I/O:
--blkio-weight: Контейнерлер арасында I/O бөлүштүрүү үчүн салмактык мааниси.--blkio-weight-device: Атайын түзмөктөр үчүн салмактык мааниси.--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 виртуалдык файл системеси аркылуу (монтирлөө учурунда) жана хост системеде көзөмөлдөнөт.