Werken met virtuele KVM-machines. Invoering

KVM of Kernel Virtual Module is een virtualisatiemodule voor de Linux-kernel waarmee u van uw computer een hypervisor kunt maken voor het beheer van virtuele machines. Deze module werkt op kernelniveau en ondersteunt hardwareversnellingstechnologieën zoals Intel VT en AMD SVM.

KVM-software virtualiseert zelf niets in de gebruikersruimte. In plaats daarvan gebruikt het het bestand /dev/kvm om virtuele adresruimten voor de gast in de kernel te configureren. Elke gastmachine heeft zijn eigen videokaart, netwerk- en geluidskaart, harde schijf en andere apparatuur.

Ook heeft het gastsysteem geen toegang tot componenten van het echte besturingssysteem. De virtuele machine draait in een volledig geïsoleerde ruimte. U kunt kvm zowel op een GUI-systeem als op servers gebruiken. In dit artikel zullen we bekijken hoe u kvm Ubuntu 16.04 installeert

Voordat u doorgaat met de KVM-installatie zelf, moet u controleren of uw processor van Intel-VT of AMD-V ondersteunt. Om dit te doen, voert u de volgende opdracht uit:

egrep -c "(vmx|svm)" /proc/cpuinfo

Als het resultaat 0 retourneert, ondersteunt uw processor geen hardwarevirtualisatie. Als er 1 of meer zijn, kunt u KVM op uw machine gebruiken.

Nu kunnen we doorgaan met het installeren van KVM, een reeks programma's kan rechtstreeks uit de officiële repositories worden verkregen:

sudo apt install qemu-kvm libvirt-bin bridge-utils virt-manager cpu-checker

We hebben niet alleen het kvm-hulpprogramma geïnstalleerd, maar ook de libvirt-bibliotheek, evenals de virtuele machinebeheerder. Nadat de installatie is voltooid, moet u uw gebruiker toevoegen aan de libvirtd-groep, omdat alleen root en gebruikers in deze groep virtuele KVM-machines kunnen gebruiken:

sudo gpasswd -a GEBRUIKER libvirtd

Nadat u deze opdracht hebt uitgevoerd, logt u uit en weer in. Laten we vervolgens controleren of alles correct is geïnstalleerd. Gebruik hiervoor het kvm-ok commando:

INFO: /dev/kvm bestaat
KVM-versnelling kan worden gebruikt

Als alles correct is gedaan, ziet u hetzelfde bericht.

KVM gebruiken op Ubuntu 16.04

U hebt de taak van het installeren van kvm in Ubuntu voltooid, maar u kunt deze virtualisatieomgeving nog niet gebruiken, maar deze moet nog steeds worden geconfigureerd. Vervolgens zullen we kijken hoe kvm Ubuntu is geconfigureerd. Eerst moet u uw netwerk instellen. We moeten een brug maken waarmee de virtuele machine verbinding maakt met het netwerk van de computer.

Een bridge instellen in NetworkManager

Dit kan op verschillende manieren, u kunt bijvoorbeeld het netwerkconfiguratieprogramma NetworkManager gebruiken.

Klik op het NetworkManager-pictogram in het paneel en selecteer vervolgens verbindingen wijzigen en klik vervolgens op de knop Toevoegen:

Selecteer vervolgens het verbindingstype Brug en druk op Creëren:

In het geopende venster klikt u op de knop Toevoegen, om onze bridge aan de internetverbinding te koppelen:

Selecteer in de lijst Ethernet en druk op Creëren:

In het volgende venster selecteert u in het veld apparaat, netwerkinterface waaraan onze bridge moet worden gekoppeld:

Nu ziet u uw bridge in de lijst met netwerkverbindingen. Het enige dat overblijft is het netwerk opnieuw opstarten om de wijzigingen volledig toe te passen, om deze run uit te voeren:

Handmatige brugconfiguratie

Eerst moet u de set hulpprogramma's van bridge-utils installeren, als u dat nog niet heeft gedaan:

sudo apt install bridge-utils

Vervolgens kunnen we met behulp van het brctl-programma de brug creëren die we nodig hebben. Gebruik hiervoor de volgende opdrachten:

sudo brctl addbr bridge0
$ sudo ip-adr show
$ sudo addif bridge0 eth0

Het eerste commando voegt het bridge-apparaat br0 toe, met het tweede moet je bepalen welke netwerkinterface de hoofdverbinding met het externe netwerk is, in mijn geval is dit eth0. En met het laatste commando verbinden we bridge br0 met eth0.

Nu moet je een paar regels toevoegen aan de netwerkinstellingen, zodat alles automatisch opstart nadat het systeem is opgestart. Om dit te doen, opent u het bestand /etc/network/interfaces en voegt u daar de volgende regels toe:

sudo gedit /etc/network/interfaces

terugloop
auto lo bridge0
iface lo inet loopback
iface bridge0 inet dhcp
bridge_ports eth0

Wanneer de instellingen zijn toegevoegd, start u het netwerk opnieuw op:

sudo systemctl herstart netwerken

Nu is de installatie en configuratie van KVM volledig voltooid en kunt u uw eerste virtuele machine maken. Hierna kunt u de beschikbare bruggen bekijken met behulp van het commando:

Virtuele KVM-machines maken

De Ubuntu KVM-installatie is voltooid en we kunnen nu doorgaan met het gebruik ervan. Laten we eerst eens kijken naar de lijst met bestaande virtuele machines:

virsh -c qemu:///systeemlijst

Het is leeg. U kunt een virtuele machine maken via de terminal of in de grafische interface. Om via de terminal een creatie te maken, gebruik je het virt-install commando. Laten we eerst naar de libvirt-map gaan:

cd /var/lib/libvirt/boot/

Om CentOS te installeren ziet het commando er als volgt uit:

sudo virt-install\
--virt-type=kvm \
--naam centos7\
--ram 2048\
--vcpus=2 \
--os-variant=rhel7 \
--hvm\
--cdrom=/var/lib/libvirt/boot/CentOS-7-x86_64-DVD-1511.iso \
--netwerk=bridge=br0,model=virtio \
--grafische vnc\
--schijfpad=/var/lib/libvirt/images/centos7.qcow2,size=40,bus=virtio,format=qcow2

Laten we eens nader bekijken wat de parameters van deze opdracht betekenen:

  • virt-type- type virtualisatie, in ons geval kvm;
  • naam- naam van de nieuwe auto;
  • ram- hoeveelheid geheugen in megabytes;
  • vcpu's- aantal processorkernen;
  • os-variant- type besturingssysteem;
  • cd-rom- installatieimage van het systeem;
  • netwerk-brug- de netwerkbrug die we eerder hebben geconfigureerd;
  • afbeeldingen- een manier om toegang te krijgen tot de grafische interface;
  • schijfpad- adres van de nieuwe harde schijf voor deze virtuele machine;

Nadat de installatie van de virtuele machine is voltooid, kunt u de VNC-verbindingsparameters achterhalen met behulp van de opdracht:

sudo virsh vncdisplay centos7

Nu kunt u de ontvangen gegevens in uw VNC-client invoeren en zelfs op afstand verbinding maken met de virtuele machine. Voor Debian zal het commando iets anders zijn, maar alles ziet er hetzelfde uit:

Ga naar de map voor afbeeldingen:

cd /var/lib/libvirt/boot/

Indien nodig kunt u de installatie-image downloaden van internet:

sudo wget https://mirrors.kernel.org/debian-cd/current/amd64/iso-dvd/debian-8.5.0-amd64-DVD-1.iso

Laten we vervolgens een virtuele machine maken:

sudo virt-install\
--virt-type=kvm \
--naam=debina8 \
--ram=2048\
--vcpus=2 \
--os-variant=debian8 \
--hvm\
--cdrom=/var/lib/libvirt/boot/debian-8.5.0-amd64-DVD-1.iso \
--netwerk=bridge=bridge0,model=virtio \
--grafische vnc\
--schijfpad=/var/lib/libvirt/images/debian8.qcow2,size=40,bus=virtio,format=qcow2

Laten we nu opnieuw naar de lijst met beschikbare machines kijken:

virsh -c qemu:///systeemlijst

Om de virtuele machine te starten, kunt u het commando gebruiken:

sudo virsh start machinenaam

Stoppen:

sudo virsh shutdown machinenaam

Om naar de slaapmodus te schakelen:

sudo virsh schort machinenaam op

Opnieuw opstarten:

sudo virsh reboot machinenaam

sudo virsh reset machinenaam

Een virtuele machine volledig verwijderen:

sudo virsh vernietig machinenaam

Virtuele machines maken in GUI\

Als u toegang heeft tot een grafische interface, hoeft u geen terminal te gebruiken; u kunt de volledige grafische interface van Virtual Manager Virtual Machine Manager gebruiken. Het programma kan worden gestart vanuit het hoofdmenu:

Om een ​​nieuwe machine aan te maken, klikt u op het pictogram met het monitorpictogram. Vervolgens moet u de ISO-image van uw systeem selecteren. U kunt ook een echt cd/dvd-station gebruiken:

Selecteer op het volgende scherm de hoeveelheid geheugen die beschikbaar zal zijn voor de virtuele machine, evenals het aantal processorkernen:

Op dit scherm moet u de grootte selecteren van de harde schijf die beschikbaar zal zijn in uw machine:

Bij de laatste stap van de wizard moet u controleren of de machine-instellingen correct zijn en ook de naam invoeren. U moet ook de netwerkbrug opgeven waarmee de machine verbinding met het netwerk maakt:

Hierna is de machine klaar voor gebruik en verschijnt in de lijst. U kunt het starten via de groene driehoek op de managerwerkbalk.

Conclusies

In dit artikel hebben we gekeken hoe we KVM Ubuntu 16.04 kunnen installeren, hoe we deze omgeving volledig kunnen voorbereiden op het werk, en hoe we virtuele machines kunnen maken en gebruiken. Als je vragen hebt, stel ze dan in de reacties!

Ter afsluiting een lezing van Yandex over wat virtualisatie is in Linux:

Persoonlijk is het voor mij het gemakkelijkst om KVM (Kernel-gebaseerde virtuele machine) te beschouwen als een abstractieniveau boven Intel VT-x- en AMD-V-hardwarevirtualisatietechnologieën. We nemen een machine met een processor die een van deze technologieën ondersteunt, installeren Linux op deze machine, installeren KVM in Linux en als resultaat krijgen we de mogelijkheid om virtuele machines te creëren. Dit is ongeveer hoe cloudhosting werkt, bijvoorbeeld Amazon Web Services. Samen met KVM wordt soms ook Xen gebruikt, maar een bespreking van deze technologie valt buiten het bestek van dit bericht. In tegenstelling toteën, bijvoorbeeld Docker, kunt u met KVM elk besturingssysteem als gastsysteem uitvoeren, maar het heeft ook O Hogere overhead voor virtualisatie.

Opmerking: De hieronder beschreven stappen zijn door mij getest op Ubuntu Linux 14.04, maar in theorie zullen ze grotendeels geldig zijn voor zowel andere versies van Ubuntu als andere Linux-distributies. Alles zou zowel op de desktop als op de server moeten werken, toegankelijk via SSH.

KVM installeren

We controleren of Intel VT-x of AMD-V wordt ondersteund door onze processor:

grep -E "(vmx|svm)" /proc/cpuinfo

Als iets heet wordt, betekent dit dat het wordt ondersteund en dat je verder kunt.

KVM installeren:

sudo apt-get-update
sudo apt-get install qemu-kvm libvirt-bin virtinst bridge-utils

Wat wordt meestal opgeslagen waar:

  • /var/lib/libvirt/boot/ - ISO-images voor het installeren van gastsystemen;
  • /var/lib/libvirt/images/ — afbeeldingen van harde schijven van gastsystemen;
  • /var/log/libvirt/ - hier zou je naar alle logs moeten zoeken;
  • /etc/libvirt/ - map met configuratiebestanden;

Nu KVM is geïnstalleerd, gaan we onze eerste virtuele machine maken.

Het creëren van de eerste virtuele machine

Ik heb FreeBSD als gastsysteem gekozen. Download de ISO-image van het systeem:

cd /var/lib/libvirt/boot/
sudo wget http://ftp.freebsd.org/ pad/ naar/some-freebsd-disk.iso

Virtuele machines worden in de meeste gevallen beheerd met behulp van het virsh hulpprogramma:

sudo virsh --help

Voordat we de virtuele machine starten, moeten we wat aanvullende informatie verzamelen.

We kijken naar de lijst met beschikbare netwerken:

sudo virsh net-lijst

Informatie over een specifiek netwerk bekijken (standaard genoemd):

sudo virsh net-info standaard

Laten we eens kijken naar de lijst met beschikbare optimalisaties voor gastbesturingssystemen:

sudo virt-install --os-variantlijst

Dus nu maken we een virtuele machine met 1 CPU, 1 GB RAM en 32 GB schijfruimte, verbonden met het standaardnetwerk:

sudo virt-install\
--virt-type =kvm\
--naam freebsd10\
--ram 1024\
--vcpus=1\
--os-variant =freebsd8 \
--hvm\
--cdrom =/ var/ lib/ libvirt/ boot/ FreeBSD-10.2 -RELEASE-amd64-disc1.iso \
--netwerk netwerk =standaard,model =virtio \
--grafische vnc\
--schijfpad =/ var/ lib/ libvirt/ images/ freebsd10.img,size =32,bus =virtio

Je kunt zien:

WAARSCHUWING Kan geen verbinding maken met de grafische console: virt-viewer niet
geïnstalleerd. Installeer alstublieft het "virt-viewer" pakket.

Domeininstallatie wordt nog uitgevoerd. U kunt opnieuw verbinding maken met de console
om het installatieproces te voltooien.

Dit is normaal, dit is hoe het zou moeten zijn.

Bekijk vervolgens de eigenschappen van de virtuele machine in XML-formaat:

sudo virsh dumpxml freebsd10

De meest volledige informatie vindt u hier. Daartoe behoort bijvoorbeeld een MAC-adres, dat we later nodig zullen hebben. Voorlopig zoeken we informatie over VNC. In mijn geval:

Met uw favoriete client (ik gebruik persoonlijk Rammina) loggen we in via VNC, indien nodig met behulp van SSH port forwarding. We komen meteen in het FreeBSD-installatieprogramma. Dan is alles zoals gewoonlijk: Volgende, Volgende, Volgende, we krijgen het geïnstalleerde systeem.

Basiscommando's

Laten we nu kijken naar de basisopdrachten voor het werken met KVM.

Een lijst krijgen van alle virtuele machines:

sudo virsh lijst --all

Informatie verkrijgen over een specifieke virtuele machine:

sudo virsh dominfo freebsd10

Virtuele machine starten:

sudo virsh start freebsd10

Virtuele machine stoppen:

sudo virsh shutdown freebsd10

Nauwelijks de virtuele machine te pakken krijgen (ondanks de naam, this Niet verwijdering):

sudo virsh vernietig freebsd10

Start de virtuele machine opnieuw op:

sudo virsh start freebsd10 opnieuw op

Virtuele machine klonen:

sudo virt-clone -o freebsd10 -n freebsd10-clone \
--bestand /var/lib/libvirt/images/freebsd10-clone.img

Autorun in-/uitschakelen:

sudo virsh autostart freebsd10
sudo virsh autostart -- schakel freebsd10 uit

Virsh uitvoeren in dialoogmodus (alle commando's in dialoogmodus - zoals hierboven beschreven):

sudo virsh

De eigenschappen van de virtuele machine in XML bewerken, inclusief hier kunt u de limiet op de hoeveelheid geheugen wijzigen, enz.:

sudo virsh bewerk freebsd10

Belangrijk! Opmerkingen uit de bewerkte XML zijn helaas verwijderd.

Wanneer de virtuele machine wordt gestopt, kan de grootte van de schijf ook worden gewijzigd:

sudo qemu-img resize /var/ lib/ libvirt/ images/ freebsd10.img -2G
sudo qemu-img info /var/lib/libvirt/images/freebsd10.img

Belangrijk! Uw gastbesturingssysteem zal het waarschijnlijk niet leuk vinden dat de schijf plotseling groter of kleiner wordt. In het beste geval zal het opstarten in de noodmodus met een voorstel om de schijf opnieuw te partitioneren. Waarschijnlijk zou je dat niet willen doen. Het kan veel eenvoudiger zijn om een ​​nieuwe virtuele machine te maken en alle gegevens ernaar te migreren.

Back-up en herstel zijn vrij eenvoudig. Het is voldoende om de dumpxml-uitvoer ergens op te slaan, evenals de schijfkopie, en deze vervolgens te herstellen. Op YouTube heb het filmpje kunnen vinden Met een demonstratie van dit proces is alles echt niet moeilijk.

Netwerkinstellingen

Een interessante vraag: hoe bepaal je welk IP-adres de virtuele machine heeft ontvangen na het laden? KVM doet dit op een slimme manier. Uiteindelijk heb ik dit script in Python geschreven:

#!/usr/bin/env python3

# virt-ip.py-script
# (c) 2016 Aleksander Alekseev
# http://site/

importsysteem
import re
importeer os
subproces importeren
vanuit xml .etree importeer ElementTree

def eprint(str) :
print(str, bestand = sys.stderr)

if len(sys.argv)< 2 :
eprint("GEBRUIK: " + sys.argv [ 0 ] + " " )
eprint("Voorbeeld: " + sys .argv [ 0 ] + "freebsd10" )
sys.exit(1)

als os .geteuid() != 0 :
eprint("ERROR: je moet root zijn" )
eprint("Hint: voer `sudo " + sys .argv [ 0 ] + " ...`" ) uit;
sys.exit(1)

if subproces .call ( "welke arping 2>&1 >/dev/null", shell = Waar ) != 0 :
eprint("ERROR: arping niet gevonden" )
eprint( "Hint: voer `sudo apt-get install arping` uit")
sys.exit(1)

Domein = sys.argv[1]

indien niet opnieuw .match ("^*$", domein):
eprint( "ERROR: ongeldige tekens in domeinnaam")
sys.exit(1)

Domout = subproces .check_output ("virsh dumpxml " +domain+" || true" ,
schil = Waar)
domout = domout.decode("utf-8").strip()

als domout == "" :
# foutmelding al afgedrukt door dumpxml
sys.exit(1)

Doc = ElementTree.fromstring(domout)

# 1. maak een lijst van alle netwerkinterfaces
# 2. voer `arping` parallel uit op elke interface
#3.grep antwoordt
cmd = "(ifconfig | knippen -d " " -f 1 | grep -E "." | " + \
"xargs -P0 -I IFACE arping -i IFACE -c 1 () 2>&1 | " + \
"grep "bytes van") || waar"

voor kind in doc.iter() :
if child.tag == "mac" :
macaddr = kind.attrib["adres"]
macout = subproces .check_output (cmd .format (macaddr),
schil = Waar)
print(macout.decode("utf-8"))

Het script werkt met zowel het standaardnetwerk als het overbrugde netwerk, waarvan we de configuratie later zullen bespreken. In de praktijk is het echter veel handiger om KVM zo te configureren dat deze altijd dezelfde IP-adressen aan gastsystemen toewijst. Bewerk hiervoor de netwerkinstellingen:

sudo virsh net-edit standaard

... zoiets als dit:

>



>

Nadat u deze wijzigingen heeft aangebracht


>

... en vervang het door iets als:




>

We starten het gastsysteem opnieuw op en controleren of het via DHCP een IP-adres heeft ontvangen van de router. Als u wilt dat het gastsysteem een ​​statisch IP-adres heeft, wordt dit zoals gebruikelijk binnen het gastsysteem zelf geconfigureerd.

virt-manager programma

Mogelijk ben je ook geïnteresseerd in het virt-manager programma:

sudo apt-get install virt-manager
sudo usermod -a -G libvirtd GEBRUIKERSNAAM

Zo ziet het hoofdvenster eruit:

Zoals je kunt zien is virt-manager niet alleen een GUI voor virtuele machines die lokaal draaien. Met zijn hulp kunt u virtuele machines beheren die op andere hosts draaien, en in realtime prachtige graphics bekijken. Persoonlijk vind ik het vooral handig in virt-manager dat je niet door de configuraties hoeft te zoeken om erachter te komen welke poort VNC op een specifiek gastsysteem draait. U hoeft alleen maar de virtuele machine in de lijst te vinden, te dubbelklikken en toegang te krijgen tot de monitor.

Met de hulp van virt-manager is het ook erg handig om dingen te doen die anders arbeidsintensief bewerken van XML-bestanden zouden vereisen en, in sommige gevallen, het uitvoeren van extra commando's. Bijvoorbeeld het hernoemen van virtuele machines, het instellen van CPU-affiniteit en soortgelijke zaken. Overigens vermindert het gebruik van CPU-affiniteit aanzienlijk het effect van luidruchtige buren en de impact van virtuele machines op het hostsysteem. Gebruik het altijd indien mogelijk.

Als u besluit KVM te gebruiken als vervanging voor VirtualBox, houd er dan rekening mee dat ze geen hardwarevirtualisatie onderling kunnen delen. Om KVM op uw bureaublad te laten werken, moet u niet alleen alle virtuele machines in VirtualBox en Vagrant stoppen, maar ook het systeem opnieuw opstarten. Persoonlijk vind ik KVM veel handiger dan VirtualBox, tenminste omdat je er geen commando voor hoeft uit te voeren sudo /sbin/rcvboxdrv installatie na elke kernelupdate werkt het adequaat met Unity, en kun je over het algemeen alle vensters verbergen.

In Ubuntu wordt het aanbevolen om de KVM-hypervisor (virtuele machinebeheerder) en de libvirt-bibliotheek als beheertools hiervoor te gebruiken. Libvirt bevat een set software-API's en gebruikersapplicaties voor het beheren van virtuele machines (VM's) virt-manager (grafische interface, GUI) of virsh (opdrachtregel, CLI). Als alternatieve beheerders kunt u convirt (GUI) of convirt2 (WEB-interface) gebruiken.

Momenteel wordt alleen de KVM-hypervisor officieel ondersteund op Ubuntu. Deze hypervisor maakt deel uit van de kernelcode van het Linux-besturingssysteem. In tegenstelling tot Xen ondersteunt KVM geen paravirtualisatie, wat betekent dat om het te kunnen gebruiken, uw CPU VT-technologieën moet ondersteunen. U kunt controleren of uw processor deze technologie ondersteunt door de opdracht in de terminal uit te voeren:

Als u hierdoor het volgende bericht ontvangt:

INFO: /dev/kvm bestaat KVM-versnelling kan worden gebruikt

Dit betekent dat KVM zonder problemen zal werken.

Als u bij de uitgang het volgende bericht ontvangt:

Uw CPU ondersteunt geen KVM-extensies KVM-versnelling kan NIET worden gebruikt

dan kun je nog steeds de virtuele machine gebruiken, maar het zal veel langzamer zijn.

    Installeer 64-bits systemen als gasten

    Wijs meer dan 2 GB RAM toe aan gastsystemen

Installatie

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Dit is een installatie op een server zonder X, d.w.z. er is geen grafische interface aanwezig. Je kunt het installeren met het commando

Sudo apt-get install virt-manager

Hierna verschijnt het item "Virtual Machine Manager" in het menu en met grote waarschijnlijkheid zal alles werken. Als er zich nog steeds problemen voordoen, moet u de instructies in de Engelse wiki lezen.

Een gastsysteem maken

De procedure voor het maken van een gastsysteem met behulp van de GUI is vrij eenvoudig.

Maar de tekstmodus kan worden beschreven.

qkoe2

Wanneer u een systeem maakt dat de grafische interface als harde schijf gebruikt, wordt u gevraagd een bestaand afbeeldingsbestand of blokapparaat te selecteren, of een nieuw bestand met onbewerkte (RAW) gegevens te maken. Dit is echter verre van het enige beschikbare bestandsformaat. Van alle schijftypen die in man qemu-img worden vermeld, is qcow2 de meest flexibele en moderne. Het ondersteunt snapshots, encryptie en compressie. Het moet worden aangemaakt voordat een nieuwe gast wordt aangemaakt.

Qemu-img create -o preallocation=metadata -f qcow2 qcow2.img 20G

Volgens dezelfde man qemu-img maakt het vooraf toewijzen van metadata (-o preallocation=metadata) de schijf in eerste instantie iets groter, maar levert betere prestaties wanneer het beeld moet groeien. In dit geval kunt u met deze optie zelfs een onaangename bug vermijden. De gemaakte afbeelding neemt aanvankelijk minder dan een megabyte aan ruimte in beslag en groeit indien nodig uit tot de opgegeven grootte. Het gastsysteem zou deze uiteindelijke gespecificeerde grootte onmiddellijk moeten zien, maar tijdens de installatiefase kan het de werkelijke grootte van het bestand zien. Uiteraard zal het weigeren te installeren op een harde schijf van 200 KB. De bug is niet specifiek voor Ubuntu; hij verschijnt tenminste in RHEL.

Naast het type afbeelding kunt u vervolgens de verbindingsmethode kiezen: IDE, SCSI of Virtio Disk. De prestaties van het schijfsubsysteem zijn afhankelijk van deze keuze. Er is geen definitief juist antwoord; u moet kiezen op basis van de taak die aan het gastsysteem wordt toegewezen. Als het gastsysteem is gemaakt ‘om naar te kijken’, dan is elke methode geschikt. Over het algemeen is I/O meestal het knelpunt van een virtuele machine, dus bij het creëren van een zwaarbelast systeem moet dit probleem zo verantwoordelijk mogelijk worden behandeld.

Ik schrijf deze notitie om de stapsgewijze installatie en configuratie van een op KVM gebaseerde virtuele machine in Linux te demonstreren. Ik schreef eerder over virtualisatie, waarbij ik het prachtige .

Nu sta ik voor de vraag om een ​​goede server te huren met veel RAM en een grote harde schijf. Maar ik wil projecten niet rechtstreeks op de hostmachine uitvoeren, dus zal ik ze opsplitsen in afzonderlijke kleine virtuele servers met Linux- of Docker-containers (ik zal er in een ander artikel over praten).

Alle moderne cloudhosting werken volgens hetzelfde principe, d.w.z. een hoster op goede hardware brengt een aantal virtuele servers bijeen, die we vroeger VPS/VDS noemden, en distribueert deze onder gebruikers, of automatiseert dit proces (hallo, DigitalOcean).

KVM (kernel-gebaseerde virtuele machine) is software voor Linux die de hardware van x86-compatibele processors gebruikt om te werken met Intel VT/AMD SVM-virtualisatietechnologie.

KVM installeren

Ik zal alle machinaties uitvoeren van het maken van een virtuele machine op Ubuntu 16.04.1 LTS OS. Om te controleren of uw processen hardwarevirtualisatie op basis van Intel VT/AMD SVM ondersteunen, voert u het volgende uit:

Grep -E "(vmx|svm)" /proc/cpuinfo

Als de terminal niet leeg is, is alles in orde en kan KVM worden geïnstalleerd. Ubuntu ondersteunt officieel alleen de KVM-hypervisor (onderdeel van de Linux-kernel) en raadt aan om de libvirt-bibliotheek te gebruiken als hulpmiddel om deze te beheren, wat we hierna zullen doen.

U kunt ook de ondersteuning voor hardwarevirtualisatie in Ubuntu controleren met behulp van de opdracht:

Als het lukt, zie je zoiets als dit:

INFO: /dev/kvm bestaat KVM-versnelling kan worden gebruikt

Installeer pakketten voor het werken met KVM:

Sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-builder bridge-utils

Als u toegang heeft tot de grafische shell van het systeem, kunt u de libvirt GUI-manager installeren:

Sudo apt-get install virt-manager

Het gebruik van virt-manager is vrij eenvoudig (niet moeilijker dan VirtualBox), dus in dit artikel zullen we het hebben over de console-optie voor het installeren en configureren van een virtuele server.

Een virtuele server installeren en configureren

In de consoleversie van installatie, configuratie en systeembeheer is een onmisbaar hulpmiddel het virsh-hulpprogramma (een add-on voor de libvirt-bibliotheek). Het heeft een groot aantal opties en parameters; een gedetailleerde beschrijving kan als volgt worden verkregen:

Man virsh

of bel de standaard "help":

Virsh hulp

Bij het werken met virtuele servers houd ik mij altijd aan de volgende regels:

  1. Ik bewaar ISO OS-images in de map /var/lib/libvirt/boot
  2. Ik bewaar afbeeldingen van virtuele machines in de map /var/lib/libvirt/images
  3. Ik wijs elke nieuwe virtuele machine expliciet een eigen statisch IP-adres toe via de DHCP-server van de hypervisor.

Laten we beginnen met het installeren van de eerste virtuele machine (64-bit server Ubuntu 16.04 LTS):

Cd /var/lib/libvirt/boot sudo wget http://releases.ubuntu.com/16.04/ubuntu-16.04.1-desktop-amd64.iso

Na het downloaden van de image start u de installatie:

Sudo virt-install \ --virt-type=kvm \ --name ubuntu1604\ --ram 1024 \ --vcpus=1 \ --os-variant=ubuntu16.04 \ --hvm \ --cdrom=/var/ lib/libvirt/boot/ubuntu-16.04.1-server-amd64.iso \ --network netwerk=default,model=virtio \ --graphics vnc \ --schijfpad=/var/lib/libvirt/images/ubuntu1604. img,size=20,bus=virtio

Als we al deze parameters in "menselijke taal" vertalen, blijkt dat we een virtuele machine creëren met Ubuntu 16.04 OS, 1024 MB RAM, 1 processor, een standaard netwerkkaart (de virtuele machine heeft toegang tot internet alsof het dankzij NAT is ), 20 GB harde schijf.

Het is de moeite waard om op de parameter te letten --os-variant, vertelt het de hypervisor aan welk besturingssysteem de instellingen moeten worden aangepast.
Een lijst met beschikbare OS-opties kan worden verkregen door de opdracht uit te voeren:

Osinfo-query os

Als een dergelijk hulpprogramma niet op uw systeem aanwezig is, installeer dan:

Sudo apt-get install libosinfo-bin

Na het starten van de installatie verschijnt het volgende bericht in de console:

Domeininstallatie wordt nog uitgevoerd. U kunt opnieuw verbinding maken met de console om het installatieproces te voltooien.

Dit is een normale situatie, wij zullen de installatie via VNC voortzetten.
Laten we eens kijken naar welke poort het is aangemaakt op onze virtuele machine (bijvoorbeeld in de volgende terminal):

Virsh dumpxml ubuntu1604... ...

Poort 5900, op lokaal adres 127.0.0.1. Om verbinding te maken met VNC moet u Port Forwarding via ssh gebruiken. Voordat u dit doet, moet u ervoor zorgen dat TCP-forwarding is ingeschakeld in de ssh-daemon. Om dit te doen, ga naar de sshd-instellingen:

Kat /etc/ssh/sshd_config | grep AllowTcpForwarding

Als er niets is gevonden of als u het volgende ziet:

AllowTcpForwarding-nr

Vervolgens bewerken we de configuratie naar

ToestaanTcpForwarding ja

en start sshd opnieuw op.

Port forwarding instellen

We voeren de opdracht uit op de lokale machine:

Ssh -fN -l inloggen -L 127.0.0.1:5900:localhost:5900 server_ip

Hier hebben we het doorsturen van ssh-poorten geconfigureerd van lokale poort 5900 naar serverpoort 5900. Nu kunt u verbinding maken met VNC via elke VNC-client. Ik geef de voorkeur aan UltraVNC vanwege zijn eenvoud en gemak.

Na een succesvolle verbinding wordt het standaard welkomstvenster voor het starten van de Ubuntu-installatie op het scherm weergegeven:

Nadat de installatie is voltooid en de gebruikelijke herstart is voltooid, verschijnt het inlogvenster. Na het inloggen bepalen we het IP-adres van de nieuw aangemaakte virtuele machine om deze later statisch te maken:

Ifconfig

We herinneren het ons en gaan naar de hostmachine. We halen het mac-adres van de “netwerkkaart” van de virtuele machine eruit:

Virsh dumpxml ubuntu1604 | grep "mac-adres"

Laten we ons mac-adres onthouden:

De netwerkinstellingen van de hypervisor bewerken:

Sudo virsh net-edit standaard

We zoeken naar DHCP en voegen dit toe:

Het zou er ongeveer zo uit moeten zien:

Om de instellingen van kracht te laten worden, moet u de DHCP-server van de hypervisor opnieuw opstarten:

Sudo virsh net-destroy standaard sudo virsh net-start standaard sudo service libvirt-bin opnieuw opstarten

Hierna starten we de virtuele machine opnieuw op, nu zal er altijd het IP-adres aan toegewezen zijn: 192.168.122.131.

Er zijn andere manieren om een ​​statisch IP-adres voor een virtuele machine in te stellen, bijvoorbeeld door de netwerkinstellingen rechtstreeks in het gastsysteem te bewerken, maar hier is het wat je hartje begeert. Ik heb zojuist de optie laten zien die ik het liefst gebruik.

Voer het volgende uit om verbinding te maken met de terminal van de virtuele machine:

Ssh 192.168.122.131

De auto is klaar voor de strijd.

Virsh: commandolijst

Om actieve virtuele hosts te bekijken (alle beschikbare hosts kunnen worden verkregen door --all toe te voegen):

Sudo virsh-lijst

U kunt de host opnieuw opstarten:

Sudo virsh start $VM_NAME opnieuw op

Een virtuele machine stoppen:

Sudo virsh stop $VM_NAME

Stop uitvoeren:

Sudo virsh vernietig $VM_NAME

Sudo virsh start $VM_NAME

Uitzetten:

Sudo virsh sluit $VM_NAME af

Toevoegen aan autorun:

Sudo virsh autostart $VM_NAME

Heel vaak is het nodig om een ​​systeem te klonen om het in de toekomst als raamwerk voor andere virtuele besturingssystemen te kunnen gebruiken. Hiervoor wordt het hulpprogramma virt-clone gebruikt.

Virt-kloon --help

Het kloont een bestaande virtuele machine en verandert hostgevoelige gegevens, bijvoorbeeld het Mac-adres. Wachtwoorden, bestanden en andere gebruikersspecifieke informatie in de kloon blijven hetzelfde. Als het IP-adres op de gekloonde virtuele machine handmatig is geregistreerd, kunnen er problemen optreden met SSH-toegang tot de kloon als gevolg van een conflict (2 hosts met hetzelfde IP-adres).

Naast het installeren van een virtuele machine via VNC, is het ook mogelijk om X11Forwarding te gebruiken via het virt-manager hulpprogramma. Op Windows kun je hiervoor bijvoorbeeld Xming en PuTTY gebruiken.

Ik schreef eerder over de installatie Qemu-KVM V Debian. Maar naar mijn mening bleek de informatie onvolledig te zijn. Bovendien heb ik met sommige nuances geen rekening gehouden. Daarom breng ik een bijgewerkt artikel onder uw aandacht over het installeren van de Qemu-KVM virtuele machine. Uiteraard verwijder ik het oude artikel.

Ik denk dat ik moet uitleggen wat het is virtuele machine, niet de moeite waard. Dit weet je waarschijnlijk wel (aangezien je dit artikel leest). Zo niet - . We zullen ons direct op het onderwerp concentreren. Qemu-KVM is een project om twee van de meest dromerige (naar mijn mening) technologieën van volledige virtualisatie te combineren. Qemu is een soort “computeremulator” die een grote verscheidenheid aan hardware-architecturen ondersteunt. Het kan vrijwel elk besturingssysteem en elk apparaat uitvoeren (ik draaide bijvoorbeeld oude versies Mac OS X, dat is voor PowerPC). Het nadeel van Qemu is de traagheid vanwege het ontbreken van hardwareversnelling. En dan komt een ander project te hulp - KVM. Of een virtuele kernelmachine. KVM is een Linux-kerneltechnologie die hardwareversnelling met volledige virtualisatie mogelijk maakt. Het nadeel van KVM is dat het alleen x86-architectuur ondersteunt

Waarom Qemu-KVM? Voor Linux is dit het meest aanbevolen virtualisatieproject. Het werkt sneller dan VirtueleBox En VMware-speler(volgens mijn tests) is KVM een native technologie voor Linux. En als je een goede gamecomputer hebt met twee videokaarten, kun je Qemu-KVM installeren Ramen, gooi er een van de videokaarten in en vergeet het opnieuw opstarten naar een ander besturingssysteem. Als je wilt spelen, start je een virtuele machine met Windows en speel je. De prestaties bedragen 95% van de prestaties van Windows geïnstalleerd op de hardware. Maar het is gewoon prachtig, naar mijn mening. Ik zal hier een apart artikel over schrijven. Het zal interessant zijn :)

Nu zal ik ons ​​plan van aanpak beschrijven. Allereerst zal ik de installatie uitvoeren aan de hand van een voorbeeld Debian 8.2 GNOME 64-bits, hoewel er geen significante verschillen zullen zijn in andere grafische omgevingen. Ten tweede zal ik het werken met KVM alleen in grafische modus beschrijven (we gaan het tenslotte niet op een server installeren). Daarom geen terminals, scripts, enzovoort, zoals meestal gebeurt bij servervirtualisatie. Ten derde raad ik u aan om bovendien de documentatie voor Qemu en KVM te lezen (ik zal links aan het einde van het artikel geven). Dit zal erg handig voor u zijn als u het volledige potentieel van deze bundel optimaal wilt benutten. Ons plan van aanpak is duidelijk. Nu de actiestappen:

  • installeer qemu-kvm;
  • installatie van een grafische manager en extra hulpprogramma's;
  • het opzetten van een netwerkbrug;
  • opslag creëren voor virtuele machines;
  • een gastsysteem installeren.
Laten we eerst controleren of uw computer hardwarevirtualisatie ondersteunt. Om dit te doen, voert u de opdracht uit in de terminal:

egrep "(vmx|svm)" /proc/cpuinfo

De opdrachtuitvoer moet een van beide bevatten vmx, of svm. Als ze er niet zijn, controleer dan of virtualisatie is ingeschakeld in het BIOS (zoek naar items Intel VT-i of vergelijkbaar voor AMD). Als er niets is, heb je pech.

Installeer de benodigde componenten:

sudo apt install qemu-kvm bridge-utils libvirt-bin virt-manager

Voeg jezelf toe aan de libvirt-groep:

sudo adduser $USER libvirt

Laten we nu het netwerk instellen. Om ervoor te zorgen dat alle virtuele machines toegang kunnen krijgen tot het netwerk en met elkaar kunnen communiceren, moet u voor elke virtuele machine een netwerkbrug en virtuele netwerkkaarten maken ( tik op apparaten). Omdat we virtuele machines vanuit de grafische interface zullen installeren, is het niet nodig om handmatig taps te maken. Virt-manager zal dit voor ons doen elke keer dat we beginnen. We hoeven alleen de brug te configureren. Laten we eerst routing in de kernel inschakelen:

sudo nano /etc/sysctl.conf

We zoeken naar de regel net.ipv4_forward=0 en veranderen de waarde ervan in 1 . Wij besparen ook:

sudo sysctl-p

Vervolgens ga ik uit van het volgende: 1) op uw computer bevindt zich één netwerkkaart die een IP-adres ontvangt van de router. 2) u heeft toegang tot internet via een 3G-modem en uw netwerkkaart is gratis. Deze optie brengt meer handmatig werk met zich mee, maar is meerdere keren getest (ik heb dit zelf op een van de machines gedaan). Open dus het interfacebestand:

sudo nano /etc/network/interfaces

De standaardinhoud is:



auto lo
iface lo inet loopback

We veranderen de inhoud ervan. Voor de eerste optie:

bron /etc/network/interfaces.d/*

# De loopback-netwerkinterface
auto lo
iface lo inet loopback

automatische eth0
iface eth0 inet-handleiding

autobr0
iface br0 inet statisch
adres 192.168.0.2
gateway 192.168.0.1
netmasker 255.255.255.0
netwerk 192.168.0.0
uitgezonden 192.168.0.255
bridge_ports eth0
bridge_stp uit
bridge_maxwait 0
bridge_fd 0

Voor de tweede optie:

bron /etc/network/interfaces.d/*

# De loopback-netwerkinterface
auto lo
iface lo inet loopback

automatisch ppp0
iface ppp0 inet wvdial

automatische eth0
iface eth0 inet-handleiding

autobr0
iface br0 inet statisch
adres 192.168.0.2
gateway 192.168.0.1
netmasker 255.255.255.0
netwerk 192.168.0.0
uitgezonden 192.168.0.255
bridge_ports eth0
bridge_stp uit
bridge_maxwait 0
bridge_fd 0
route naar boven standaard br0

Opmerking: Als u na het opstarten van het systeem geen automatische internetverbinding via een modem nodig heeft, verwijdert u de regels auto ppp0 en
iface ppp0 inet wvdial. Zorg er anders voor dat wanneer het systeem opstart, de modem in de USB-poort is geplaatst.

Redden. Voor de optie met een modem moet u een dialerprogramma installeren wvdial:

sudo apt installeer wvdial

De configuratie bewerken (let op: als voorbeeld wordt een 3G-modem gebruikt Beelijn. U kunt eenvoudig voorbeelden van configuraties voor andere modems op internet vinden):

sudo nano /etc/wvdial.conf


Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Init3 = AT+CGDCONT=1,"IP", "home.beeline.ru"
Stomme modus = 1
ISDN=0
Modemtype = USB-modem
Nieuwe PPPD = ja
Telefoon = *99#
Modem = /dev/ttyACM0
Gebruikersnaam = beeline
Wachtwoord = beeline
Baud = 9600
Land = Rusland
Automatisch opnieuw verbinden=aan
Automatische DNS = uit
Inactieve seconden = 0

Redden. Nu wordt de modem onmiddellijk ingeschakeld nadat het systeem is opgestart. De opstelroute del default br0 verwijdert de standaardroute door de brug. Als u dit niet doet, kunt u geen verbinding maken met internet, aangezien het verkeer over de brug gaat en niet via het 3G-modem.

De laatste stap moeten we zeggen firewall, zodat het verkeer van onze virtuele machines naar het netwerk en terug doorgeeft. Om dit te doen, kun je op twee manieren te werk gaan: schrijf een script met verschillende regels voor iptables, die met het systeem meeloopt, of voer deze regels handmatig in en sla ze op. Ik gebruik de eerste optie. Voor de tweede moet u het pakket installeren iptables-persistent en voer eenvoudig de regels één voor één in (met behulp van sudo). Dus. maak een script (in elke teksteditor). Plak daar de volgende inhoud:

#!/bin/sh

# Definieer de uitvoerinterface waarvoor adresvervanging (NAT) zal worden gebruikt
iptables -v -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

# We sturen alle pakketten door die door de modem worden ontvangen van het mondiale netwerk (0.0.0.0/0) naar het lokale netwerk (192.168.0.0/24)
iptables -v -A FORWARD -i ppp0 -o br0 -s 0.0.0.0/0 -d 192.168.0.0/24 -j ACCEPTEREN

# Stuur alle pakketten door die afkomstig zijn van het lokale netwerk (192.168.0.0/24) naar het globale netwerk (0.0.0.0/0)
iptables -v -A FORWARD -i br0 -o ppp0 -s 192.168.0.0/24 -d 0.0.0.0/0 -j ACCEPTEREN

Bewaar het als gateway.sh en geef uitvoeringsrechten (in de bestandseigenschappen of in de terminal met de opdracht chmod +x gateway.sh). Nu kunt u het handmatig starten nadat het systeem is opgestart, of toevoegen aan het opstarten. Verplaats hiervoor het script naar ~/.config/autostart(schakel in bestandsbeheer verborgen bestanden weergeven in en je ziet de map .config in uw thuismap).

Nu is alles klaar om de virtuele machine te installeren. Vanuit het applicatiemenu start u Virt Manager (virtuele machinebeheerder):

Klik met de rechtermuisknop op de lijn lokalehost en kies Details. Ga naar het tabblad Opslag. We moeten de map (of schijfpartitie/schijf) opgeven waarin de virtuele machines moeten worden opgeslagen.

Klik in de linkerbenedenhoek op het plusteken ( Voeg een zwembad toe), geef het type opslag aan en het pad ernaartoe.

Op het tabblad Netwerkinterfaces, kunt u controleren of alles werkt.

Nu drukken we Bestand - Nieuwe virtuele machine. Geef het pad naar de schijfkopie en het type virtuele machine op. Vervolgens geven we de hoeveelheid RAM ervoor en het aantal processorkernen aan. Geef vervolgens onze opslag aan en klik Nieuw volume. Geef de naam op, laat het type staan qkoe2, en grootte. Dit zal een virtuele harde schijf zijn. Als u van plan bent een systeem met een grafische shell en een heleboel programma's te installeren, geef dan meer ruimte (50 gigabyte). Vink het vakje aan op het laatste tabblad Wijzig de instellingen vóór de lancering, controleer of onze bridge is geselecteerd als netwerkapparaat, schrijf een naam voor de virtuele machine en klik op Compleet. Het parametervenster voor deze virtuele machine wordt voor u geopend.





Ga naar het tabblad CPU en zet een vinkje Kopieer de instellingen van de hostprocessor.

Naast het tabblad Netto(volgende), en ook aangeven vitio. Op het tabblad Weergave geef dit alstublieft aan Kruid en op het tabblad Video - QXL. Meestal levert deze combinatie maximale grafische weergaveprestaties op, maar als u wilt, kunt u experimenteren. Houd er rekening mee dat voor Windows-gastsystemen een aparte installatie van het QXL-stuurprogramma vereist is (in Windows zelf).


Nu alles klaar is, klik je op in de linkerbovenhoek Begin met de installatie. En installeer het systeem zoals gewoonlijk, met één uitzondering: zodra het installatieprogramma het netwerk automatisch begint te configureren, klikt u op Annuleren en selecteer Configureer het netwerk handmatig. Geef het gewenste IP-adres op voor de virtuele machine (in ons geval 192.168.0.3 ), subnetmasker ( 255.255.255.0 ), gateway (de gateway is dus het hostadres 192.168.0.2 ) en DNS-server (specificeer hier gewoon Google 8.8.8.8 ). Dat is alles. U hoeft verder niets te doen. Installeer het systeem en configureer het. Over het algemeen is dat alles. De beschreven stappen zijn een manier om bijvoorbeeld VirtualBox te vervangen door een beter alternatief. Na het lezen van de documentatie begrijpt u hoe breed de mogelijkheden van Qemu-KVM zijn. Ik heb hier bewust geen aanvullende consoleparameters en methoden beschreven voor het starten van virtuele machines via de terminal, omdat dit op een thuismachine niet altijd nodig is. Ik zal hierover een apart artikel schrijven over het opzetten van een multifunctionele thuisserver (die ook kan fungeren als een virtuele machineserver). Voor degenen die om de een of andere reden niet begrepen wat er geschreven was, of er nog steeds onbegrijpelijke momenten zijn, raad ik aan een video te bekijken waarin ik niet zal beschrijven, maar zal laten zien hoe je al deze dingen kunt installeren en configureren. Als je suggesties of aanvullingen op het artikel hebt, schrijf dan in de reacties.