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: რბილი ლიმიტი ოპერატიული მეხსიერებისთვის. რესურსების შეზღუდვის დროს, კონტეინერები with smaller reservation ადრე გადაიტანენ swap-ზე, ვიდრე ისინი, რომლებსაც მეტი memory-reservation აქვთ.
    • --kernel-memory: ლიმიტი ядრის მეხსიერებაზე.
    • --memswap-swappiness: რამდენად მზად არის ядრო გამოიყენოს swap ამ კონტეინერისთვის (0-დან 100-მდე). 0 - ძალიან არასურველი, 100 - ძალიან სურვილიანი.
  • Block I/O:
    • --blkio-weight: წონითი მნიშვნელობა I/O-ს განაწილებისთვის კონტეინერებს შორის.
    • --blkio-weight-device: წონითი მნიშვნელობა კონკრეტული მოწყობილობისთვის block I/O-ს.
    • --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 ვირტუალურ ფაილურ სისტემაში (მონტაჟის დროს) და ჰოსტ სისტემაზე.