Виртуализация

Что такое LXC?

Также известно как: Linux Containers
Определение

LXC is Linux-native containerisation that isolates processes with namespaces and cgroups while sharing the host kernel. LXC is excellent inside a trust boundary you already own and weak as a multi-tenant boundary, because a kernel escape affects every container on the host.

Почему LXC важен

LXC отлично работает внутри доверительной границы, которой вы уже владеете, и слаб как мультитенантная граница, потому что побег из ядра затрагивает все контейнеры на хосте.

LXC на практике

С LXC вы получаете лёгкий контейнер, разделяющий ядро хоста. Вы управляете им через набор команд lxc или API, следя за статистикой cgroup для оценки нагрузки на CPU и память. Настройка в основном сводится к лимитам namespace и cgroup: закрепление процессов, установка потолков памяти. Цена ошибки — экспозиция: побег из ядра скомпрометирует все контейнеры на хосте, поэтому вы рассматриваете хост как единый домен доверия и планируете отказоустойчивость на уровне хоста, а не каждого контейнера.

Что люди часто понимают неправильно в отношении LXC

Люди относятся к LXC как к границе безопасности, эквивалентной KVM. Это не так: контейнеры разделяют ядро, поэтому уязвимость в этом ядре может выйти за пределы любого контейнера. Исправление состоит в том, что LXC предназначен для изоляции внутри доверенной границы, которой вы владеете, а не для мультитенантного хостинга, где арендаторы могут быть враждебными.

LXC — частые вопросы

LXC — это то же самое, что Docker?

Нет. Docker строится на примитивах контейнеров, таких как LXC, но добавляет управление образами, слои и оркестрацию. LXC больше похож на лёгкую виртуальную машину: вы запускаете в нём полноценный дистрибутив и управляете им напрямую через systemd или init. Docker — это упаковка приложений; LXC — это виртуализация систем.

Могу ли я запускать LXC с собственным ядром?

Это зависит от хоста. Некоторые провайдеры, например OnionVPS, дают полный root и позволяют использовать собственные ядра, но с LXC вы разделяете ядро хоста, поэтому собственное ядро не подходит для самого контейнера. Для этого используется KVM. LXC привязан к версии ядра и конфигурации, которые предоставляет хост.

Где встречается LXC

Больше из раздела «виртуализация»

KVM
KVM — это полная аппаратная виртуализация, встроенная в ядро Linux, предоставляющая каждому гостю собственное ядро и аппаратно-обеспеченную изоляцию от других арендаторов.
OpenVZ
OpenVZ — это контейнерная виртуализация, в которой каждый экземпляр разделяет ядро хоста, поэтому гости не могут загружать модули ядра или запускать другую операционную систему.
Гипервизор
Гипервизор — это программный слой, который создаёт и запускает виртуальные машины, распределяя между ними физические CPU, память и ввод-вывод.
Nested virtualisation
Вложенная виртуализация позволяет виртуальной машине самой запускать виртуальные машины, предоставляя гостю расширения виртуализации процессора.
vCPU
vCPU — это виртуальный процессор, предоставляемый гостевой системе, поддерживаемый временем планирования на физическом ядре или потоке.
cloud-init
cloud-init — стандартный механизм настройки виртуальной машины при первой загрузке, использующий метаданные, предоставляемые платформой.