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 ვირტუალურ ფაილურ სისტემაში (მონტაჟის დროს) და ჰოსტ სისტემაზე.