- Що таке LXC?
- Для чого це корисно?
- Які відмінності між LXC та загальною віртуалізацією?
Відповіді:
Якщо під "простою англійською" ви маєте на увазі нетехнічних людей, різницю неможливо легко пояснити. Це волосся занадто тонке, щоб його розколоти без дуже ретельного розгляду.
Якщо під "звичайною англійською мовою" ви маєте на увазі управлінські типи, які спілкуються з технічними людьми, і, таким чином, мають принаймні розуміння технічних тем, я подаю наступний верб:
Це інша форма віртуалізації.
Якщо ви подивитеся на VMWare ESXi, це повний гіпервізор, який виконує те, що називається повною віртуалізацією. Між віртуалізованими системами, що працюють поверх апаратних засобів, існує дуже невеликий шар. Існує повна апаратна віртуалізація, де ОС, що працює у віртуальній машині, повністю незалежна від самого гіпервізора і представлена всіма апаратними засобами, які вона очікує.
Зробіть ще один крок і подивіться на щось на зразок VMWare Player, Workstation, ESX (не ESXi) або VMWare Server, і у вас є повноцінна операційна система, яка забезпечує роль гіпервізора. Однак віртуальні машини все ще представлені повним набором віртуальної апаратури.
Інший підхід - пара-віртуалізація, якої Ксен дотримувався досить довго. У цій формі віртуалізації гостьова операційна система усвідомлює, що вона віртуалізована та була модифікована для роботи в цьому середовищі. Іноді все це потребує спеціальних драйверів пара-віртуалізації. В інших випадках потрібні прямо зміни ядра.
LXC або Linux Containers - це ще один крок. У цьому випадку використовується декілька екземплярів точно тієї ж операційної системи . Ядро може бути однаковим, але для кожного контейнера ОС працює кілька просторів користувачів. Кожен контейнер може мати або не мати іншої файлової системи.
Контейнери пропонують спосіб забезпечити чітке розділення безпеки між процесами таким чином, що недоступно в системах, що мають однаковий простір користувачів. У операційних системах, схожих на Unix, досить тривалий час знаходилась "тюремна в'язниця", але це не забезпечує розмежування процесів або можливість обмеження ресурсів, що споживаються процесами у в'язниці. Контейнеруючи такі процеси, використання ресурсів може бути обмежене, дискретні IP-адреси можуть бути призначені їм, а вразливості безпеки, що експлуатують користувацький простір, містяться з решти системи.
Де ви б використовували LXC проти якогось іншого типу віртуалізації? Це залежить, але LXC повинен забезпечити менше віртуалізації-покарання, ніж будь-який інший метод вітуалізації, оскільки це те саме ядро, яке опосередковує всі дзвінки в просторі користувачів, а не гіпервізор, який претендує на апаратну частину зображень ОС, які очікують спілкуватися з фізичним обладнанням. Тож якщо у вас є купа обробки, яка потребує тієї ж версії ОС, і її можна одночасно перезавантажити для оновлень, LXC може забезпечити недорогий спосіб запустити все це безпечно та за допомогою управління ресурсами.
LXC - це засіб, за допомогою якого можна виділити системи / процеси в ядрі. Система заблокована у "контейнері", щоб вона не могла взаємодіяти ні з чим поза цим контейнером. Таким чином назва Linux Containers.
Це може бути корисним для багатьох речей, однією з яких було б виділення служб, що працюють на машині. Якщо одна з цих служб порушена, сама хост-система (разом з іншими службами, що працюють у власних LXC), не буде впливати. Це навіть може бути використане як німий засіб надати кожному користувачеві доступ до власної системи, не хвилюючись, що вони взаємодіють між собою.
Більшість інших «поширених» віртуалізацій накладають великі витрати на використання ресурсів через необхідність емуляції апаратних пристроїв. LXC не вимагає будь-якої емуляції для апаратних пристроїв, оскільки кожному LXC надається обмежений / відсутність прямого доступу до обладнання. Кожна система "працює" на хості, але не може впливати на що-небудь поза її контейнера. Цей тип віртуалізації отримав назву віртуалізації на рівні ОС (google it). Що по суті означає дуже мало / неіснуючі накладні витрати для роботи Linux Container. Таким чином, у вас може бути сотні 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 / портів / інтерфейсів, процесора, використання пам'яті тощо.
LXC не настільки безпечний, як повноцінні віртуальні машини, але загалом це найкраще рішення. Зрештою, операційні системи - це безпечний обмін ресурсами. Більшу частину часу для цього потрібно дурно запускати кілька ОС - нам просто потрібна краща ОС з кращою ізоляцією. Саме це надає LXC та подібні інструменти.