Назад | Перейти на главную страницу

Объясните простым языком, что такое LXC и для чего он полезен

Если под «простым английским» вы имеете в виду людей, не обладающих техническими знаниями, разницу нелегко объяснить. Эти волосы слишком тонкие, чтобы их можно было разделить без очень внимательного рассмотрения.

Если под "простым английским языком" вы имеете в виду менеджеров, которые разговаривают с техническими специалистами и, таким образом, имеют хотя бы мимолетное понимание технических тем, я предлагаю следующий текст:


Это другая форма виртуализации.

Если вы посмотрите на VMWare ESXi, это полный гипервизор, на котором работает так называемая полная виртуализация. Между виртуализированными системами, работающими поверх оборудования, существует очень маленький слой. Существует полная аппаратная виртуализация, при которой ОС, работающая на виртуальной машине, полностью независима от самого гипервизора и предоставляется со всем ожидаемым оборудованием.

Сделайте еще один шаг и посмотрите на что-то вроде VMWare Player, Workstation, ESX (не ESXi) или VMWare Server, и у вас будет полноценная операционная система, обеспечивающая роль гипервизора. Однако виртуальные машины по-прежнему представлены полным набором виртуального оборудования.

Другой подход - паравиртуализация, которой Xen придерживался довольно долгое время. В этой форме виртуализации гостевая операционная система знает, что она виртуализирована и была модифицирована для работы в этой среде. Иногда для этого нужны только специальные драйверы паравиртуализации. В других случаях необходимы прямые изменения ядра.

LXC, или контейнеры Linux, - еще один шаг вперед. В этом случае выполняется несколько экземпляров точно такая же операционная система. Ядро может быть одинаковым, но для каждого контейнера ОС работает несколько пользовательских пространств. Каждый контейнер может иметь различную файловую систему, а может и не иметь.

Контейнеры предлагают способ обеспечить надежное разделение безопасности между процессами, что недоступно в системах с одним и тем же пользовательским пространством. В Unix-подобных операционных системах в течение некоторого времени используется «chroot 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 решает эту проблему путем виртуализации не только файловой системы, но и сетевых IP-адресов / портов / интерфейсов, ЦП, использования памяти и т. Д.

LXC не так безопасен, как полноценные виртуальные машины, но в целом это лучшее решение. В конце концов, операционные системы предназначены для безопасного совместного использования ресурсов. В большинстве случаев глупо запускать для этого несколько ОС - нам просто нужна лучшая ОС с лучшей изоляцией. Это то, что предоставляют LXC и подобные инструменты.