Sobes.tech
Middle

Docker-də resursların məhdudlaşdırılması necə həyata keçirilir?

sobes.tech Süni İntellekt

AI-dan cavab

Docker-də resursların məhdudlaşdırılması Linux nüvəsinin namespaces və control groups (cgroups) vasitəsilə həyata keçirilir. Namespaces sistem resurslarını izolyasiya edir, cgroups isə proses qruplarının resurs istifadəsini məhdudlaşdırır, hesablayır və izolyasiya edir.

Resursların məhdudlaşdırılması üçün əsas parametrlər:

  • CPU:
    • --cpu-shares: Məhdudiyyət zamanı konteynerlər arasında CPU-nun paylanması üçün çəkili dəyər. Əsas dəyər 1024.
    • --cpu-quota: Müddət (--cpu-period) ərzində istifadə edilə bilən maksimum CPU vaxtı (mikrosaniyə). Əsas dəyər 100000.
    • --cpu-period: --cpu-quota üçün CPU dövrü (mikrosaniyə).
    • --cpuset-cpus: Hansı CPU nüvələrinin konteynerlər tərəfindən istifadə oluna biləcəyini göstərir.
  • Yaddaş:
    • --memory: Qəti RAM yaddaş limiti. Əgər konteyner bu limiti aşarsa, bağlana bilər.
    • --memory-swap: RAM və swap cəmindən qəti limit.
    • --memory-reservation: Yumşaq RAM limiti. Resurslar məhdudlaşdırıldıqda, daha az rezerve edilmiş konteynerlər əvvəl swap-a köçürülür.
    • --kernel-memory: Kernel yaddaş limiti.
    • --memswap-swappiness: Kernel-in bu konteyner üçün swap istifadə etməyə nə qədər həvəsləndiyi (0-dan 100-ə). 0 - çox həvəsləndirməz, 100 - çox həvəsləndirər.
  • Blok I/O:
    • --blkio-weight: I/O-nun konteynerlər arasında paylanması üçün çəkili dəyər.
    • --blkio-weight-device: Xüsusi cihaz üçün çəkili dəyər.
    • --device-read-bps: Cihazdan oxuma sürəti limiti (bayt/saniyə).
    • --device-write-bps: Cihaza yazma sürəti limiti (bayt/saniyə).
    • --device-read-iops: Cihazdan oxuma əməliyyatlarının sayı limiti (əməliyyatlar/saniyə).
    • --device-write-iops: Cihaza yazma əməliyyatlarının sayı limiti (əməliyyatlar/saniyə).
  • Şəbəkə:
    • docker run bayraqları ilə birbaşa şəbəkə resurslarının məhdudlaşdırılması məhduddur. Adətən, xarici alətlər, məsələn, tc (trafik idarəetməsi), netem və ya orkestrasiya alətləri (Kubernetes NetworkPolicy) istifadə olunur.

İstifadə nümunələri:

# CPU Shares və yaddaş limiti ilə konteynerin işə salınması
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Qəti CPU Quota və yaddaş limiti ilə konteynerin işə salınması
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker bu bayraqları konteyner daxilində işləyən proses qrupunun uyğun cgroups konfiqurasiyalarına çevirir. Bu konfiqurasiyalar /sys/fs/cgroup virtual fayl sistemində (montaj zamanı) və host sistemində idarə olunur.