Данная статья посвящена рекламе моего инструмента 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ГБ.
На этом подведу итог. Даёшь виртуализацию в каждый компьютер!