Auf Multi-Tenant Linux-Hosts ist es entscheidend, die Ressourcen zwischen Containern, VMs oder Prozessen strikt zu isolieren, um Performance-Interferenzen zu vermeiden. cgroups v2 bietet dafür eine moderne, einheitliche Schnittstelle, mit der CPU, Memory, IO und weitere Ressourcen granular gesteuert werden können. In diesem Tutorial lernen Sie, wie Sie cgroups v2 effektiv konfigurieren und Defaults für sichere Multi-Tenant-Setups definieren.
cgroups v2 Übersicht
Im Gegensatz zu cgroups v1 konsolidiert v2 alle Controller in einem hierarchischen Mountpoint. Das erleichtert das Management und reduziert Inkonsistenzen zwischen Controllern.
Prüfen, ob cgroups v2 aktiv ist
mount | grep cgroup2
cat /sys/fs/cgroup/cgroup.controllers
Wenn der Mountpoint existiert, sind die v2 Controller verfügbar. Typische Controller umfassen:
cpu– CPU-Zeit und Schedulingmemory– Arbeitsspeicherlimitsio– IO-Bandbreite für Blockdevicespids– maximale Anzahl von Prozessenrdma– RDMA Ressourcen (optional)
Default Limits setzen
Standardwerte legen fest, wie viel Ressourcen ein Prozess erhält, wenn keine eigenen cgroups definiert werden. Diese Defaults sind entscheidend, um Multi-Tenant-Hosts stabil zu betreiben.
Memory Limits
Um Out-of-Memory-Killer zu vermeiden, sollte jedem Tenant ein Memory Limit zugewiesen werden:
mkdir /sys/fs/cgroup/tenant1
echo 2G > /sys/fs/cgroup/tenant1/memory.max
echo 1G > /sys/fs/cgroup/tenant1/memory.low
memory.max definiert das absolute Maximum, memory.low die garantierte Minimum-Zuteilung.
CPU Shares und Quotas
cgroups v2 erlaubt die Steuerung der CPU-Zeit pro Tenant über cpu.max:
echo "20000 100000" > /sys/fs/cgroup/tenant1/cpu.max
Dies entspricht 20% CPU-Zeit innerhalb eines 100ms Zeitfensters. Alternativ kann die Priorität über cpu.weight gesteuert werden:
echo 100 > /sys/fs/cgroup/tenant1/cpu.weight
IO Bandwidth Limits
IO-intensive Workloads benötigen kontrollierte Bandbreitenlimits:
echo "8:0 rbps=10485760 wbps=5242880" > /sys/fs/cgroup/tenant1/io.max
Hierbei steht 8:0 für das Blockdevice (z.B. /dev/sda), rbps und wbps definieren Lesend- und Schreibend-Bandbreite in Bytes/s.
Prozesslimits
Zur Vermeidung von Fork-Bomben kann die maximale Anzahl von Prozessen pro Tenant begrenzt werden:
echo 500 > /sys/fs/cgroup/tenant1/pids.max
Hierarchisches Setup
cgroups v2 unterstützt hierarchische Organisation. Sie können globale Defaults definieren und spezielle Untergruppen überschreiben.
Beispiel Hierarchie
mkdir /sys/fs/cgroup/multi-tenant
echo "4G" > /sys/fs/cgroup/multi-tenant/memory.max
mkdir /sys/fs/cgroup/multi-tenant/tenant1
echo "2G" > /sys/fs/cgroup/multi-tenant/tenant1/memory.max
mkdir /sys/fs/cgroup/multi-tenant/tenant2
echo "1G" > /sys/fs/cgroup/multi-tenant/tenant2/memory.max
Auf diese Weise wird sichergestellt, dass die Summe der Ressourcenlimits den Host nicht überlastet.
Automatisierung mit systemd
systemd unterstützt cgroups v2 nativ. Jede Service Unit kann eigene Ressourcenlimits erhalten:
[Service]
CPUWeight=200
MemoryMax=1G
IOReadBandwidthMax=/dev/sda 10M
IOWriteBandwidthMax=/dev/sda 5M
TasksMax=500
Damit werden Limits automatisch beim Starten des Services angewendet, ohne dass manuelle Eingriffe nötig sind.
Monitoring und Validierung
Nach der Konfiguration sollten Limits überwacht und getestet werden:
Memory Usage prüfen
cat /sys/fs/cgroup/tenant1/memory.current
cat /sys/fs/cgroup/tenant1/memory.max
CPU Usage überwachen
cat /sys/fs/cgroup/tenant1/cpu.stat
IO Usage prüfen
cat /sys/fs/cgroup/tenant1/io.stat
Best Practices
- Jeder Tenant bekommt eigene cgroup unter
/sys/fs/cgroup - Limits sollten konservativ gesetzt und regelmäßig überwacht werden
- systemd Service Units verwenden, um Ressourcen automatisch zu isolieren
- Monitoring-Tools wie
cgrulesengdodersystemd-cgtopeinsetzen - Tests mit synthetischer Last durchführen, um Konfigurationen zu validieren
- Dokumentation aller Limits und Hierarchien für Audit und Troubleshooting
Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3
Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.
Meine Leistungen umfassen:
-
Professionelle Konfiguration von Routern und Switches
-
Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen
-
Erstellung von Topologien und Simulationen in Cisco Packet Tracer
-
Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG
-
Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible
-
Erstellung von Skripten für wiederkehrende Netzwerkaufgaben
-
Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege
-
Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting
Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.











