Namespaces изолируют представление процессов, сети и файловых систем; cgroups учитывают и ограничивают ресурсы. CPU-лимит ограничивает доступное процессорное время, а память нельзя просто отложить.
Как механизмы Linux Cgroups (Control Groups) и Namespaces формируют изоляцию внутри Docker-контейнера? Что происходит с Python-процессом, когда он превышает лимит resources.limits.cpu в Kubernetes, и почему превышение limits.memory приводит к OOMKilled, а превышение CPU — только к троттлингу?
Namespaces изолируют представление процессов, сети и файловых систем; cgroups учитывают и ограничивают ресурсы. CPU-лимит ограничивает доступное процессорное время, а память нельзя просто отложить.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Namespaces изолируют представление процессов, сети и файловых систем; cgroups учитывают и ограничивают ресурсы. CPU-лимит ограничивает доступное процессорное время, а память нельзя просто отложить.
При исчерпании CPU-квоты Python-процесс остаётся жив, но дольше ждёт выполнения: растут задержки, а не обязательно возникает ошибка. При нехватке памяти в cgroup ядро пытается освободить ресурсы и может убить процесс; завершение контейнера отражается как OOMKilled. Это разные механизмы, и namespaces не заменяют ни лимиты, ни полноценную границу виртуальной машины.
Источник: kubernetes.io.