Задача
Один из важных плюсов облачных сервисов — возможность быстро поднять столько серверов, сколько нужно. Хочешь два — будет тебе два. Хочешь сто — два клика мышью и будет сто. Все зависит только от твоего кошелька, платформа же позволяет развернуть столько виртуальных серверов (с нужными ресурсами), сколько тебе нужно. С виртуальной машиной на домашнем компьютере такой фокус не проходит. Чтобы создать виртуалку, задать ей нужные настройки и, что муторнее всего, установить ОС, уходит уйма времени. В один момент мне стало интересно: а можно ли как-то автоматизировать процесс и разворачивать новые виртуальные машины по-настоящему быстро? Ну, то есть указать что-то вроде: "Хочу три виртуальные машины с такими-то настройками и установленную на них Ubuntu последней версии" — и получить эти три виртуальные машины без лишнего геморроя. В поисках подходящего решения я наткнулся на открытый проект Vagrant.
Хакер #159. Подделка контрольной суммы и ЭЦП с помощью коллизий
Решение
Используя в качестве основы бесплатный и потому особенно любимый нами Oracle's VirtualBox (4.0.x или 4.1.x), Vagrant позволяет создавать и конфигурировать виртуальные машины динамически. Как это происходит, предлагаю рассмотреть прямо на примере. Загружаем с downloads.vagrantup.com нужную версию дистрибутива (есть версии для Windows, Linux, Mac OS X) и поднимаем наш первый инстанс (виртуальную машину):
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box
$ vagrant init lucid32
$ vagrant up
Три команды — и новая виртуальная машина с установленной ОС запущена (если, конечно, ты не забыл предварительно установить VirtualBox)! Как несложно догадаться, команда "box add <имя виртуальной машины>" отвечает непосредственно за создание виртуальной машины.
В качестве параметра ей передается путь до специального box-файла — контейнера, позволяющего быстро развернуть на виртуальной машины нужную ОС. Мы указали не просто путь, а ссылку: в этом случае Vagrant сам выкачивает из сети образ.
Команда "init" инициализирует ОС, причем в качестве параметра необходимо указать тип системы: в нашем случае это 32-битная Ubuntu Lucid (10.04). После выполнения этих двух команд создается полностью работоспособная виртуальная машина с 512 Мб на борту. Последняя команда — "vagrant up" — лишь запускает ее в фоновом режиме.
Таким образом можно создавать и запустить нужное количество виртуалок. Управлять всем этим хозяйством можно опять же через консоль Vagrant. Работающую виртуальную машину можно оставить:
vagrant suspend
Чтобы посмотреть статус каждой из виртуальной машины, есть специальная команда для мониторинга:
vagrant status
К любой из гостевых ОС можно подключиться по SSH, используя сам Valgrant:
vagrant ssh
Если запустить приложение без параметров, то оно выдаст список всех доступных команд.
Параметры гостевых ОС можно отконфигурировать (например, прописать статические IP), задав нужные настройки в специальном скрипте Vagrantfile, который пишется на Ruby. С его же помощью можно, к примеру, пробросить порты до нужной тебе виртуальной машины. И, конечно же, ты можешь создавать свои box-файлы, из которых далее быстро развертывать гостевые ОС.