Sobes.tech
Middle

Πώς γίνεται ο περιορισμός πόρων στο Docker;

sobes.tech AI

Απάντηση από AI

Ο περιορισμός πόρων στο Docker υλοποιείται μέσω namespaces και control groups (cgroups) του πυρήνα Linux. Τα namespaces απομονώνουν τους πόρους συστήματος, ενώ τα cgroups περιορίζουν, καταγράφουν και απομονώνουν τη χρήση πόρων για ομάδες διεργασιών.

Βασικές παράμετροι για τον περιορισμό πόρων:

  • CPU:
    • --cpu-shares: Ζυγισμένη τιμή για την κατανομή CPU μεταξύ των κοντέινερ όταν περιορίζεται. Η προεπιλεγμένη τιμή είναι 1024.
    • --cpu-quota: Μέγιστος χρόνος CPU (σε μικροδευτερόλεπτα) που μπορεί να χρησιμοποιηθεί κατά τη διάρκεια της περιόδου (--cpu-period). Προεπιλογή 100000.
    • --cpu-period: Περίοδος χρόνου CPU (σε μικροδευτερόλεπτα) για το --cpu-quota.
    • --cpuset-cpus: Δείχνει ποια πυρήνες CPU μπορούν να χρησιμοποιούν τα κοντέινερ.
  • Μνήμη:
    • --memory: Σταθερό όριο μνήμης RAM. Αν το κοντέινερ το ξεπεράσει, μπορεί να τερματιστεί.
    • --memory-swap: Σταθερό όριο για το άθροισμα μνήμης RAM και swap.
    • --memory-reservation: Μαλακό όριο μνήμης RAM. Όταν περιορίζονται οι πόροι, τα κοντέινερ με μικρότερη κράτηση θα μετακινηθούν πρώτα στο swap.
    • --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: Όριο ταχύτητας ανάγνωσης από τη συσκευή (bytes ανά δευτερόλεπτο).
    • --device-write-bps: Όριο ταχύτητας εγγραφής στη συσκευή (bytes ανά δευτερόλεπτο).
    • --device-read-iops: Όριο στον αριθμό λειτουργιών ανάγνωσης από τη συσκευή (λειτουργίες ανά δευτερόλεπτο).
    • --device-write-iops: Όριο στον αριθμό λειτουργιών εγγραφής στη συσκευή (λειτουργίες ανά δευτερόλεπτο).
  • Δίκτυο:
    • Ο περιορισμός πόρων δικτύου απευθείας μέσω των flags docker run είναι περιορισμένος. Συνήθως, χρησιμοποιούνται εξωτερικά εργαλεία, όπως το tc (traffic control), το netem ή εργαλεία ορχηστρωσης (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 μετατρέπει αυτά τα flags σε αντίστοιχες ρυθμίσεις cgroups για την ομάδα διεργασιών που ξεκινάει μέσα στο κοντέινερ. Αυτές οι ρυθμίσεις διαχειρίζονται μέσω του εικονικού συστήματος αρχείων /sys/fs/cgroup μέσα στο κοντέινερ (κατά τη μοντάζ) και στο σύστημα-υποδοχής.