Ve výchozím nastavení používá Vagrant jako poskytovatele Oracle VirtualBox. Pokud je ve vašem systému nainstalováno více než jeden poskytovatel (např. Virtualbox a Libvirt), vždy se spustí virtuální počítač s Virtualboxem, pokud výslovně neposkytnete konkrétního poskytovatele. V tomto krátkém průvodci se podíváme, jak používat Vagrant s poskytovatelem Libvirt KVM na Linuxu.
Vagrant není samostatným poskytovatelem virtualizace. Při vytváření a spouštění virtuálních strojů se spoléhá na další poskytovatele virtualizace, jako je Virtualbox, Libvirt/KVM, Docker, VMWare.
Jednou ze skvělých vlastností Vagrant je, že uživatelé nejsou nikdy vázáni na konkrétní virtualizační platformu. Uživatelé mohou vytvářet pracovní postupy, které spolupracují s více poskytovateli virtualizace.
V současné době Vagrant podporuje více než 30 poskytovatelů. Úplný seznam podporovaných poskytovatelů si můžete prohlédnout zde .
1. Nainstalujte KVM na Linux
Nejprve musíte nainstalovat KVM na váš systém Linux. Již jsme zdokumentovali kroky instalace KVM pro systémy založené na DEB a systémy založené na RPM. Jednoduše postupujte podle odkazů a nainstalujte KVM do vaší preferované distribuce Linuxu.
- Nainstalujte a nakonfigurujte KVM na serveru CentOS 8
- Instalace a konfigurace KVM v Ubuntu 20.04 Headless Server
- Nainstalujte a nakonfigurujte KVM v OpenSUSE Tumbleweed
2. Nainstalujte plugin vagrant-libvirt v Linuxu
Chcete-li spustit virtuální počítače Vagrant na KVM, musíte nainstalovat vagrant-libvirt
zapojit. Tento plugin přidává poskytovatele Libvirt do Vagrantu a umožňuje Vagrantu ovládat a zajišťovat stroje přes Libvirt.
Nainstalujte potřebné závislosti pro vagrant-libvirt
plugin.
Na Ubuntu:
$ sudo apt install qemu libvirt-daemon-system libvirt-clients libxslt-dev libxml2-dev libvirt-dev zlib1g-dev ruby-dev ruby-libvirt ebtables dnsmasq-base
Na CentOS, Fedora:
$ sudo dnf install gcc libvirt libvirt-devel libxml2-devel make ruby-devel
Nyní nainstalujte vagrant-libvirt
plugin pomocí příkazu:
$ vagrant plugin install vagrant-libvirt
Je také potřeba nainstalovat vagrant-mutate
plugin, který převádí vagrant boxy pro práci s různými poskytovateli.
$ vagrant plugin install vagrant-mutate
3. Použijte Vagrant s poskytovatelem Libvirt KVM
3.1. Ujistěte se, že box Vagrant, který chcete použít, podporuje poskytovatele libvirt. Chcete-li objevit vagrant boxy podporované libvirt, stačí vybrat "libvirt" možnost v úložišti Vagrant Cloud.

Pro účely této příručky budu používat CentOS 7 box.
3.2. Přejděte do adresáře projektu Vagrant a inicializujte prostředí Vagrant:
$ vagrant init centos/7
3.3. Dále spusťte následující příkaz pro spuštění virtuálního počítače:
$ vagrant up --provider=libvirt
Zde --provider=libvirt
volba výslovně říká Vagrantovi, aby ke spuštění virtuálního stroje použil libvirt KVM. Význam - KVM zde funguje jako výchozí poskytovatel.
Ukázkový výstup:
Bringing machine 'default' up with 'libvirt' provider... ==> default: Box 'centos/7' could not be found. Attempting to find and install... default: Box Provider: libvirt default: Box Version: >= 0 ==> default: Loading metadata for box 'centos/7' default: URL: https://vagrantcloud.com/centos/7 ==> default: Adding box 'centos/7' (v2004.01) for provider: libvirt default: Downloading: https://vagrantcloud.com/centos/boxes/7/versions/2004.01/providers/libvirt.box Download redirected to host: cloud.centos.org default: Calculating and comparing box checksum... ==> default: Successfully added box 'centos/7' (v2004.01) for 'libvirt'! ==> default: Uploading base box image as volume into Libvirt storage... ==> default: Creating image (snapshot of base box volume). ==> default: Creating domain with the following settings... ==> default: -- Name: myvagrants_default ==> default: -- Domain type: kvm ==> default: -- Cpus: 1 ==> default: -- Feature: acpi ==> default: -- Feature: apic ==> default: -- Feature: pae ==> default: -- Memory: 512M ==> default: -- Management MAC: ==> default: -- Loader: ==> default: -- Nvram: ==> default: -- Base box: centos/7 ==> default: -- Storage pool: default ==> default: -- Image: /var/lib/libvirt/images/myvagrants_default.img (41G) ==> default: -- Volume Cache: default ==> default: -- Kernel: ==> default: -- Initrd: ==> default: -- Graphics Type: vnc ==> default: -- Graphics Port: -1 ==> default: -- Graphics IP: 127.0.0.1 ==> default: -- Graphics Password: Not defined ==> default: -- Video Type: cirrus ==> default: -- Video VRAM: 9216 ==> default: -- Sound Type: ==> default: -- Keymap: en-us ==> default: -- TPM Path: ==> default: -- INPUT: type=mouse, bus=ps2 ==> default: Creating shared folders metadata... ==> default: Starting domain. ==> default: Waiting for domain to get an IP address... ==> default: Waiting for SSH to become available... default: default: Vagrant insecure key detected. Vagrant will automatically replace default: this with a newly generated keypair for better security. default: default: Inserting generated public key within guest... default: Removing insecure key from the guest if it's present... default: Key inserted! Disconnecting and reconnecting using new SSH key... ==> default: Rsyncing folder: /home/sk/myvagrants/ => /vagrant

Jak můžete vidět na prvním řádku výše uvedeného výstupu, Vagrant používá poskytovatele „libvirt“ ke spuštění virtuálního počítače CentOS 7.
3.4. Případně můžete říci Vagrant, aby trvale používal libvirt jako výchozího poskytovatele přidáním následující proměnné prostředí.
export VAGRANT_DEFAULT_PROVIDER=libvirt
4. Ověřte, zda VM běží v Libvirt KVM
4.1. Zda virtuální počítač CentOS 7 skutečně běží, můžete ověřit u poskytovatele Libvirt KVM od Virsh rozhraní příkazového řádku.
$ virsh list
Ukázkový výstup:
Id Name State ------------------------------------ 2 myvagrants_default running

Nebo použijte vagrant status
příkaz:
$ vagrant status
4.2. Můžete to také ověřit z aplikací GUI pro správu KVM, jako je Virt-manager .

5. Odstraňování problémů
Pokud jiný box Vagrant již používá jiného poskytovatele (např. virtualbox), při pokusu o spuštění nového virtuálního počítače se zobrazí následující chybová zpráva:
$ vagrant up --provider libvirt An active machine was found with a different provider. Vagrant currently allows each machine to be brought up with only a single provider at a time. A future version will remove this limitation. Until then, please destroy the existing machine to up with a new provider. Machine name: default Active provider: virtualbox Requested provider: libvirt
Jak je uvedeno ve výše uvedeném výstupu, Vagrant může současně provozovat virtuální počítač pouze s jedním poskytovatelem. Toto omezení může být vyřešeno v budoucí verzi.
Před spuštěním dalšího virtuálního počítače s jiným poskytovatelem nejprve odstraňte stávající aktivní počítač pomocí příkazu:
$ vagrant destroy
Napište "y" a stiskněte ENTER pro smazání výchozího aktivního počítače:
default: Are you sure you want to destroy the 'default' VM? [y/N] y ==> default: Destroying VM and associated drives...
Nyní spusťte virtuální počítač s novým poskytovatelem, tj. v tomto případě KVM:
$ vagrant up --provider libvirt
6. Závěr
V této příručce jsme se naučili používat Vagrant s poskytovatelem KVM libvirt v Linuxu. Podívali jsme se také na to, jak ověřit, zda virtuální stroj běží v Libvirt KVM.