Dat het een groot aantal technologieën ondersteunt, betekent niet dat je ze allemaal moet kennen. Je kunt je concentreren op één technologie zoals KVM en daar je libvirt-ervaring omheen bouwen. Dit artikel zal proberen een uitgebreide kritiek op de technologie te geven vanuit de persoonlijke ervaring van de auteur ermee.
Achtergrond
Om onder de knie te krijgen waar Libvirt toe in staat is en hoe je het op je eigen systeem kunt gebruiken, kun je de volgende handleidingen volgen:
- Installeer KVM en Libvirt op Debian
- Libvirt met Python
Als je al bekend bent met tools zoals virsh, virt-install, virt-manager, oVirt, etc, dan gebruik je libvirt al zonder het te weten. De bovengenoemde tools gebruiken libvirt in de backend en bieden een gebruiksvriendelijke interface, of het nu een opdrachtregel of GUI is.
architectuur
Libvirt is ontworpen om met elke hypervisor te werken en is in de loop der jaren gegroeid om met een breed scala aan hypervisors te werken. De libvirt-daemon onthult een API die kan worden gebruikt door apps zoals virt-manager of virsh (en zelfs je aangepaste Python-scripts). De gebruikersverzoeken worden ontvangen door de API. Deze verzoeken kunnen van alles zijn, zoals het maken van een KVM-gast, of me het geheugen laten zien dat wordt gebruikt door een bepaalde LX-contianer, enz.
De libvirt-daemon delegeert vervolgens het verzoek aan het juiste libvirt-hypervisorstuurprogramma. Deze driver begrijpt en implementeert alle specifieke kenmerken van een bepaalde virtualisatietechnologie en voert de instructies dienovereenkomstig uit.
Er is een andere klasse stuurprogramma's voor het omgaan met opslag en zelfs netwerken van VM's.
Pools en volumes
VM's hebben veel opslagruimte nodig. De opslagtechnologie zelf is zeer variabel van hypervisor tot hypervisor. VMWare gebruikt zijn eigen vmdk-formaat, QEMU gebruikt graag qcow2, er zijn ook onbewerkte schijfafbeeldingen en LXC-afbeeldingen zijn ook een ander verhaal. Bovendien wilt u alle VM-schijfimages groeperen en ze voorzien van een ander opslagmedium zoals een NFS-server, een ZFS-dataset of gewoon een directory. Dit stelt je in staat om libvirt te gebruiken voor een groot aantal verschillende use-cases, van een enkele thuisserver tot een schaalbare virtualisatie-oplossing op ondernemingsniveau.
In libvirt-taal staat een enkel virtueel opslagapparaat dat is gekoppeld aan een VM, zoals het qcow2, raw of vmdk-imagebestand van een VM of koppelbare ISO, bekend als een volume. Het opslagmedium dat op de host wordt gebruikt om een groep geassocieerde volumes op te slaan, staat bekend als a zwembad. U kunt een NFS-server als pool of een ZFS-dataset gebruiken, zoals eerder vermeld. Als je geen mooie opslagoplossing hebt, kun je gewoon een map gebruiken.
Standaard heeft libvirt twee verschillende pools. De eerste is /var/lib/libvirt/images en /var/lib/libvirt/boot. Volumes voor een enkele VM kunnen over meerdere pools worden verdeeld. Ik sla bijvoorbeeld alle schone cloud-images en OS-installatieprogramma-ISO's op in de /var/lib/libvirt/boot-pool en voor individuele VM's wordt rootfs geïnstalleerd in afbeeldingsbestanden die zijn opgeslagen in /var/lib/libvirt/images.
U kunt zelfs een enkele pool hebben voor een enkele VM, of u kunt de pools verder opsplitsen voor VM-snapshots, back-ups, enz. Het is allemaal erg flexibel en stelt u in staat om uw gegevens te organiseren zoals het u uitkomt.
Configuraties
Virsh is een populaire tool om alles van je VM, virtuele machinenetwerken en zelfs opslag te configureren. De configuratiebestanden zelf leven in het XML-formaat. Je zult merken dat je opdrachten geeft als:
$ virsh dumpxml VM1$ virsh bewerk VM1
En op dezelfde manier zijn er subopdrachten zoals net-dumpxml en pool-edit om de configuratie van pools, netwerken, enz. te bekijken of te configureren. Als u nieuwsgierig bent naar waar deze configuratiebestanden zich bevinden, kunt u naar /etc/libvirt/ gaan en de betreffende hypervisors directory vinden. De bovenliggende map /etc/libvirt/ zelf bevat veel globale configuraties zoals stuurprogramma's (e.g qemu.conf en lxc.conf ) en hun configuratie en het standaardgedrag van libvirt.
Om de specifieke configuratie van individuele componenten zoals de VM's, pools en volumes te bekijken, moet je naar de overeenkomstige mappen gaan. Voor qemu-gasten is dit /etc/libvirt/qemu
root@deb:/etc/libvirt/qemu# ls -altotaal 24
drwxr-xr-x 4 wortel wortel 4096 21 april 10:39 .
drwxr-xr-x 6 wortel wortel 4096 28 april 17:19…
drwxr-xr-x 2 root root 4096 21 april 10:39 autostart
drwxr-xr-x 3 root root 4096 14 april 13:49 netwerken
-rw------- 1 wortel wortel 3527 20 april 19:10 VM1.xml
-rw------- 1 wortel wortel 3527 20 april 19:09 VM2.xml
De autostart-map bevat symlinks naar VM1.xml en VM2.xml als je de VM's hebt geconfigureerd om automatisch te starten wanneer het hostsysteem opstart ($ virsh autostart VM1).
Op dezelfde manier bevat /etc/libvirt/qemu/network een configuratie voor het standaard netwerk een qemu gast. De /etc/libvirt/storage bevat XML's die de opslagpools definiëren.
Conclusie
Als je geïnteresseerd bent in het opzetten van je eigen virtualisatiehost, is dit artikel een goede plek om te beginnen, waar ik laat zien hoe je QEMU-KVM-gasten op een Debian-host installeert met behulp van libvirt en gerelateerde tools.
Daarna kun je beginnen te spelen met virsh CLI en entiteiten zoals Domain zien en beheren (libvirt noemt gast-VM's een domein) netwerken, opslagpools en volumes. Dit zal u voldoende vertrouwd maken met de technologie die u kunt gebruiken voor andere concepten zoals snapshots en netwerkfilter. Ik hoop dat dit artikel een goed startpunt voor je zal blijken te zijn.