2015-04-14

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

Предыстория

История про то, как мы решали проблему тормозов сервера с сайтами и про то, что же такое виртуализация, обзор средств и какие задачи она решает.
Однажды, из-за трудноуловимых тормозов на сервере с кучей сайтов, было принято решение изолировать проекты друг от дружки, а именно - разнести их по виртуальным машинам. На тот момент я себе еще слабо представлял, что же такое гипервизоры, виртуальные машины и контейнеры. Просто что-то где-то слышал и пробовал использовать VMWare и VirtualBox. Но надо было использовать серверное консольное решение и начались поиски информации в интернете.


Что это и какие есть варианты


Статья про виды виртуализации в Википедии.
Существует масса средств для промышленной виртуализации и контейнеризации. Для виртуализации требуется поддержка процессором, для контейнеров этого не нужно. В некоторых случаях необходима установка специальной версии ядра Linux.
Виртуальная машина, в отличии от контейнера, больше напоминает реальный компьютер со своим аппаратным обеспечением, тогда как контейнер можно сравнить с изолированной папкой в ОС.
Существует и такое понятие как виртуальные диски, они являются неотъемлемой частью виртуальной машины. Есть разные форматы под разные гипервизоры (qcow2, vdi, vhd, vmdk и др.). В контейнерах же, выделяется определенный объем на диске хост-системы и, поэтому, размер диска контейнера можно очень просто изменять "на лету".
Минусом контейнеров является то, что в них можно запускать только системы на базе Linux.
Вкратце, с чем пришлось столкнуться во время изучения темы.

Hyper-V

Встроенный в серверные версии Windows гипервизор, по умолчанию включен. Также присутствует возможность включения в Windows 8 (возможно, не во всех редакциях). Само собой для серверов с сайтами для прожженных линуксоидов не подходит, пригодился для локальных задач.

QEMU

Эмуляция и виртуализация. Может использовать аппаратную виртуализацию KVM. Хороший вариант, с хорошей производительностью. Даже есть какая-то версия под Windows, на случай локальной разработки.

VirtualBox

Известная кроссплатформенная программа для рабочего стола. Имеется и консольная версия под Linux. Судя по информации из интернета - не лучший вариант по скорости для промышленных решений.

OpenVZ

Контейнерная виртуализация. Требуется специальная версия ядра Linux. Есть масса готовых шаблонов.

LXC

Работает на стандартном ядре. Идеальный вариант для нетбуков с atom-ными процессорами :-)
В остальном напоминает OpenVZ. Шаблонов, пока обнаружено меньше, но это всего лишь вопрос времени.
Найден веб-интерфейс LXC Web Panel для простых операций с контейнерами. Оригинал, похоже, заброшен, есть развивающиеся клоны.

Docker

Особый подход к контейнеризации. Позволяет изолировать не только целиком ОС, но и отдельные программы. Удобно в плане экономии места. Так же как и OpenVZ имеет репозиторий с готовыми контейнерами. Работает на стандартном ядре.

Облачные решения

Просто интересные облачные решения для работы с виртуальными машинами.

OpenStack

Документация по развертыванию OpenStack просто нереально объемная, так что попробовать так и не удалось.

DevStack

Решение на базе OpenStack. Имеет скрипт для установки, а также удобную панель управления.

Ubuntu Cloud

Среди составляющих Ubuntu Cloud хочется отметить интересный проект Juju для простого визуального управления облаком.

Управление

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

libvirt

Предоставляет единый API для управления многими гипервизорами и контейнерами.

Proxmox

www.proxmox.com
Пожалуй, самое простое, удобное и многофункциональное решение для управления виртуальными машинами KVM и контейнерами OpenVZ. Бесплатное! Позволяет создавать кластер, выполнять миграции между узлами, есть бекапы по расписанию, разграничение доступа и др. и пр. Даже есть REST API.
Лучше ставить на LVM для снятия бекапов без задержек с помощью снапшотов.

Итого

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