Sobes.tech
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 grotere memory-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, zoals tc (traffic control), netem of orkestratietools (Kubernetes NetworkPolicy).

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.