Sobes.tech
Middle

Come viene effettuata la limitazione delle risorse in Docker?

sobes.tech AI

Risposta dell'AI

La limitazione delle risorse in Docker viene implementata tramite namespace e gruppi di controllo (cgroups) del kernel Linux. I namespace isolano le risorse di sistema, mentre i cgroups limitano, contabilizzano e isolano l'uso delle risorse per gruppi di processi.

Parametri chiave per limitare le risorse:

  • CPU:
    • --cpu-shares: Valore ponderato per distribuire la CPU tra i contenitori quando è limitata. Valore predefinito 1024.
    • --cpu-quota: Quantità massima di tempo CPU (in microsecondi) da usare durante il periodo (--cpu-period). Per impostazione predefinita 100000.
    • --cpu-period: Periodo di tempo CPU (in microsecondi) per --cpu-quota.
    • --cpuset-cpus: Indica quali core CPU possono utilizzare i contenitori.
  • Memoria:
    • --memory: Limite rigido di memoria RAM. Se il contenitore supera questo limite, può essere terminato.
    • --memory-swap: Limite rigido sulla somma di memoria RAM e swap.
    • --memory-reservation: Limite morbido di memoria RAM. Quando si limitano le risorse, i contenitori con riserva minore saranno spostati prima nello swap rispetto a quelli con una memory-reservation maggiore.
    • --kernel-memory: Limite di memoria del kernel.
    • --memswap-swappiness: Quanto il kernel sarà disposto a usare lo swap per questo contenitore (da 0 a 100). 0 - molto poco disposto, 100 - molto disposto.
  • Input/Output a blocchi:
    • --blkio-weight: Valore ponderato per distribuire l'I/O tra i contenitori.
    • --blkio-weight-device: Valore ponderato per un dispositivo di blocco specifico.
    • --device-read-bps: Limite sulla velocità di lettura del dispositivo (byte al secondo).
    • --device-write-bps: Limite sulla velocità di scrittura sul dispositivo (byte al secondo).
    • --device-read-iops: Limite sul numero di operazioni di lettura del dispositivo (operazioni al secondo).
    • --device-write-iops: Limite sul numero di operazioni di scrittura sul dispositivo (operazioni al secondo).
  • Rete:
    • La limitazione delle risorse di rete direttamente tramite le bandiere docker run è limitata. Di solito, vengono utilizzati strumenti esterni, come tc (traffic control), netem o strumenti di orchestrazione (Kubernetes NetworkPolicy).

Esempi di utilizzo:

# Avviare un contenitore con limitazione di CPU Shares e memoria
docker run -d --cpu-shares 512 --memory 512m alpine sleep infinity

# Avviare un contenitore con limite rigido di CPU Quota e memoria
docker run -d --cpu-quota 50000 --memory 1g alpine sleep infinity

Docker converte queste bandiere nelle impostazioni cgroups corrispondenti per il gruppo di processi avviato all'interno del contenitore. Queste impostazioni sono gestite tramite il sistema di file virtuale /sys/fs/cgroup all'interno del contenitore (al montaggio) e sul sistema host.