cgroups v2 Defaults: Resource Isolation für Multi-Tenant Hosts

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 Scheduling
  • memory – Arbeitsspeicherlimits
  • io – IO-Bandbreite für Blockdevices
  • pids – maximale Anzahl von Prozessen
  • rdma – 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 cgrulesengd oder systemd-cgtop einsetzen
  • 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.

Related Articles