Middle
Hoe wordt de resourcebeperking in Docker uitgevoerd?
sobes.tech AI
Antwoord van AI
Resourcebeperkingen in Docker wordt geïmplementeerd via namespaces en control groups (cgroups) van de Linux-kernel. Namespaces isoleren systeemresources, terwijl cgroups het gebruik van resources beperken, bijhouden en isoleren voor procesgroepen.
Belangrijke parameters voor resourcebeperkingen:
- CPU:
--cpu-shares: Gewogen waarde voor het verdelen van CPU tussen containers wanneer deze beperkt is. Standaardwaarde 1024.--cpu-quota: Maximale hoeveelheid CPU-tijd (in microseconden) die binnen de periode (--cpu-period) gebruikt mag worden. Standaard 100000.--cpu-period: Periode in microseconden voor--cpu-quota.--cpuset-cpus: Geeft aan welke CPU-kernen door de containers gebruikt mogen worden.
- Memory:
--memory: Strikte limiet voor RAM-geheugen. Als de container deze overschrijdt, kan hij worden beëindigd.--memory-swap: Strikte limiet voor de som van RAM en swap.--memory-reservation: Zachte limiet voor RAM. Bij resourcebeperkingen worden containers met een kleinere reservering eerder naar swap verplaatst dan die met een groterememory-reservation.--kernel-memory: Limiet voor kernelgeheugen.--memswap-swappiness: Hoe bereidwillig de kernel swap zal gebruiken voor deze container (van 0 tot 100). 0 - zeer onwillig, 100 - zeer bereid.
- Block I/O:
--blkio-weight: Gewogen waarde voor het verdelen van I/O tussen containers.--blkio-weight-device: Gewogen waarde voor een specifiek apparaat.--device-read-bps: Limiet op de leessnelheid van het apparaat (bytes per seconde).--device-write-bps: Limiet op de schrijfsnelheid naar het apparaat (bytes per seconde).--device-read-iops: Limiet op het aantal leesbewerkingen van het apparaat (bewerkingen per seconde).--device-write-iops: Limiet op het aantal schrijfbewerkingen op het apparaat (bewerkingen per seconde).
- Netwerk:
- Beperkingen op netwerkbronnen via
docker run-vlaggen zijn beperkt. Vaak worden externe tools gebruikt, zoalstc(traffic control), netem of orkestratietools (Kubernetes NetworkPolicy).
- Beperkingen op netwerkbronnen via
Voorbeelden van gebruik:
# Container starten met CPU Shares en geheugenlimiet
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity
# Container starten met strikte CPU Quota en geheugenlimiet
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity
Docker vertaalt deze vlaggen naar de bijbehorende cgroups-instellingen voor de procesgroep die binnen de container wordt gestart. Deze instellingen worden beheerd via het virtuele bestandssysteem /sys/fs/cgroup binnen de container (bij het mounten) en op het host-systeem.