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ślnetrue
]: Włączenie roli zależności dla qemu-kvmvirt_guest_mirror
: [domyślne:http://repo.almalinux.org
]: Lustro Almalinux, które będzie używane do instalacji OSvirt_guest_os_location
: [domyślne:{{ virt_guest_mirror }}/almalinux/9/BaseOS/x86_64/os
]: Ścieżka, gdzie przechowywane są komponenty Almalinux osvirt_guest_kickstart_config_dir
: [domyślne:/tmp/kickstart
]: Ścieżka, gdzie będą tworzone pliki kickstartvirt_guest_kickstart_config_port
: [domyślne:8000
]: Port do pobierania konfiguracji kickstart podczas instalacjivirt_guest_kickstart_config_url
: [domyślne:ip hypervizora
]: URL do pobierania konfiguracji kickstart podczas instalacjivirt_guest_kickstart_config_serve_timeout
: [domyślne:90
]: Czas w sekundach na serwowanie plików kickstartvirt_guest_kickstart_installation_timeout
: [domyślne:480
]: Czas w sekundach na zakończenie instalacji kickstartvirt_guest_init_passwd
: [wymagane]: Hasło użytkownika root, które będziesz używać przy pierwszym logowaniuvirt_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 wirtualnejvirt_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 wirtualnychvirt_guest_list.key
: [wymagana]: Nazwa maszyny wirtualnej (np.example-vm:
)virt_guest_list.key.autostart
: [opcjonalne, domyślnetrue
]: Włączenie automatycznego uruchamiania maszyny wirtualnejvirt_guest_list.key.uuid
: [wymagana]: Uniwersalny identyfikator maszyny wirtualnej (np.ad852ffe-07d9-43ec-9f5a-ced644f9a7a5
)virt_guest_list.key.cpu
: [opcjonalne, domyślne1
]: Ustawienie limitów rdzeni CPUvirt_guest_list.key.ram
: [opcjonalne, domyślne2
]: Ustawienie limitów RAM. Ta wartość ustawiana jest w GiBvirt_guest_list.key.disk
: [wymagana]: Deklaracje dysków gościa wirtualnegovirt_guest_list.key.disk.[s|v]d[a-z]
: [wymagana]: Nazwa wirtualnego dysku w maszynie wirtualnej (np.sda
,sdb
,sdc
, itd. lubvda
,vdb
,vdc
, itd.)virt_guest_list.key.disk.[s|v]d[a-z].type
: [opcjonalne, domyślneblock
]: 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 qemuvirt_guest_list.key.disk.[s|v]d[a-z].format
: [opcjonalne, domyślneraw
]: Typ formatu dysku qemu (np.raw
,qcow2
)virt_guest_list.key.disk.[s|v]d[a-z].format_options
: [opcjonalne, domyślnepreallocation=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 LVMvirt_guest_list.key.disk.[s|v]d[a-z].lv
: [wymagana tylko dla.type: block
]: Nazwa logicznego wolumenu LVMvirt_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że20%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ślnexfs
]: 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 wirtualnegovirt_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ślnevirtio
]: 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 sieciowegovirt_guest_list.key.network.eth0.netmask
: [opcjonalne]: Maska sieciowa dla głównego interfejsu sieciowegovirt_guest_list.key.network.eth0.gateway
: [opcjonalne]: Adres IP bramy dla głównego interfejsu sieciowegovirt_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ślnefalse
]: 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
ansible-galaxy install serverbee.virt_guest_manage