6.1 Konteyner resurslarını məhdudlaşdırma səbəbləri
Docker konteyner resurslarının idarə olunması üçün çevik alətlər təqdim edir ki, bu da hesablama gücündən effektiv istifadə etməyə və konteynerlər arasında münaqişələrin qarşısını almağa imkan yaradır. CPU və yaddaş kimi resursların məhdudlaşdırılması, xüsusilə çoxtapşırıqlı mühitlərdə, sistemlərin sabitliyini və performansını təmin etməyə kömək edir. Bu mühazirədə biz Docker konteynerlərinin CPU və yaddaş istifadəsinə necə limit qoyulacağını ətraflı araşdıracağıq.
Konteyner resurslarının məhdudlaşdırılması bir neçə səbəbdən vacibdir:
- Sabitlik: Bir konteynerin bütün mövcud resursları istehlak etməsinin qarşısını almaq, bu isə digər konteynerlərin və ümumilikdə sistemin performansına zərər vura bilər.
- Effektivlik: Resursların konteynerlər arasında daha yaxşı bölüşdürülməsi, bu isə hesablama gücündən daha yaxşı istifadə etməyə imkan verir.
- Təhlükəsizlik: Resursların məhdudlaşdırılması potensial zərərli konteynerlərin, sistem resurslarını tükətməyə çalışmasının qarşısını ala bilər.
6.2 CPU
istifadəsinə limitlər
Docker konteynerlərin CPU
istifadəsini məhdudlaşdırmaq üçün bir neçə üsul təqdim edir.
Vacib!
Burada CPU
dedikdə bütün prosessor yox, bir prosessor nüvəsi nəzərdə tutulur. Dörd nüvəli prosessorun 4 dənə CPU
-su olacaq.
1. CPU (--cpu-shares)
payının məhdudlaşdırılması
--cpu-shares
parametri konteynerin CPU istifadəsi üçün nisbi prioritet dəyərini təyin edir. Default dəyər — 1024-dür. Bu nisbi bir dəyərdir, yəni --cpu-shares=512
olan konteyner, --cpu-shares=1024
konteynerinin prioritetinin yarısını alacaq.
İstifadə nümunəsi:
Bu nümunədə high_priority_container
konteyneri, low_priority_container
ilə müqayisədə CPU
paylanmasında daha yüksək prioritetə malik olacaq.
docker run -d --name low_priority_container --cpu-shares=512 nginx
docker run -d --name high_priority_container --cpu-shares=2048 nginx
2. CPU
sayının məhdudlaşdırılması (--cpus
)
--cpus
parametri konteyner üçün mövcud CPU
dəqiq sayını təyin edir. Məsələn, 1.5 dəyəri, konteynerin 1.5 CPU
istifadə edə biləcəyini göstərir.
İstifadə nümunəsi:
Bu nümunə limited_cpu_container
konteynerini maksimum 1.5 CPU
istifadə ilə məhdudlaşdırır.
docker run -d --name limited_cpu_container --cpus="1.5" nginx
3. CPU
vaxtından istifadənin məhdudlaşdırılması (--cpu-quota
və --cpu-period
)
--cpu-quota
və --cpu-period
parametrləri ilə CPU
istifadəsini daha incə şəkildə tənzimləyə bilərsiniz. --cpu-period
mikrosekundlarla vaxt intervalını təyin edir (default olaraq 100000-dür), --cpu-quota
isə bu müddətdə maksimum istifadəyə icazə verilən CPU
vaxtını təyin edir.
İstifadə nümunəsi:
Bu nümunədə custom_cpu_quota_container
konteyneri maksimum 50% CPU
istifadə edəcək (25000/50000).
docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx
6.3 Yaddaş istifadəsinə limitlər
Yaddaş məhdudiyyəti konteynerin operativ yaddaş istifadəsinə nəzarət etməyə kömək edir, digər proseslərə və konteynerlərə təsirini qarşısını alır.
1. Maksimal yaddaş həcmində məhdudlaşdırma (--memory)
--memory
parametri, konteynerin istifadə edə biləcəyi yaddaşın yuxarı həddini təyin edir. Bu sərt bir məhdudiyyətdir, onun aşılması halında konteyner sistem tərəfindən dayandırılacaq.
İstifadə nümunəsi:
Bu nümunə konteyneri limited_memory_container
maksimum 512 MB operativ yaddaş istifadəsi ilə məhdudlaşdırır.
docker run -d --name limited_memory_container --memory="512m" nginx
2. Swap yaddaş həcmində məhdudlaşdırma (--memory-swap)
--memory-swap
parametri operativ yaddaş və üstəgəl swap həcminin yuxarı həddini təyin edir. Məsələn, əgər --memory
512 MB olaraq təyin edilibsə və --memory-swap
1 GB olaraq təyin edilibsə, konteyner 512 MB operativ yaddaş və 512 MB swap istifadə edə bilər.
İstifadə nümunəsi:
Bu nümunə konteyneri swap_limited_container
maksimum 512 MB operativ yaddaş və 512 MB swap istifadəsi ilə məhdudlaşdırır.
docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx
3. Swap yaddaşı olmadan yaddaş istifadəsini məhdudlaşdırma (--memory-swap=-1)
Swap istifadəsinə icazə olmadan yaddaş istifadəsini məhdudlaşdırmaq üçün --memory-swap
parametri -1 olaraq təyin edilməlidir.
İstifadə nümunəsi:
Bu nümunə konteynerə no_swap_container
yalnız 512 MB operativ yaddaş istifadəsinə icazə verir və swap istifadəsinə icazə vermir.
docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx
6.4 Praktik ssenarilər
1. Yüksək prioritetli və aşağı prioritetli tapşırıqların icrası
Yüksək prioritetli və aşağı prioritetli tapşırıqların bir serverdə icrası zamanı --cpu-shares
parametrlərindən istifadə etmək vacib tapşırıqların daha çox CPU
əldə etməsini təmin etməyə kömək edir.
docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image
2. Resursların məhdudlaşdırılması ilə test
Tətbiqləri məhdud resurslar şəraitində test etmək üçün CPU
və yaddaşa sərt limitlər tətbiq etmək olar. Bu yolla tətbiqin məhdud şəraitdə necə işləyəcəyini anlamaq mümkündür.
docker run -d --name test_container --cpus="1" --memory="256m" my_test_image
3. Resursların tükənməsindən qorunma
Bir konteynerin bütün mövcud sistem resurslarını istifadə etdiyi halların qarşısını almaq üçün bütün konteynerlər üçün yaddaş və CPU limitləri təyin etmək olar.
docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
GO TO FULL VERSION