Настройка ресурсов виртуальной машины с помощью libvirt

LinuxBeginner
Практиковаться сейчас

Введение

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

В терминологии libvirt виртуальная машина называется доменом. Постоянный домен имеет сохранённое определение — своего рода описание виртуального оборудования, — даже когда процесс QEMU не запущен. Запуск домена создаёт работающий экземпляр на основе этого определения, а остановка удаляет работающий экземпляр, сохраняя описание. Разделение постоянной конфигурации и текущего состояния является основной идеей этой лабораторной работы.

В этой лабораторной работе уже создан выключенный домен libvirt с именем lfcs-config. Он настроен с небольшим загрузочным диском, 64 МиБ памяти и одним виртуальным ЦП. Вы проверите исходную конфигурацию и с помощью команд управления ресурсами virsh перенастроите домен. Среда не предоставляет /dev/kvm, поэтому QEMU использует программную эмуляцию, а диски не содержат гостевую операционную систему. Тем не менее сам процесс управления и постоянная конфигурация libvirt являются настоящими.

Проверка существующей конфигурации домена

На этом этапе вы изучите постоянную конфигурацию и текущее состояние домена lfcs-config, прежде чем вносить изменения.

Перейдите в каталог проекта.

cd /home/labex/project

Выведите список всех доменов. Параметр --all включает остановленные домены, поэтому lfcs-config должен отображаться в состоянии shut off.

sudo virsh list --all

Без параметра --all команда virsh list обычно показывает только активные домены. Наличие остановленного домена в расширенном списке подтверждает, что libvirt по-прежнему хранит его постоянное определение, хотя виртуальная машина не потребляет процессорное время как работающая гостевая система.

Просмотрите сводную информацию о домене.

sudo virsh dominfo lfcs-config

Команда dominfo объединяет сведения об идентификаторе, жизненном цикле, процессорах, памяти, постоянной конфигурации и автоматическом запуске. На этом этапе воспринимайте эти данные как исходное состояние, а не как конечную цель: в дальнейшем должны измениться только те поля, которые вы намеренно перенастроите.

Обратите внимание на основные стабильные параметры конфигурации:

Name:           lfcs-config
State:          shut off
CPU(s):         1
Max memory:     65536 KiB
Used memory:    65536 KiB
Persistent:     yes
Autostart:      disable

Здесь libvirt указывает объём памяти в КиБ. Поскольку 1 МиБ равен 1024 КиБ, 65536 KiB соответствует 64 МиБ. Значение Persistent: yes означает, что определение сохраняется после выключения домена, а Autostart: disable — что libvirt не будет автоматически запускать этот домен при запуске службы виртуализации.

Выведите список подключённых блочных устройств. vda — подготовленный корневой диск, а его источником является существующий образ qcow2.

sudo virsh domblklist lfcs-config --details

В этой таблице Target — имя устройства, которое видит гостевая система, а Source — путь на хосте, где хранятся его данные. Диск virtio с именем vda аналогичен виртуальному накопителю, подключённому к виртуальной машине; файл qcow2 является образом этого накопителя на хосте.

Исходная конфигурация позволяет отделить уже существующие ресурсы от изменений, которые вы внесёте на следующих этапах.

Настройка постоянных параметров памяти и виртуальных ЦП

На этом этапе, пока домен выключен, вы увеличите максимальный объём постоянной памяти, объём памяти, выделяемый при запуске, и количество виртуальных ЦП.

В libvirt максимальный объём памяти и объём памяти, назначаемый при следующем запуске, задаются отдельно. Сначала установите постоянный максимальный объём равным 128 МиБ. Параметр --config изменяет сохранённое определение домена, а не временное значение для работающей системы.

sudo virsh setmaxmem lfcs-config 128M --config

Максимальный предел должен быть не меньше назначенного объёма памяти. Удобно рассматривать max memory как вместимость памяти виртуальной машины, а current memory — как объём, запрашиваемый для обычной работы. Поскольку домен выключен, изменение с параметром --config выполняется предсказуемо и вступит в силу при следующем запуске.

Установите объём памяти, который будет назначен при следующем запуске, равным 96 МиБ.

sudo virsh setmem lfcs-config 96M --config

Суффикс M указывает virsh, что значение задано в мебибайтах. В последующем выводе dominfo 128 МиБ будут представлены как 131072 KiB, а 96 МиБ — как 98304 KiB; это те же объёмы, выраженные в других единицах.

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

sudo virsh setvcpus lfcs-config 2 --config --maximum

Эта первая команда изменяет верхний предел в сохранённом определении. Сама по себе она ещё не назначает два доступных виртуальных ЦП. Разделение максимального значения и текущего назначения позволяет заранее зарезервировать возможность дальнейшего масштабирования виртуальной машины.

Назначьте два виртуальных ЦП для следующего запуска.

sudo virsh setvcpus lfcs-config 2 --config

Вторая команда задаёт постоянное количество виртуальных ЦП в рамках нового ограничения. Порядок важен: попытка назначить два виртуальных ЦП, когда максимальное количество всё ещё равно одному, завершилась бы ошибкой.

Проверьте обновлённое постоянное определение.

sudo virsh dominfo lfcs-config

Теперь соответствующие поля должны иметь следующие значения:

CPU(s):         2
Max memory:     131072 KiB
Used memory:    98304 KiB

Создание и подключение постоянного диска данных

На этом этапе вы создадите второй образ qcow2 и подключите его как постоянный диск virtio с именем vdb.

Создайте разреженный образ qcow2 размером 64 МиБ в каталоге образов libvirt.

sudo qemu-img create -f qcow2 /var/lib/libvirt/images/lfcs-config-data.qcow2 64M

Команда создаёт контейнер виртуального диска, а не файловую систему и не подключённый каталог. Параметр -f qcow2 выбирает формат образов QEMU с копированием при записи, а 64M задаёт его виртуальную ёмкость. Вначале такой разреженный образ занимает на хосте значительно меньше места, чем его виртуальный размер, и увеличивается по мере записи данных гостевой системой.

Разрешите процессу QEMU в этой учебной среде открыть временный образ.

sudo chmod 666 /var/lib/libvirt/images/lfcs-config-data.qcow2

Режим 666 предоставляет права на чтение и запись всем категориям пользователей. Такие широкие права делают этот временный учебный сценарий независимым от настроек пользователя и группы QEMU на конкретном хосте, однако для промышленной среды это не рекомендуется. На реальном хосте используйте владельца, группу, метку SELinux или политику AppArmor, предусмотренные локальной службой libvirt.

Подключите файл к домену lfcs-config. Параметр --target vdb задаёт имя блочного устройства в гостевой системе, --subdriver qcow2 фиксирует формат образа, а --config изменяет постоянное определение для следующего запуска.

sudo virsh attach-disk lfcs-config \
  /var/lib/libvirt/images/lfcs-config-data.qcow2 \
  vdb --targetbus virtio --subdriver qcow2 --config

Путь источника относится к хосту, а vdb — это имя устройства, которое увидит гостевая система. Параметр --targetbus virtio выбирает паравиртуализированный интерфейс диска, широко используемый для эффективной работы гостевых систем Linux. Поскольку домен выключен и команда использует --config, libvirt записывает устройство в сохранённое описание, не пытаясь подключить его к работающей системе.

Выведите список постоянных блочных устройств.

sudo virsh domblklist lfcs-config --details

Теперь вывод должен содержать оба устройства — vda и vdb, причём vdb должен ссылаться на lfcs-config-data.qcow2.

На этом этапе файл образа и подключение диска к домену являются двумя отдельными фактами. Само создание файла qcow2 не подключает его к виртуальной машине, а последующее отсоединение диска не удалит автоматически исходный файл.

Включение автоматического запуска и проверка состояния во время работы

На этом этапе вы включите автоматический запуск домена, запустите виртуальную машину и сравните её текущие ресурсы с постоянными настройками.

Включите автоматический запуск, чтобы libvirt запускал этот домен при старте службы виртуализации.

sudo virsh autostart lfcs-config

Автоматический запуск — это сохранённый флаг политики, а не команда немедленно запустить домен. Он полезен для инфраструктурных служб, которые должны автоматически возвращаться в рабочее состояние после перезапуска хоста или службы libvirt.

Запустите домен с использованием обновлённого постоянного определения.

sudo virsh start lfcs-config

При запуске из сохранённого определения создаётся процесс QEMU с настроенными двумя виртуальными ЦП, новыми ограничениями памяти и обоими дисками. Команда сообщает об успешном запуске домена, а dominfo и domblklist позволяют подтвердить, что его состояние соответствует заданной конфигурации.

Дайте QEMU несколько секунд, чтобы перейти в рабочее состояние.

sleep 3

Проверьте домен. Он должен работать с двумя виртуальными ЦП, максимальным объёмом памяти 128 МиБ и включённым автоматическим запуском.

sudo virsh dominfo lfcs-config

Для этого домена с программной эмуляцией поле Used memory во время работы обычно показывает 128 МиБ, хотя постоянный запрос currentMemory равен 96 МиБ. Гостевая операционная система и драйвер ballooning отсутствуют, поэтому libvirt не может уменьшить фактически выделенный объём памяти. Проверьте неактивный XML, чтобы убедиться, что конфигурация для следующего запуска по-прежнему содержит 96 МиБ:

sudo virsh dumpxml lfcs-config --inactive | grep -E '<memory|<currentMemory|<vcpu'

Параметр dumpxml --inactive запрашивает сохранённое определение, а не текущее представление работающего QEMU. Конвейер передаёт этот XML команде grep, которая выводит только элементы памяти и процессоров. Такое целенаправленное сравнение помогает не принять ожидаемое различие в отображении ресурсов во время работы за ошибку настройки.

Стабильные значения должны включать <memory unit='KiB'>131072</memory>, <currentMemory unit='KiB'>98304</currentMemory> и значение виртуальных ЦП, равное 2. Это сравнение показывает, почему постоянную конфигурацию и сведения о ресурсах работающей системы следует проверять отдельно.

Выведите список дисков активного домена.

sudo virsh domblklist lfcs-config --details

В списке должны присутствовать vda и vdb. Это подтверждает, что сохранённая конфигурация была применена при запуске QEMU.

Остановка виртуальной машины и проверка постоянного состояния

На этом этапе вы остановите процесс гостевой системы, сохранив настроенный домен, подключённые диски и параметры автоматического запуска.

Поскольку учебные диски не содержат операционной системы, корректное завершение работы гостевой системы невозможно. Используйте destroy, чтобы немедленно остановить процесс QEMU. Эта команда изменяет текущее состояние, но не удаляет постоянное определение домена.

sudo virsh destroy lfcs-config

Несмотря на название, virsh destroy скорее отключает питание виртуальной машины, чем удаляет её. В данном случае эта команда допустима только потому, что в упражнении нет гостевой операционной системы и важных данных. Для настоящей работающей гостевой системы предпочтительнее использовать virsh shutdown, чтобы операционная система успела записать данные и корректно завершить работу.

Убедитесь, что домен остановлен.

sudo virsh domstate lfcs-config

Вывод должен быть таким:

shut off

В последний раз проверьте постоянную конфигурацию.

sudo virsh dominfo lfcs-config

Ожидаемое состояние shut off относится только к текущему состоянию работы. Параметры ЦП, памяти, подключённых дисков и автоматического запуска остаются в постоянном определении. Для удаления этого определения потребовалась бы другая операция, например virsh undefine; при этом даже удаление определения домена не обязательно удаляет файлы образов дисков.

Выведите список всех доменов и их состояние автоматического запуска. Остановленный домен lfcs-config должен остаться определённым и отмеченным для автоматического запуска.

sudo virsh list --all --autostart

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

Итоги

Вы взяли под управление существующий домен libvirt и изменили его постоянную конфигурацию ресурсов, не переписывая XML вручную. Вы увеличили максимальный и назначаемый объём памяти, настроили два виртуальных ЦП, создали и подключили второй диск qcow2, включили автоматический запуск, проверили конфигурацию в работающем домене QEMU и остановили процесс, сохранив управляемую виртуальную машину. В этом заключается практическая разница между простым изучением жизненного цикла виртуальной машины и настройкой виртуальной машины в соответствии с заданным целевым состоянием.