- Что такое LXC?
- Для чего это полезно?
- Каковы различия между LXC и обычной виртуализацией?
Ответы:
Если под «простым английским» вы подразумеваете нетехнических людей, разницу нельзя объяснить легко. Эти волосы слишком тонкие, чтобы их можно было расчесывать без тщательного рассмотрения.
Если под «простым английским» вы имеете в виду управленческие типы, которые общаются с техническими специалистами и, таким образом, имеют хотя бы мимолетное понимание технических тем, я представляю следующую фразу:
Это другая форма виртуализации.
Если вы посмотрите на VMWare ESXi, это полный гипервизор, работающий под названием полная виртуализация. Между виртуализированными системами, работающими поверх аппаратного обеспечения, существует очень маленький уровень. Существует полная аппаратная виртуализация, при которой ОС, работающая на виртуальной машине, полностью независима от самого гипервизора и представлена всем ожидаемым оборудованием.
Сделайте еще один шаг и посмотрите на что-то вроде VMWare Player, Workstation, ESX (не ESXi) или VMWare Server, и у вас будет полная операционная система, обеспечивающая роль гипервизора. Однако виртуальные машины по-прежнему представлены полным массивом виртуального оборудования.
Другой подход - паравиртуализация, которой Xen следовал довольно долго. В этой форме виртуализации гостевая операционная система знает, что она виртуализирована и была изменена для работы в этой среде. Иногда все это требует специальных драйверов для паравиртуализации. В других случаях необходимы прямые изменения ядра.
LXC, или Linux Containers, - это еще один шаг вперед. В этом случае работает несколько экземпляров одной и той же операционной системы . Ядро может быть одинаковым, но для каждого контейнера ОС работает несколько пользовательских пространств. Каждый контейнер может иметь или не иметь свою файловую систему.
Контейнеры предлагают способ обеспечить строгое разделение безопасности между процессами способом, который недоступен в системах с одним и тем же пользовательским пространством. Unix-подобные операционные системы уже давно имеют «chroot jail», но он не обеспечивает разделения процессов или возможности ограничивать ресурсы, потребляемые процессами в jail. Благодаря контейнеризации таких процессов использование ресурсов может быть ограничено, им могут быть назначены дискретные IP-адреса, а уязвимости в системе безопасности, использующие пространство пользователя, содержатся в остальной части системы.
Где бы вы использовали LXC по сравнению с другим типом виртуализации? Это зависит, но LXC должен обеспечивать меньшее наказание за виртуализацию, чем любой другой метод витализации, поскольку это то же самое ядро, которое выполняет все вызовы пространства пользователя, а не гипервизор, притворяющийся аппаратным для множества образов ОС, ожидающих взаимодействия с физическим оборудованием. Таким образом, если у вас есть куча процессов, которым требуется одна и та же версия ОС, и которые можно одновременно перезагружать для обновлений, LXC может предоставить недорогой способ безопасного выполнения всего этого с управлением ресурсами.
LXC - это средство для изоляции систем / процессов в ядре. Система заблокирована в «контейнере», поэтому она не может взаимодействовать ни с чем вне этого контейнера. При этом название Linux Containers.
Это может быть полезно для многих вещей, одной из которых будет изоляция служб, работающих на машине. Если одна из этих служб будет скомпрометирована, сама хост-система (вместе с другими службами, работающими в своих собственных LXC) не будет затронута. Его даже можно использовать как дурацкое средство для предоставления каждому пользователю root-прав доступа к своей собственной системе, не беспокоясь о том, что они взаимодействуют друг с другом.
Большинство других «обычных» виртуализаций накладывают большие накладные расходы на использование ресурсов из-за необходимости эмулировать аппаратные устройства. LXC не требует какой-либо эмуляции для аппаратных устройств, поскольку каждому LXC предоставляется ограниченный / нет прямого доступа к оборудованию. Каждая система «работает» на хосте, но не может влиять на что-либо вне ее контейнера. Этот тип виртуализации называется виртуализацией на уровне ОС (Google it). Что, по сути, означает очень небольшие / несуществующие накладные расходы для запуска контейнера Linux. Таким образом, вы можете иметь сотни LXC на данной машине, но вы бы достаточно быстро исчерпали ресурсы, используя «обычное» программное обеспечение виртуальной машины.
Я на самом деле более знаком с Linux-Vserver, но теория очень похожа .
Самый простой способ понять это - узнать, что делает chroot. chroot позволяет вам «войти» в папку Unix-подобной системы, как если бы она была полностью самостоятельной системой. Другими словами:
если у тебя есть:
/
/boot
/etc
/home
...
и т.д., затем вы можете добавить каталог some_new_install:
/
/some_new_install
/boot
/etc
/home
/usr
...
/boot
/etc
/home
/usr
...
и войдите в / some_new_install. Тогда / some_new_install / etc - это, например, новый / etc, а оригинальный / etc скрыт и (в основном) недоступен. / usr / bin может отличаться от оригинала разными программами. MySQL может быть той же программой в / usr / bin / mysql, но с другими данными в / var / lib / mysql.
Файловая система была виртуализирована; Вы разделили свою исходную файловую систему, разделили ее ресурсы, изолировали эти ресурсы от других виртуализированных ресурсов.
Это довольно здорово. Вместо запуска совершенно новой виртуальной копии Unix, просто для запуска одной дополнительной программы, вы можете перейти в виртуальную файловую систему и запустить ее на том же ядре, в тех же библиотеках (если вы использовали символические ссылки) и т. Д. Это НАМНОГО более эффективно, чем что-то вроде Xen или VirtualBox.
Проблема в том, что если одна из этих программ, скажем, MySQL, сходит с ума и начинает использовать весь ваш процессор и перезаписывать диск, то это все равно повлияет на остальную часть машины, потому что виртуализирована только файловая система, а не процессор или производительность диска. IP-адреса и порты также не виртуализируются, поэтому, если две программы отправляют информацию по сети, они будут делать это с одного и того же IP-адреса, что может вызвать конфликты. Аналогично, если две копии mysql пытаются прослушать порт, вторая не удастся, потому что порт используется.
LXC решает эту проблему путем виртуализации не только файловой системы, но также сетевых ips / ports / interfaces, процессора, использования памяти и т. Д.
LXC не так безопасен, как полноценные виртуальные машины, но в целом это превосходное решение. В конце концов, операционные системы предназначены для безопасного совместного использования ресурсов. В большинстве случаев глупо запускать несколько ОС для этого - нам просто нужна лучшая ОС с лучшей изоляцией. Это то, что обеспечивают LXC и подобные инструменты.