serverbee.virt_guest_manage

Rola zarządzania gośćmi wirtualnymi

Ta rola korzysta z oficjalnego modułu Ansible virt do zarządzania maszynami wirtualnymi opartymi na RHEL z użyciem KVM jako hypervizora. Domyślnie używa forksa AlmaLinux dla RHEL. Możesz kontrolować wszystkie swoje maszyny wirtualne bezpośrednio przez ustawienia w group_vars lub host_vars. Główną cechą tej roli jest równoległa instalacja wszystkich maszyn wirtualnych, które są ustawione w virt_guest_list.

Aby zacząć

Obsługiwane wersje dystrybucji na poziomie maszyny wirtualnej
  • CentOS el6 (nie testowane z najnowszymi wersjami ról)
  • CentOS el7
  • AlmaLinux el8
  • AlmaLinux el9
Zaktualizuj domyślne wartości zgodnie z potrzebami

Na początku musisz zaktualizować virt_guest_init_passwd, ustawiając niestandardowe hasło. Drugą rzeczą jest znalezienie i ustawienie najbliższego lusterka do pobierania komponentów instalatora opartego na RHEL.

Poza zakresem tej roli

Ta rola może zarządzać wirtualnymi dyskami opartymi na LVM dla VMs, ale musisz wcześniej stworzyć wolumen fizyczny (PVS) i grupę wolumenów (VGS). Istnieją również dwie różne opcje dla wirtualnych interfejsów sieciowych maszyn wirtualnych. Pierwszym sposobem jest użycie istniejącego i już skonfigurowanego mostu Linux, a drugim jest użycie sieci libvirt. Tak czy inaczej, ostatnia opcja może być zarządzana przez virt_network_list bezpośrednio z tej roli.

Zmienne

Ogólne
  • virt_guest_dependency_qemu_kvm_role: [opcjonalne, domyślne true]: Włączenie roli zależności dla qemu-kvm
  • virt_guest_mirror: [domyślne: http://repo.almalinux.org]: Lustro Almalinux, które będzie używane do instalacji OS
  • virt_guest_os_location: [domyślne: {{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os]: Ścieżka, gdzie przechowywane są komponenty Almalinux os
  • virt_guest_kickstart_config_dir: [domyślne: /tmp/kickstart]: Ścieżka, gdzie będą tworzone pliki kickstart
  • virt_guest_kickstart_config_port: [domyślne: 8000]: Port do pobierania konfiguracji kickstart podczas instalacji
  • virt_guest_kickstart_config_url: [domyślne: ip hypervizora]: URL do pobierania konfiguracji kickstart podczas instalacji
  • virt_guest_kickstart_config_serve_timeout: [domyślne: 90]: Czas w sekundach na serwowanie plików kickstart
  • virt_guest_kickstart_installation_timeout: [domyślne: 480]: Czas w sekundach na zakończenie instalacji kickstart
  • virt_guest_init_passwd: [wymagane]: Hasło użytkownika root, które będziesz używać przy pierwszym logowaniu
  • virt_guest_init_hostname: [domyślne: fresh-installed.local]: Pierwsza nazwa hosta na poziomie systemu operacyjnego maszyny wirtualnej
Lista sieci wirtualnych i jej ustawienia
  • virt_network_list: [wymagana, domyślne: {}]: Deklaracje sieci wirtualnej
  • virt_network_list.key: [wymagana]: Nazwa wirtualnej sieci (np. br-nat0:)
  • virt_network_list.key.router: [wymagana]: Adres IP wirtualnego routera (np. 192.168.2.1)
  • virt_network_list.key.netmask: [wymagana]: Maska sieciowa wirtualnej sieci (np. 255.255.255.0)
  • virt_network_list.key.start: [wymagana]: Pierwszy adres IP w zakresie wirtualnej sieci (np. 192.168.2.1)
  • virt_network_list.key.end: [wymagana]: Ostatni adres IP w zakresie wirtualnej sieci (np. 192.168.2.254)
Lista gości wirtualnych i jej ustawienia
  • virt_guest_list: [wymagana, domyślna: {}]: Deklaracje gości wirtualnych
  • virt_guest_list.key: [wymagana]: Nazwa maszyny wirtualnej (np. example-vm:)
  • virt_guest_list.key.autostart: [opcjonalne, domyślne true]: Włączenie automatycznego uruchamiania maszyny wirtualnej
  • virt_guest_list.key.uuid: [wymagana]: Uniwersalny identyfikator maszyny wirtualnej (np. ad852ffe-07d9-43ec-9f5a-ced644f9a7a5)
  • virt_guest_list.key.cpu: [opcjonalne, domyślne 1]: Ustawienie limitów rdzeni CPU
  • virt_guest_list.key.ram: [opcjonalne, domyślne 2]: Ustawienie limitów RAM. Ta wartość ustawiana jest w GiB
  • virt_guest_list.key.disk: [wymagana]: Deklaracje dysków gościa wirtualnego
  • virt_guest_list.key.disk.[s|v]d[a-z]: [wymagana]: Nazwa wirtualnego dysku w maszynie wirtualnej (np. sda, sdb, sdc, itd. lub vda, vdb, vdc, itd.)
  • virt_guest_list.key.disk.[s|v]d[a-z].type: [opcjonalne, domyślne block]: Typ wirtualnego dysku (np. block, file)
  • virt_guest_list.key.disk.[s|v]d[a-z].name: [wymagana tylko dla .type: file]: Nazwa pliku wirtualnego dysku qemu
  • virt_guest_list.key.disk.[s|v]d[a-z].format: [opcjonalne, domyślne raw]: Typ formatu dysku qemu (np. raw, qcow2)
  • virt_guest_list.key.disk.[s|v]d[a-z].format_options: [opcjonalne, domyślne preallocation=off]: Opcje formatu dysku qemu (np. preallocation=metadata)
  • virt_guest_list.key.disk.[s|v]d[a-z].vg: [wymagana tylko dla .type: block]: Nazwa grupy wolumenów LVM
  • virt_guest_list.key.disk.[s|v]d[a-z].lv: [wymagana tylko dla .type: block]: Nazwa logicznego wolumenu LVM
  • virt_guest_list.key.disk.[s|v]d[a-z].size: [wymagana, z wyjątkiem użycia dysków fizycznych]: Rozmiar wirtualnego dysku (np. 2048M, 10G, 1T, także 20%VG lub równoważne mogą być używane dla dysków opartych na LVM)
  • virt_guest_list.key.disk.[s|v]d[a-z].device: [wymagana tylko dla dysków fizycznych]: Pełna ścieżka do fizycznego dysku na hypervisorze (np. /dev/sdb, /dev/nvme0n1, itd.)
  • virt_guest_list.key.disk.[s|v]da.fstype: [opcjonalne, domyślne xfs]: Typ systemu plików dla wszystkich partycji wewnątrz wirtualnego dysku (np. ext4, ext3, itd.)
  • virt_guest_list.key.network: [wymagana]: Deklaracje sieci gościa wirtualnego
  • virt_guest_list.key.network.eth[0-9]: [wymagana]: Nazwa interfejsu sieciowego w maszynie wirtualnej (np. eth0, eth1, itd.)
  • virt_guest_list.key.network.eth[0-9].mac: [wymagana]: Adres MAC wirtualnego interfejsu sieciowego (np. 52:54:00:16:01:bc, itd.)
  • virt_guest_list.key.network.eth[0-9].bridge: [wymagana]: Nazwa interfejsu mostu, w którym znajdzie się interfejs vnet (np. br0, bridge1, itd.)
  • virt_guest_list.key.network.eth[0-9].model: [opcjonalne, domyślne virtio]: Model qemu wirtualnego interfejsu sieciowego (np. virtio, e1000, rtl8139 itd.)
  • virt_guest_list.key.network.eth0.ip: [opcjonalne]: Statyczny adres IP dla głównego interfejsu sieciowego
  • virt_guest_list.key.network.eth0.netmask: [opcjonalne]: Maska sieciowa dla głównego interfejsu sieciowego
  • virt_guest_list.key.network.eth0.gateway: [opcjonalne]: Adres IP bramy dla głównego interfejsu sieciowego
  • virt_guest_list.key.network.eth0.dns: [opcjonalne]: Główny serwer DNS. Ta opcja wspiera tylko jeden serwer DNS.
  • virt_guest_list.key.vnc_enable: [opcjonalne, domyślne false]: Włączenie serwera VNC po stronie qemu-kvm, aby uzyskać dostęp do maszyny wirtualnej

Zależności

Rola serverbee.qemu_kvm

Przykład(e)

Prosty przykład
---
- 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
Przykład z pełnymi opcjami
---
- 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 # Rdzenie
        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

Co jeszcze?

Sprawdzanie postępu instalacji VM

Na początku możesz sprawdzić, czy twoja VM odpowiada na prośby ping. Jeśli nie odpowiada, możesz użyć narzędzia CLI virsh, aby zobaczyć listę wszystkich swoich VMs i sprawdzić postęp instalacji każdej z nich. Komenda virsh instaluje się automatycznie jako zależność tej roli. Możesz obserwować używając opcji console:

$ virsh list --all
$ virsh console example-vm
Limit czasu na zakończenie instalacji

Istnieje zmienna o nazwie virt_guest_kickstart_installation_timeout, która domyślnie ustawiona jest na 480 sekund. Jeśli masz jakiekolwiek problemy z wyłączeniem VM przed zakończeniem instalacji, musisz zwiększyć limit czasu. Lepiej jest również ustawić najbliższe lustro przynajmniej w tym samym kraju, co twój dostawca hostingu, aby zwiększyć prędkość pobierania. Możesz to zrobić, zmieniając zmienne virt_guest_mirror i virt_guest_os_location.

Dodatkowe zmienne do zarządzania tylko jedną VM

Ta opcja może być bardzo przydatna, jeśli masz wiele maszyn wirtualnych, ale chcesz zarządzać tylko jedną z nich. To przyspieszy uruchamianie playbooka Ansible i zapobiegnie stosowaniu niektórych rzeczy do innych maszyn wirtualnych. Aby to zrobić, musisz ustawić zmienną dodatkową o nazwie vm, gdy zastosujesz swój playbook:

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

Obsługuje tylko jedną nazwę wirtualnej maszyny w jednym czasie.

Ponowne uruchomienie instalacji VM

Jeśli bawiłeś się czymś wcześniej i chcesz ponownie uruchomić instalację, najpierw musisz ręcznie usunąć wszystkie istniejące elementy:

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

Ta rola nie wspiera automatycznego ponownego instalowania VM, aby zapobiec usunięciu istniejących i potrzebnych danych.

Licencja

Licencja GPLv3

Informacje o autorze

Vitaly Yakovenko

O projekcie

Role to install and manage KVM VMs.

Zainstaluj
ansible-galaxy install serverbee.virt_guest_manage
Licencja
Unknown
Pobrania
76
Właściciel