KVM-хостинг: для чего, как и почему

Итак, свершилось. Пока в тестовом режиме, но мы запустили хостинг виртуальных машин на KVM. Вместе с ним пришли новые возможности — и, конечно, новые вопросы. И в нескольких следующих абзацах мы их попробуем вкратце осветить.

Речь пойдет о XEN-PV, который мы уже предоставляем пользователям, и KVM. XEN-HVM, который является аналогом KVM далее не будет рассматриваться. Это связано с тем, что, по нашему мнению, KVM как система полной виртуализации более перспективна.

Что такое KVM VPS-хостинг, чем он примечателен и какие возможности он предоставляет по сравнению с XEN? По данному поводу написано уже множество статей. Все они сводятся к одному: XEN быстрее. XEN более гибок. Наконец, исторически, XEN появился раньше, и т.д. и т.п. Тем не менее, появление у нас первого KVM-носителя вызывает множество положительных эмоций. Почему? Разберемся по порядку.

Что собой представляет KVM? Название расшифровывается как Kernel-based Virtual Machine, т.е. виртуальная машина на основе ядра операционной системы. Ядро операционной системы-хозяина использует модуль для управления ресурсами виртуальных машин с использованием аппаратных расширений виртуализации (таких как VT-x). В этом кроется его коренное отличие от XEN. Если хорошенько вспомнить, технология ХEN представляет собой программный гипервизор, на основе которого запускаются виртуальные машины. И только. Никакой операционной системы-хозяина.

Такой подход позволяет достичь максимальной эффективности в плане быстродействия. Однако он же представляет собою и главный недостаток XEN-виртуализации: операционная система виртуальной машины должна знать, что она работает не напрямую с аппаратной частью, а через какую-то прослойку, гипервизор.  А вот это уже накладывает некоторые свои ограничения. Ядро операционной системы для работы с xen должно быть специальным образом модифицировано. Иначе ни о каком эффективном взаимодействии с гипервизором говорить не придется.

Совершенно по-иному работает KVM. В отличие от Хеn, в котором все операционные системы на физическом носителе работают через гипервизор, KVM как такового гипервизора не предоставляет. Однако KVM предоставляет интерфейс для создания эмулированной изолированной среды, в  которой запускается гостевая операционная система. За длинными словами кроется простой смысл: для Xen все равны. И операционная система — хозяин не многим отличается от операционной системы — гостя. Посудите сами: то же модифицированное ядро, работа через гипервизор… при этом гипервизор поддерживает изоляцию виртуальных машин (да и операционной системы-хозяина) лишь до определенного уровня.

В KVM отдельного от системы-хозяина гипервизора нет. Есть только интерфейс для управления ресурсами, псевдоустройство /dev/kvm — но именно такая схема позволяет управлять ресурсами полностью и при этом максимально изолировать гостевую систему от хозяина. Поскольку виртуальные машины в kvm являются процессами в основной системе, это позволяет более гибко настраивать разделение ресурсов (например cgroups можно использовать). Виртуальной машине больше не обязательно иметь модифицированное ядро. Более того, в отличие от xen, в kvm можно предоставить виртуальной машине управлять самостоятельно разметкой диска, процессом загрузки опреационной системы — да что там загрузки, в kvm можно самостоятельно установить понравившуюся операционную систему! Вместе с появлением kvm-хостинга, наконец стало возможно устанавливать и использовать на нашем хостинге опреационные системы семейства BSD (FreeBSD и все, что на ней базируется, а также NetBSD, OpenBSD, DragonFlyBSD и т.п.) — и не только их, а также можно установить OpenSolaris (и пришедшую ему на смену OpenIndiana), различные дистрибутивы со специфическим ядром и т.п. Владелец ВПС получает больший контроль не только над установкой системы (разметкой диска, настройками загрузчика и т.п.) — также становятся доступны напрочь отсутствовавшие в Xen настройки APIC, ACPI, расширения PAE.

Вместо достаточно, что уж греха таить, неудобного и медленного (из-за работы через java-машину) доступа к rescue-консоли из панели клиента, для kvm доступен доступ через VNC-сервер, который можно осуществлять с использованием своего любимого VNC-клиента, к примеру, UltraVNC — и все это “из коробки”. Более того, по протоколу VNC вполне себе можно работать с графическим интерфейсом X-windows — и все с помощью того же VNC-клиента! Кроме того, с kvm владелец ВПС получает на порядок больше самостоятельности. Вы компилировали ядро операционной системы и оно получилось неработоспособным? Никаких проблем! Вы можете загрузить ваш ВПС с образа CD-диска (LiveCD) и починить все, что только что случайно сломали на вашем ВПС, не вспоминая, в какой строчке какого конфигурационного файла вы ошиблись, чтоб объяснить это в тикете сотрудникам технической поддержки. Вам нужно установить программное обеспечение для IP-телефонии (к примеру, Asterisk)? Вы можете установить его на ВПС теми же привычными действиями, которыми Вы устанавливали его ранее на сервер в офисе… и еще сэкономить драгоценные кванты времени, выделяемые виртуальной машине, работая с расширениями виртуализации сетевого адаптера носителя, и при этом избавиться от шумящего и потребляющего электричество сервера в собственном офисе.

Итак, из всего вышесказанного, KVM — это полная самостоятельность (можно устанавливать практически любую операционную систему), минимальная зависимость от провайдера, колоссальная гибкость (доступно управление даже функциями BIOS — и это для виртуальной машины на хостинге!), да еще и высокая эффективность. Но, тем не менее, ложка дегтя в бочке меда быть должна. Иначе, при всех приведенных достоинствах, kvm бы вытеснил уже и Xen, и Hyper-V, и, глядишь — VMware. Но, к сожалению, это не совсем так. Из-за того, что ядро операционной системы — хозяина берет на себя функции управления работой устройств, предоставляемых гостевой операционной системе, страдает быстродействие, и, соответственно, скорость работы программ в виртуальной машине, да и обмена данными с диском, будет ниже примерно на 20% по сравнению с теми же программами на том же оборудовании, но в виртуальной машине Xen. На сегодняшний момент это — основной недостаток.

Есть, конечно, механизмы по улучшению производительности, такие как virtio и поддержка виртуализации в процессорах. Но дотянуть до чистой паравируализации в xen не получится. Не стоит рассчитывать на KVM-ВПС для приложения, которое должно производить выборки колоссальных объемов данных из базы, сортировать их, производить компрессию данных… Но вполне можно порекомендовать воспользоваться KVM-хостингом, к примеру, если Вам необходимо использовать тюнинг ядра операционной системы, либо же операционную систему, отличную от системы носителя (все те же BSD), или Вы хотите использовать впс для экспериментов, мультисистемной загрузки и прочего. Также если Вам нужен надежный ВПС, уровень подконтрольности которого Вам сравним с выделенным физическим сервером, на котором Вы хотите установить и настроить систему, которой предстоит работать годами — KVM-хостинг — как раз подходящий для такого решения выбор. We promise many years of rock-stable work!