Sobes.tech
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 վիրտուալ ֆայլային համակարգի միջոցով (մոնտաժման ժամանակ) և հոստային համակարգում։