cgroups (control groups) — механизм ядра Linux для лимитирования и учёта ресурсов процессов. Введён в 2007, cgroups v2 — 2016. Позволяет сгруппировать процессы и наложить лимиты: CPU (% ядер, weight), memory (жёсткий лимит, OOM-kill), blkio (IOPS диска), net (bandwidth), pids (max fork).
Пример: `systemd-run --scope --slice=user -p MemoryMax=1G -p CPUQuota=50% ./heavy-task` — запустит процесс с лимитом 1 ГБ RAM и половиной ядра. Превысил — OOM-killer убивает.
cgroups — основа контейнеров. Docker/containerd/podman создают cgroup при запуске контейнера и вписывают туда все дочерние процессы. `docker run --memory=512m --cpus=1.5` под капотом = cgroup v2 с `memory.max=512M`, `cpu.max=150000 100000`. Kubernetes идёт дальше — resource requests/limits транслируются в cgroups.
cgroups v1 (`/sys/fs/cgroup/{cpu,memory,pids,...}/`) vs v2 (единая иерархия `/sys/fs/cgroup/`). v2 — стабильно с ядра 5.0 (2019), единственная в новых Ubuntu/RHEL. Docker/K8s поддерживают обе.