virtup — управление виртуальными машинами


Данная статья посвящена рекламе моего инструмента virtup для управления виртуальными машинами kvm и контейнерами LXC.

Написал я свой скрипт, как замену vagrant для быстрого и простого разворачивания виртуалок из готовых образов и создания их с нуля. Постепенно он разрастался и даже приобрел базовый функционал управления LXC контейнерами.

Это всё благодаря возможностям библиотеки libvirt и языку Python.

Libvirt из коробки предоставляет полноценные инструменты для создания и управления виртуальными машинами, это и virsh, и GUI virt-manager, даже простая команда kvm позволяет запустить виртуальную машину.

Но virsh слишком сложный и также не имеет нужного мне функционала по работе с образами, а gui не подходит, т.к. удобней работать в консоли.

Virtup написан на python, это не обвязка над virsh, virtup использует библиотеку python libvirt и вполне себе самостоятелен.

Для установки просто скачайте скрипт с https://github.com/kshcherban/virtup и установите пакеты libvirt-bin, python-libvirt (Debian).

Рассмотрим основные команды virtup. Все примеры я буду выполнять на своем ноутбуке.

Список доступных команд вы увидите, если выполните:

virtup help

Просмотр информации

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

virtup ls
Name                          CPUs           Memory              State
debian6X                      2              2.00G                  up
debian-6                      3              0.00b                down
hadoop-test                   2              0.00b                down
puppet-master                 2              0.00b                down
winxp                         1              0.00b                down

Выполнив команду virtup help ls вы увидите все возможные аргументы команды ls с описанием.

Показать информацию о гипервизоре.

virtup ls -i
Hostname:                     laptop
CPU count:                    3
CPU MHz:                      800
Architecture:                 x86_64
Memory total:                 7999MB
Memory used:                  2048MB
Memory free:                  5951MB

Memory used — это не вся используемая память на хостовой машине, а только та, что занята под работающие виртуалки.

Вывести информацию о сконфигурированных хранилищах гипервизора, которые доступны для виртуальных машин.

virtup ls -s
Pool name                     Size      Used      Avail     Use
default                       465.76G   333.49G   132.27G   71.60%
virtup-ssd                    58.93G    34.32G    24.62G    58.23%

Показать созданные тома и кем они используются

virtup ls -v
Pool           Volume                        Size      Use       Used by
default

              centos-6                      1.93G     0.41%     puppet-master
               debian-6.img                  0.00b     0.00%     debian-6
               debian6X                      5.25G     1.13%     debian6X
               test-machine                  8.00G     1.72%     None
               winxp                         0.00b     0.00%     None
               winxp.qcow2                   0.00b     0.00%     winxp
virtup-ssd

              hadoop-test                   2.41G     4.08%     hadoop-test
               r1e1.img                      198.51M   0.33%     debian6X
               r1e2.img                      198.03M   0.33%     debian6X
               r1e3.img                      197.50M   0.33%     debian6X

Use — это процесс использования томом места от общего доступного в хранилище.

ls -net выведет активные сетевые интерфейсы. Активные, всмысле сконфигурированные и используемые виртуальными машинами.

virtup ls -net
Interfaces                    Status
lo                            active
tor0                          active

Ну и уникальный функционал — вывести ip адреса работающих виртуальных машин. Я не использую какие-либо агенты на самих виртуалках, а просто сканирую локальный arp кэш на предмет искомых MAC адресов. Эта опция не работает для удаленных подключений.

Да, забыл сказать, можно удаленно управлять виртуалками, с помощью опции -c

virtup ls -ip
Name                          IP
debian6X                      10.254.0.2

Если в в кэше нет данных, бывает, что он протухает, то скрипт сканирует локальные подсети, которые соответствуют активным интерфейсам (см. выше) и добавляет полученные таблицы ip → mac в кэш. Это происходит довольно быстро, посмотрите, как это реализовано в исходном коде.

Создание, удаление виртуальных машин

Нет ничего проще, чем создать и запустить виртуальную машину с помощью virtup.

virtup create test-machine
Temporary template written in /tmp/test-machine.xml
test-machine created

По умолчанию, виртулка создается с одним ядром, 512 МБ оперативки, томом размером 8 ГБ в хранилище default, в default сети и случайным MAC адресом, но это все конфигурируется параметрами. Смотрите: virtup help create

Удалить — командой rm. Без опций том, привязанный к виртуалке не удаляется, чтоб удалить и том, используйте опцию –full

virtup rm --full test-machine
test-machine removed
Volume test-machine removed

Импорт и экспорт виртуальных машин

Выполняется, как это ни странно, командами import/export

Пример импорта kvm образа из raw image файла:

virtup import -i /data/Downloads/centos-6-amd64.img centos-test-import
Temporary template written in /tmp/centos-test-import.xml
centos-test-import imported
Uploading volume centos-test-import from /data/Downloads/centos-6-amd64.img
done 100.00%

При импорте kvm/qemu образов формат образа определяется автоматически, но образ обязательно нужно разархивировать, если он был сжат.

Импортировать можно и в локальный гипервизор, и в удалённый, указав опцию -c

Импортировать можно также и lxc образы, точнее директории. Поддержка lxc находится пока на начальном уровне, поэтому про неё в другой раз.

Импортировать помимо простого образа можно и xml описание домена, которое генерирует libvirt (virsh dumpxml). Также работает одновременный импорт образа плюс его xml описание.

Обязательными параметрами являются -i (образ) или -xml, а также имя виртуальной машины.

Для нежелающих создавать свои образы, я сделал уже готовые, которые можно загрузить с http://yadi.sk/d/KJROKkGb6Xv7u

Как нетрудно догадаться, экспорт осуществляется командой export

Экспортировать можно также и xml и образ и всё сразу. Команды соответствующие.

Поддерживается экспорт на локальную машину с удаленного гипервизора. Но т. к. образ машины передается по сети в несжатом виде, то такой экспорт нежелателен при отсутствии быстрой сети и большом размере диска виртуальной машины.

Запуск, остановка, приостановка

Запускается машина командой up, останавливается — down.

virtup up/down test-machine

Прошу принять во внимание, что остановка это грубое «отключение питания» на уровне гипервизора. Так что используйте её осторожно.

Существует возможность сохранить состояние машины в файл и потом восстановить его из этого файла.

Выполняется командами suspend/resume. Обязательным параметром, кроме имени виртуалки, является -f с указанием файла для сохранения состояния.

Процесс приостановки или заморозки виртуалки чем-то похож на гибернацию.

Консоль и виртуальные тома

В дополнение к существующему функционалу, который далёк от разнообразия команд virsh я написал еще две функции: доступ в консоль работающей виртулки и создание/удаление томов.

Чтоб консоль заработала, проделайте манипуляции, описанные в этой статье.

Для доступа в консоль используйте команду console. Покинуть консоль можно нажав комбинации <Ctrl> + ]

Для создания/удаления виртуального тома:

virtup vol [-p хранилище] -s размер имя_тома

По-умолчанию используется хранилище default и размер в 8ГБ.

На этом подведу итог. Даёшь виртуализацию в каждый компьютер!

comments powered by Disqus