virt_guest_manage

Роль управления виртуальными гостями

Эта роль использует официальный модуль ansible virt для управления виртуальными машинами на базе RHEL, используя KVM в качестве гипервизора. По умолчанию используется форк AlmaLinux от RHEL. Вы можете управлять всеми вашими виртуальными машинами (ВМ) напрямую через настройки в group_vars или host_vars. Основная особенность этой роли - параллельная установка всех виртуальных машин, указанных в virt_guest_list.

Начало работы

Поддерживаемые версии дистрибутивов на уровне виртуальных машин
  • CentOS el6 (не тестировалось с последними версиями роли)
  • CentOS el7
  • AlmaLinux el8
  • AlmaLinux el9
Обновление значений по умолчанию для ваших нужд

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

Вне сферы этой роли

Эта роль может управлять виртуальными дисками на базе LVM для ВМ, но вам нужно создать физический объем (PVS) и группу томов (VGS) перед использованием. Также есть два разных варианта для виртуальных сетевых интерфейсов ВМ. Первый вариант - использовать существующий и уже настроенный Linux мост, а второй - использовать networking libvirt. В любом случае последний вариант может быть управляем с помощью virt_network_list напрямую из этой роли.

Переменные

Общие
  • virt_guest_dependency_qemu_kvm_role: [необязательно, по умолчанию true]: Включить ли зависимую роль для qemu-kvm
  • virt_guest_mirror: [по умолчанию: http://repo.almalinux.org]: Зеркало Almalinux, которое будет использоваться для установки ОС
  • virt_guest_os_location: [по умолчанию: {{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os]: Путь, где хранятся компоненты ОС Almalinux
  • virt_guest_kickstart_config_dir: [по умолчанию: /tmp/kickstart]: Путь, где будут созданы файлы kickstart
  • virt_guest_kickstart_config_port: [по умолчанию: 8000]: Порт для загрузки конфигурации kickstart во время установки
  • virt_guest_kickstart_config_url: [по умолчанию: ip гипервизора]: URL для загрузки конфигурации kickstart во время установки
  • virt_guest_kickstart_config_serve_timeout: [по умолчанию: 90]: Время в секундах для обслуживания файлов kickstart
  • virt_guest_kickstart_installation_timeout: [по умолчанию: 480]: Время в секундах для завершения установки kickstart
  • virt_guest_init_passwd: [обязательно]: Пароль для пользователя root, который вы будете использовать для первого входа
  • virt_guest_init_hostname: [по умолчанию: fresh-installed.local]: Первое имя хоста на уровне ОС виртуальной машины
Список виртуальных сетей и их настройки
  • virt_network_list: [обязательно, по умолчанию: {}]: Объявления виртуальных сетей
  • virt_network_list.key: [обязательно]: Имя виртуальной сети (например, br-nat0:)
  • virt_network_list.key.router: [обязательно]: IP-адрес виртуального маршрутизатора (например, 192.168.2.1)
  • virt_network_list.key.netmask: [обязательно]: Маска подсети виртуальной сети (например, 255.255.255.0)
  • virt_network_list.key.start: [обязательно]: Первый IP в диапазоне виртуальной сети (например, 192.168.2.1)
  • virt_network_list.key.end: [обязательно]: Последний IP в диапазоне виртуальной сети (например, 192.168.2.254)
Список виртуальных гостей и их настройки
  • virt_guest_list: [обязательно, по умолчанию: {}]: Объявления виртуальных гостей
  • virt_guest_list.key: [обязательно]: Имя виртуальной машины (например, example-vm:)
  • virt_guest_list.key.autostart: [необязательно, по умолчанию true]: Включить ли автозапуск виртуальной машины
  • virt_guest_list.key.uuid: [обязательно]: Уникальный идентификатор виртуальной машины (например, ad852ffe-07d9-43ec-9f5a-ced644f9a7a5)
  • virt_guest_list.key.cpu: [необязательно, по умолчанию 1]: Установить ограничения на количество ядер ЦП
  • virt_guest_list.key.ram: [необязательно, по умолчанию 2]: Установить ограничения по RAM. Это значение указывается в GiB
  • virt_guest_list.key.disk: [обязательно]: Объявления диска виртуального гостя
  • virt_guest_list.key.disk.[s|v]d[a-z]: [обязательно]: Имя виртуального диска в виртуальной машине (например, sda, sdb, sdc и т.д., или vda, vdb, vdc и т.д.)
  • virt_guest_list.key.disk.[s|v]d[a-z].type: [необязательно, по умолчанию block]: Тип виртуального диска (например, block, file)
  • virt_guest_list.key.disk.[s|v]d[a-z].name: [обязательно только для .type: file]: Имя виртуального файла диска qemu
  • virt_guest_list.key.disk.[s|v]d[a-z].format: [необязательно, по умолчанию raw]: Тип формата диска qemu (например, raw, qcow2)
  • virt_guest_list.key.disk.[s|v]d[a-z].format_options: [необязательно, по умолчанию preallocation=off]: Опции формата диска qemu (например, preallocation=metadata)
  • virt_guest_list.key.disk.[s|v]d[a-z].vg: [обязательно только для .type: block]: Имя группы томов LVM
  • virt_guest_list.key.disk.[s|v]d[a-z].lv: [обязательно только для .type: block]: Имя логического тома LVM
  • virt_guest_list.key.disk.[s|v]d[a-z].size: [обязательно, кроме использования физических дисков]: Размер виртуального диска (например, 2048M, 10G, 1T, также можно использовать 20%VG или любой эквивалент для дисков на базе LVM)
  • virt_guest_list.key.disk.[s|v]d[a-z].device: [обязательно только для физических дисков]: Полный путь к физическому диску на гипервизоре (например, /dev/sdb, /dev/nvme0n1 и т.д.)
  • virt_guest_list.key.disk.[s|v]da.fstype: [необязательно, по умолчанию xfs]: Тип файловой системы для всех разделов внутри виртуального диска (например, ext4, ext3 и т.д.)
  • virt_guest_list.key.network: [обязательно]: Объявления сетей виртуального гостя
  • virt_guest_list.key.network.eth[0-9]: [обязательно]: Имя сетевого интерфейса в виртуальной машине (например, eth0, eth1 и т.д.)
  • virt_guest_list.key.network.eth[0-9].mac: [обязательно]: MAC-адрес виртуального сетевого интерфейса (например, 52:54:00:16:01:bc и т.д.)
  • virt_guest_list.key.network.eth[0-9].bridge: [обязательно]: Имя интерфейса моста, в который будет включен интерфейс vnet (например, br0, bridge1 и т.д.)
  • virt_guest_list.key.network.eth[0-9].model: [необязательно, по умолчанию virtio]: Модель виртуального сетевого интерфейса qemu (например, virtio, e1000, rtl8139 и т.д.)
  • virt_guest_list.key.network.eth0.ip: [необязательно]: Статический IP-адрес для основного сетевого интерфейса
  • virt_guest_list.key.network.eth0.netmask: [необязательно]: Маска сети для основного сетевого интерфейса
  • virt_guest_list.key.network.eth0.gateway: [необязательно]: IP-адрес шлюза для основного сетевого интерфейса
  • virt_guest_list.key.network.eth0.dns: [необязательно]: Основной DNS-сервер. Эта опция поддерживает только один DNS-сервер.
  • virt_guest_list.key.vnc_enable: [необязательно, по умолчанию false]: Включить VNC-сервер на стороне qemu-kvm для доступа к виртуальной машине

Зависимости

роль serverbee.qemu_kvm

Пример(ы)

Простой пример
---
- hosts: localhost 
  roles:
    - serverbee.virt_guest_manage
  vars:
    virt_guest_list:
      example-vm:
        uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
        disk:
          sda:
            vg: vg_local
            lv: lv_vm_example
            size: 10G
        network:
          eth0:
            mac: 52:54:00:16:01:bc
            bridge: br0
Пример с полными опциями
---
- hosts: localhost 
  roles:
    - serverbee.virt_guest_manage
  vars:
    virt_network_list:
      br-nat0:
        router: 192.168.2.1
        netmask: 255.255.255.0
        start: 192.168.2.2
        end: 192.168.2.254

    virt_guest_list:
      example-vm:
        autostart: false
        uuid: 7eb09567-83b8-4aab-916e-24924d6a0f89
        cpu: 2 # Ядро
        ram: 4 # GiB
        disk:
          sda:
            type: block
            format: raw
            vg: vg_local
            lv: lv_vm_example-first
            size: 20%VG
            fstype: ext4
          vdb:
            type: file
            format: qcow2
            format_options: preallocation=metadata
            name: example-second-drive
            size: 5G
          sdc:
            device: /dev/nvme0n1
        network:
          eth0:
            mac: 52:54:00:16:01:bc
            bridge: br0
            model: virtio
            ip: 172.16.2.2
            netmask: 255.255.255.248
            gateway: 172.16.2.1
            dns: 172.16.2.1
          eth1:
            mac: 52:54:00:16:02:ba
            network: br-nat0
            model: e1000
        vnc_enable: true

Что еще?

Проверка процесса установки ВМ

Первое, что вы можете сделать - это проверить, отвечает ли ваша ВМ на ping-запросы. Если она не отвечает, вы можете использовать инструмент командной строки virsh, чтобы увидеть список всех ваших ВМ и проверить прогресс каждой установки. Команда virsh устанавливается автоматически как зависимость для этой роли. Вы можете смотреть с помощью опции console:

$ virsh list --all
$ virsh console example-vm
Таймаут для завершения установки

Существует переменная с именем virt_guest_kickstart_installation_timeout, по умолчанию установленная на 480 секунд. Если у вас возникают проблемы с выключением вашей ВМ до завершения установки, вам нужно увеличить таймаут. Также лучше установить ближайшее зеркало хотя бы в той же стране, где находится ваш провайдер хостинга, чтобы увеличить скорость загрузки. Вы можете сделать это, изменив переменные virt_guest_mirror и virt_guest_os_location.

Дополнительные переменные для управления только одной ВМ

Эта опция может быть очень полезной, если у вас много виртуальных машин, но хотите управлять только одной из них. Это позволит быстрее запускать плейбук Ansible и не применять изменения к другим виртуальным машинам. Для этого вам нужно установить дополнительную переменную с именем vm при применении вашего плейбука:

$ ansible-playbook virt-guest-manage.yml --extra-vars vm=example-vm

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

Повторная установка ВМ

Если вы играли с чем-то ранее и хотите повторно запустить установку, сначала вам нужно вручную удалить все существующие части:

$ virsh list --all
$ virsh destroy example-vm
$ virsh undefine example-vm
$ lvremove vg_local/lv_vm_example

Эта роль не поддерживает автоматическую переустановку ВМ, чтобы предотвратить удаление существующих и необходимых данных.

Лицензия

Лицензия GPLv3

Информация об авторе

Виталий Яковенко

О проекте

Role to install and manage KVM VMs.

Установить
ansible-galaxy install serverbee/ansible-role-virt-guest-manage
Лицензия
Unknown
Загрузки
67
Владелец