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: Մ soft սահմանափակում օպերատիվ հիշողության վրա: Երբ ռեսուրսների սահմանափակում է, կոնտեյներները with smaller reservation early will be swapped out before those with larger memory-reservation:--kernel-memory: Սահմանափակում kernel հիշողության վրա:--memswap-swappiness: Որքան պատրաստ է kernel-ը օգտագործել 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 կամ orchestration գործիքներ (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 վիրտուալ ֆայլային համակարգի միջոցով (մոնտաժման ժամանակ) և հոստային համակարգում։