Virtuele machine kvm. Wat is KVM-virtualisatie. Een gastsysteem maken

In dit inleidende artikel zal ik kort alle softwaretools introduceren die worden gebruikt in het serviceontwikkelingsproces. Ze zullen in de volgende artikelen in meer detail worden besproken.

Waarom ? Dit besturingssysteem is voor mij dichtbij en begrijpelijk, dus er was geen kwelling, kwelling of gooien bij het kiezen van een distributie. Speciale voordelen ten opzichte van Red Hat Enterprise-Linux Dat doet hij niet, maar er is voor gekozen om met een bekend systeem te werken.

Als u van plan bent zelfstandig een infrastructuur uit te rollen met behulp van vergelijkbare technologieën, raad ik u aan om RHEL te nemen: dankzij goede documentatie en goed geschreven applicatieprogramma's zal het, zo niet een orde van grootte, dan zeker twee keer zo eenvoudig zijn, en Dankzij het ontwikkelde certificeringssysteem vindt u eenvoudig een aantal specialisten die op het juiste niveau bekend zijn met dit besturingssysteem.

We hebben opnieuw besloten om te gebruiken Debian Knijp met een set pakketten van Sid/Experimenteel en sommige pakketten zijn gebackporteerd en gecompileerd met onze patches.
Er zijn plannen om een ​​repository met pakketten te publiceren.

Bij het kiezen van virtualisatietechnologie werden twee opties overwogen: Xen en KVM.

Er werd ook rekening gehouden met het feit dat er een groot aantal ontwikkelaars, hosters en commerciële oplossingen op basis van Xen waren - hoe interessanter het was om een ​​oplossing op basis van KVM te implementeren.

De belangrijkste reden waarom we besloten om KVM te gebruiken is de noodzaak om virtuele machines te draaien met FreeBSD en, in de toekomst, MS Windows.

Voor beheer virtuele machines Het bleek buitengewoon handig om producten te gebruiken die de API gebruiken: virsh, virt-manager, virt-install, pr.

Dit is een systeem dat de instellingen van virtuele machines opslaat, beheert, statistieken bijhoudt, ervoor zorgt dat de interface van de virtuele machine wordt geopend bij het opstarten, apparaten met de machine verbindt - over het algemeen doet het een heleboel dingen nuttig werk en daarbovenop nog een beetje.

Natuurlijk is de oplossing niet perfect. De nadelen zijn onder meer:

  • Absoluut waanzinnige foutmeldingen.
  • Onvermogen om een ​​deel van de configuratie van de virtuele machine direct te wijzigen, hoewel QMP (QEMU Monitor Protocol) dit toestaat.
  • Soms is het om een ​​onbekende reden onmogelijk om verbinding te maken met libvirtd - het reageert niet meer op externe gebeurtenissen.

Het grootste probleem bij het implementeren van de service aan het begin was de beperking van de bronnen voor virtuele machines. In Xen werd dit probleem opgelost met behulp van een interne planner die bronnen tussen virtuele machines verdeelt - en het beste is dat ook de mogelijkheid om schijfbewerkingen te beperken werd geïmplementeerd.

Er was niets vergelijkbaars in KVM tot de komst van het mechanisme voor toewijzing van kernelbronnen. Zoals gebruikelijk in Linux werd de toegang tot deze functies geïmplementeerd via een speciaal bestandssysteem cgroep, waarin je met behulp van de normale write() systeemaanroepen een proces aan een groep kunt toevoegen, het zijn papegaaigewicht kunt toewijzen, de kern kunt specificeren waarop het zal draaien, de schijfbandbreedte kunt specificeren die het proces kan gebruiken, of, nogmaals , geef er een gewicht aan.

Het voordeel is dat dit allemaal binnen de kernel wordt geïmplementeerd, en dat het niet alleen voor de server kan worden gebruikt, maar ook voor de desktop (die werd gebruikt in de beroemde “The ~200 Line Linux Kernel Patch That Does Wonders”). En naar mijn mening is dit een van de belangrijkste veranderingen in de 2.6-branch, afgezien van mijn favoriet #12309, en niet het archiveren van een ander bestandssysteem. Nou ja, misschien, behalve POHMELFS (maar puur vanwege de naam).

Mijn houding ten opzichte van deze nutsbibliotheek is zeer dubbelzinnig.

Enerzijds ziet het er ongeveer zo uit:

En dit ding is ook verdomd moeilijk om vanuit de broncode samen te stellen, laat staan ​​in een pakket: soms lijkt het mij dat Linux From Scratch een beetje gemakkelijker is om helemaal opnieuw te bouwen.

Aan de andere kant is het een zeer krachtig iets waarmee je afbeeldingen voor virtuele machines kunt maken, deze kunt wijzigen, comprimeren, grub kunt installeren, de partitietabel kunt wijzigen, configuratiebestanden kunt beheren, hardwaremachines naar een virtuele omgeving kunt overbrengen, virtuele machines kunt overbrengen van de ene afbeelding naar de andere, breng virtuele machines over van de afbeelding naar hardware en, om eerlijk te zijn, hier laat mijn verbeeldingskracht me een beetje in de steek. Oh ja: je kunt ook een daemon in een virtuele Linux-machine draaien en live toegang krijgen tot de gegevens van de virtuele machine, en dit allemaal in shell, python, perl, java, ocaml. Dit is een korte en zeker niet uitputtende lijst van wat u ermee kunt doen.

Interessant is dat het grootste deel van de code wordt gegenereerd op het moment van assemblage, evenals de documentatie voor het project. Ocaml en perl worden veel gebruikt. De code zelf is geschreven in C, die vervolgens wordt verpakt in OCaml, en de herhaalde stukjes code worden zelf gegenereerd. Het werken met afbeeldingen gebeurt door een speciale service-image (supermin-apparaat) te lanceren, waarnaar opdrachten via een kanaal ernaar worden verzonden. Deze reddingsimage bevat een bepaalde reeks hulpprogramma's, zoals parted, mkfs en andere die nuttig zijn voor een systeembeheerder.

Onlangs begon ik het zelfs thuis te gebruiken, toen ik de gegevens die ik nodig had uit de nandroid-afbeelding haalde. Maar dit vereist een kernel die yaffs ondersteunt.

Ander

Hieronder vindt u nog enkele interessante links naar een beschrijving van de gebruikte software - lees en bestudeer deze zelf als u geïnteresseerd bent. Bijvoorbeeld,

Origineel: Welkom bij KVM-virtualisatie - Grondige introductie
Auteur: Igor Ljubuncic
Datum van publicatie: 4 mei 2011
Vertaling: A. Krivoshey
Vertaaldatum: juli 2011

Als je mijn artikelen over virtualisatie hebt gelezen, weet je dat ik vroeger vooral VMware en VirtualBox gebruikte, maar nu is het tijd om iets nieuws te proberen. Vandaag wil ik een nieuwe reeks opmerkingen over KVM introduceren. Vervolgens zal ik misschien overstappen naar Xen of een ander systeem, maar nu is de held van ons onderwerp KVM.
In deze handleiding zullen we het hebben over KVM-technologie (Kernel-based Virtual Machine), die is gemaakt door RedHat en die open source is en een gratis alternatief is voor de commerciële analogen. We leren hoe u KVM kunt downloaden, installeren en configureren, welke tools het heeft voor het beheren van virtuele machines, hoe u met KVM op de opdrachtregel kunt werken, hoe u scripts schrijft en nog veel meer. Daarnaast zullen we ingaan op het creëren van geavanceerde (inclusief netwerk) configuraties, evenals andere interessante dingen. Laten we nu beginnen.

KVM-woordenlijst

Laten we eerst een beetje praten over hoe KVM werkt. Niets bijzonders, gewoon een korte introductie, zodat u de basisterminologie kent.
KVM maakt gebruik van die wordt ondersteund door moderne verwerkers van Intel en AMD en bekend als Intel-VT en AMD-V. Met behulp van een geladen kernelmodule emuleert KVM, met behulp van een gebruikersmodusstuurprogramma (dat een aangepast stuurprogramma is van QEMU), de laag hardware, waar bovenop virtuele machines kunnen worden gemaakt en gelanceerd. KVM kan functioneren zonder hardwarevirtualisatie (als dit niet door de processor wordt ondersteund), maar in dit geval werkt het in pure emulatiemodus met behulp van QUEMU en worden de prestaties van virtuele machines aanzienlijk verminderd.
Om KVM te besturen kunt u gebruiken grafisch hulpprogramma, vergelijkbaar met producten van VMware en VirtualBox, evenals de opdrachtregel.
De meest populaire GUI is de Virtual Machine Manager (VMM), gemaakt door RedHat. Het is ook bekend onder de pakketnaam als virt-manager en bevat verschillende hulpprogramma's, waaronder virt-install, virt-clone, virt-image en virt-viewer, voor het creëren, klonen, installeren en bekijken van virtuele machines. VMM ondersteunt ook virtuele Xen-machines.
De basis KVM-opdrachtregelinterface wordt geleverd door het virsh-hulpprogramma. In bepaalde gevallen kun je ondersteunende hulpprogramma's zoals virt-install gebruiken om je virtuele machines te creëren. Ubuntu heeft een speciaal hulpprogramma ubuntu-vm-builder, ontwikkeld door Canonical, waarmee je Ubuntu-builds kunt maken.
Als u meer wilt weten over KVM, kunt u meer informatie vinden op de volgende adressen:

Voor- en nadelen van KVM

KVM nodig? Het hangt ervan af waar je het voor nodig hebt.
Als je nog niet eerder virtuele machines hebt gebruikt of ze een paar keer voor de lol hebt gestart, kan het lastig zijn om KVM onder de knie te krijgen. Dit programma wordt voornamelijk bestuurd vanaf de opdrachtregel en is niet zo gebruiksvriendelijk als VMware of VirtualBox. We kunnen dat zeggen in termen van GUI KVM loopt enkele jaren achter op zijn concurrenten, hoewel het in feite qua mogelijkheden gelijk is aan ten minste niet minderwaardig. KVM-mogelijkheden zijn het meest gevraagd bij gebruik voor commerciële doeleinden in een zakelijke omgeving.
Als uw processor bovendien geen hardwarevirtualisatie ondersteunt, zal KVM in een zeer trage en inefficiënte software-emulatiemodus werken. Bovendien is het bekend dat KVM conflicteert met VirtualBox, maar aan dit geval zal een aparte opmerking worden gewijd.
Op basis van het bovenstaande kunnen we concluderen dat KVM meer geschikt is voor mensen die zich voor professionele doeleinden met virtualisatie bezighouden. Het is onwaarschijnlijk dat het je favoriete speelgoed voor thuis zal worden, maar als je besluit wat moeite te doen om het te bestuderen, kun je met de kennis die je hierdoor opdoet, vertrouwd raken met virtualisatietechnologieën. In tegenstelling tot VMware en VirtualBox, die er in eerste instantie van uitgaan dat de gebruiker met het programma zal werken via een grafische interface, richt KVM zich op het gebruik van de opdrachtregel en het schrijven van scripts.
Samenvattend kunnen we zeggen dat de voordelen van KVM liggen in het gebruik van de nieuwste virtualisatietechnologieën, de afwezigheid van licentiebeperkingen in het gebruik en een krachtige opdrachtregelinterface. Als uw processor geen hardwarevirtualisatie ondersteunt, u geen scripts wilt schrijven en u de voorkeur geeft aan eenvoudiger te beheren systemen zoals VMware Server, ESXi of VirtualBox, dan is KVM niets voor u.

Testplatform

KVM kan op elk apparaat worden gebruikt Linux-distributie. De belangrijkste ontwikkelaar en sponsor van KVM is echter RedHat. RHEL wordt bijvoorbeeld uit de doos geleverd met KVM, zodat je het kunt vinden op elke op RedHat gebaseerde distributie zoals CentOS, Scientific Linux of Fedora.
Omdat ik Ubuntu voornamelijk thuis gebruik, zal ik KVM testen op dit systeem, relatief geïnstalleerd op mijn nieuwe laptop HP, uitgerust met een i5-processor met ondersteuning voor hardwarevirtualisatie.
In dit artikel vertel ik je hoe je KVM installeert op 64-bit Ubuntu Lucid (LTS).

Installatie voorbereiden

Eerst moet u controleren of uw processor hardwarevirtualisatie ondersteunt. Dit gebeurt met behulp van het volgende commando:

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

Als de uitvoer een getal is dat niet nul is, is alles in orde. Bovendien moet u controleren of de virtualisatietechnologie is geactiveerd in het BIOS.
Nadat u het hebt geactiveerd, moet u uiteraard de machine opnieuw opstarten om de wijzigingen door te voeren. Om dit te controleren, voert u de opdracht kvm-ok uit:

KVM downloaden en installeren

Om KVM te laten werken, moet u de volgende pakketten installeren (voor distributies met apt):

$ apt-get install qemu-kvm libvirt-bin

$ apt-get install bridge-utils virt-manager python-virtinst

P.S. Pakketten kunnen op verschillende distributies verschillend worden genoemd. Virt-install zou bijvoorbeeld python-virt-install of python-virtinst kunnen heten. De afhankelijkheden voor virt-clone, virt-image en virt-viewer zouden automatisch geïnstalleerd moeten worden. In tegenstelling tot wat in de meeste handleidingen staat, hoeven de bridge-utilities niet geïnstalleerd te worden. Ze zijn alleen nodig als u een netwerkbrug gaat maken tussen virtuele en fysieke netwerkkaarten. In de meeste handleidingen staat ook dat de meeste draadloze netwerkinterfaces niet met bridges werken. Dit kan in een bepaald geval waar zijn, maar de bridge werkt voor mij prima draadloze adapters, dus laten we hopen dat het ook voor jou werkt.
Ik raad VMM (virt-manager) ten zeerste aan. Bovendien is het beter om alle ondersteunende hulpprogramma's te installeren, inclusief virt-viewer, virt-install, virt-image en virt-clone.
En nog een laatste ding. Misschien geeft u de voorkeur aan ubuntu-vm-builder:

$ apt-get installeer ubuntu-vm-builder

Bovendien zal er waarschijnlijk een groot aantal afhankelijkheden zijn geïnstalleerd, waardoor het downloaden een aanzienlijke hoeveelheid tijd kan duren.
P.S. Op RedHat gebruik je yum install, op SUSE - zypper install.

Conflict met VirtualBox

Ik zal opnieuw een andere mening uiten dan wat in de meeste handleidingen staat: KVM en VirtualBox kunnen samen op hetzelfde systeem worden geïnstalleerd. Maar je kunt ze niet tegelijkertijd uitvoeren. Met andere woorden: de kernelmodule van een van de virtuele machines moet uit het RAM worden verwijderd. Maar dit is geen reden om de installatie te weigeren. Probeer gewoon of ze voor u werken. Als dit niet het geval is, kan dit probleem worden opgelost. Later zal ik een aparte handleiding plaatsen die gewijd is aan het oplossen van dit probleem. Ik heb nu beide virtuele machines geïnstalleerd en actief.

KVM gebruiken

Nou, nu het meest interessante deel. We zullen onze kennismaking met KVM beginnen met zijn grafische interface, die weinig verschilt van zijn analogen. zoals de VMware-console en vooral VirtualBox.

Virtuele machinebeheerder (VMM)

Wanneer u het programma voor het eerst start, ziet u twee categorieën, beide niet met elkaar verbonden. Dit zijn links naar standaard KVM-modules die nog niet werken. Om ze te gebruiken, klikt u op klik met de rechtermuisknop muis en selecteer "verbinden".

Om ze te gebruiken, klikt u met de rechtermuisknop en selecteert u "verbinden". Om een ​​nieuwe verbinding toe te voegen, selecteert u Bestand > Verbinding toevoegen in het menu. Er wordt een venster geopend waarin u het hypervisortype en het verbindingstype kunt instellen. VMM kan zowel lokaal als verbindingen op afstand, inclusief QUEMU/KVM en Xen. Bovendien worden alle authenticatiemethoden ondersteund.

U kunt ook het vakje voor automatisch verbinden aanvinken. De volgende keer dat u het programma start, zijn deze verbindingen klaar voor gebruik. Dit ziet eruit als een starter VMware-interface Server. Gewoon bijvoorbeeld:

Kernel versus gebruikersmodus

U vraagt ​​zich misschien af: wat is het verschil tussen normaal/standaard en gebruikersmodus? Wanneer u de Usermode gebruikt, kan de virtuele machine worden uitgevoerd zonder beheerdersrechten, maar is de netwerkfunctionaliteit beperkt.

We blijven VMM bestuderen

Laten we kort kijken naar de overige functies van het programma.
Netwerkfunctionaliteit kan worden bekeken of gewijzigd door Hostdetails te openen. Ik ben van plan dit onderwerp in detail te bespreken in een aparte gids. Daar zullen we hulpprogramma's voor de netwerkbrug installeren.

Op dezelfde manier kunt u de parameters van het schijfsubsysteem wijzigen:

Voorinstellingen wijzigen

VMM heeft een klein aantal opties, waardoor u het programma beter kunt aanpassen aan uw behoeften. U kunt bijvoorbeeld de weergave van het VMM-pictogram in het systeemvak activeren, het interval voor het verzamelen van statistieken instellen, het verzamelen van gegevens voor schijf- en netwerkstatistieken activeren, toetsenbordopname configureren, consoleschaling, audiosysteemopties, enz.

U kunt dan meer gedetailleerde informatie over de virtuele machine bekijken. Hieronder vindt u bijvoorbeeld de uitvoer van CPU-, schijf- en netwerkgebruik voor een Ubuntu-gast.

Het systeemvakpictogram ziet er als volgt uit:

Nu zijn we klaar om een ​​nieuwe virtuele machine te maken.

Een virtuele machine maken

U kunt een virtuele machine maken vanaf de opdrachtregel, maar eerst gebruiken we VMM. De eerste stap moet intuïtief zijn. Voer een naam in en geef de locatie van de installatieschijf op. Het zou zo kunnen zijn lokaal apparaat in de vorm van een CD/DVD-schijf of ISO-image, evenals een HTTP- of FTP-server, NFS of PXE.

Wij maken gebruik van lokale media. Nu moet u instellen of het een fysiek apparaat of een afbeelding wordt. In ons geval wordt ISO gebruikt. Vervolgens moet u het type selecteren en ISO-versie. Dit vereist niet zo'n hoge precisie, maar de juiste keuze zal de prestaties van de virtuele machine verbeteren.

Vierde fase - virtuele schijf. U kunt een nieuwe afbeelding maken of een bestaande afbeelding gebruiken. U moet de schijfgrootte selecteren en opgeven of de schijfkopie onmiddellijk met een bepaalde grootte wordt gemaakt, of dat de grootte dynamisch wordt vergroot als dat nodig is. Opgemerkt moet worden dat het in één keer toewijzen van alle ruimte voor een schijfkopie de prestaties verbetert en de fragmentatie van het bestandssysteem vermindert.

Vervolgens zullen we meer aandacht besteden schijf subsysteem. Houd er echter rekening mee dat wanneer u in de gebruikersmodus werkt, u geen schrijfrechten hebt voor /var, waar afbeeldingen standaard worden opgeslagen virtuele schijven. Daarom moet u een andere locatie voor de afbeeldingen instellen. Dit probleem zal in een apart artikel in meer detail worden behandeld.
Fase 5 is de uitvoer van samenvattende gegevens met de mogelijkheid om enkele geavanceerde opties te configureren. Hier kunt u het netwerktype wijzigen, vaste MAC-adressen instellen, het virtualisatietype en de doelarchitectuur selecteren. Als u in de gebruikersmodus werkt, zijn uw netwerkconfiguratieopties beperkt; u kunt bijvoorbeeld geen bruggen tussen netwerkinterfaces maken. Nog een laatste ding: als uw processor geen hardwarevirtualisatie ondersteunt, zal het Virt Type-veld QUEMU zijn en zal het niet mogelijk zijn om dit te wijzigen in KVM. Hieronder zullen we kijken naar de nadelen van het werken in de emulatiemodus. Nu kunt u zien hoe typische instellingen voor een virtuele Ubuntu-machine eruit zien:

Onze machine is klaar voor gebruik.

Een virtuele machine opzetten

De VM-console heeft ook enkele interessante opties. U kunt signalen naar de gast sturen, schakelen tussen virtuele consoles, de gast opnieuw opstarten of afsluiten, klonen, verplaatsen, de status van de virtuele machine opslaan, schermafbeeldingen maken, enzovoort. Opnieuw is alles hetzelfde als bij de concurrenten.

Hieronder staan ​​een paar schermafbeeldingen die de opties tonen voor het klonen en verplaatsen van een virtuele machine. In de toekomst zullen we dit onderwerp in detail bekijken.

Een virtuele machine starten

Nu komt het leuke gedeelte. Hieronder enkele mooie screenshots...
Laten we beginnen met het opstartmenu van de 32-bits versie van Ubuntu 10.10 Maverick:

De Puppy Linux-desktop is zoals altijd geweldig:

Nu draait Ubuntu onder NAT. Let op het lage CPU-gebruik. We zullen hier later over praten als we de emulatiemodus bespreken.

Het consolevenster kan worden aangepast aan de resolutie van het gastbureaublad. De volgende schermafbeelding toont Puppy en Ubuntu naast elkaar:

Houd er rekening mee dat de systeembelasting laag is. Met deze emulatiemodus kunt u meerdere virtuele machines tegelijkertijd uitvoeren.

Indien nodig kunt u de virtuele machine samen met alle bestanden verwijderen:

Commandoregel

Laten we nu de onbeminde opdrachtregel eens nader bekijken. Laten we bijvoorbeeld alle beschikbare virtuele machines vermelden die virsh gebruiken.

$virsh "lijst --alles"

Hieronder staat een reeks commando's om een ​​virtuele machine te creëren en uit te voeren met behulp van virt-install.

Het volledige commando ziet er als volgt uit:

$ virt-install --connect qemu://system -n puppy -r 512 -f puppy.img -c lupu-520.iso --vnc --noautoconsole --os-type linux --accelerate --network=netwerk :standaard

--connect qemu:///systeem specificeert het hypervisortype. De systeemoptie wordt gebruikt wanneer een machine als superuser op een kale kernel draait. Als u als gewone gebruiker werkt, gebruikt u de sessieoptie.
-n puppy is de unieke naam van de virtuele machine. Het kan worden gewijzigd met behulp van virsh.
-r 512 stelt de RAM-grootte in.
-F specificeert het schijfkopiebestand. In mijn geval is het puppy.img, dat ik heb gemaakt met de opdracht dd.
-C specificeert de CD-ROM, die er zo uit kan zien fysiek apparaat en ISO-image.
--vnc maakt een gastconsole aan en exporteert deze als een VNC-server. Optie --geen autoconnect voorkomt het automatisch openen van de console wanneer de virtuele machine start.
--os-type specificeert het type gastbesturingssysteem.
--versnellen Hiermee kan KVM optimalisatiefuncties gebruiken die de prestaties van gasten verbeteren.
--netwerk bepaalt het netwerktype. In ons geval wordt de standaardverbinding gebruikt.

Er zijn veel andere functies die parameters instellen zoals het aantal processorkernen, vaste MAC-adressen, enz. Ze worden allemaal in detail beschreven op de manpagina. Ondanks de ogenschijnlijke complexiteit wordt de bediening via de opdrachtregel vrij snel onder de knie.

Pure emulatiemodus

Ik zei al dat het vreselijk ineffectief is. Laten we dit nu in de praktijk bevestigen. In de onderstaande schermafbeelding kunt u bijvoorbeeld zien dat het systeem tijdens het gebruik alle beschikbare processorbronnen verbruikt in dit geval met één kern zijn ze goed voor 25% van de bronnen van de fysieke processor. Dit betekent dat vier virtuele machines de quad-core host volledig zullen laden.

Bovendien zijn de prestaties van het gastsysteem beneden alle kritiek. Als hardwarevirtualisatie was ingeschakeld, kostte het laden van de gast-Ubuntu ongeveer 1 minuut, en na het uitschakelen duurde het 20 minuten. Opgemerkt moet worden dat zonder het gebruik van hardwarevirtualisatie de prestaties van QUEMU/KVM veel lager zijn dan die van zijn concurrenten.

De notitie is nuttig voor iedereen die geïnteresseerd is in het gebruik van virtualisatie in zijn werk. Mijn oplossing komt wellicht in aanmerking voor industrieel gebruik en zal nuttig zijn voor degenen die de hardwarekosten willen verlagen als ze een uitgebreide netwerkinfrastructuur nodig hebben. Sommige oplossingen van IBM zijn bijvoorbeeld gebaseerd op een vergelijkbare optie. Maar deze oplossingen zijn verre van budgetvriendelijk en er is slechts in uitzonderlijke gevallen vraag naar.
Dus op een dag moest ik thuis een uitgebreide netwerkinfrastructuur reproduceren, bestaande uit verschillende softwareplatforms. Het pad begon vanaf VMWare Workstation en eindigde met KVM... Waarom KVM en hoe het allemaal gebeurde, lees hieronder.

1. Een beetje geschiedenis of hoe het allemaal begon.
Toen ik bij een bank werkte, kwam ik met virtualisatie in aanraking. Het was IBM's AIX-besturingssysteem dat op mainframes draaide. Vanaf het allereerste begin was ik verbaasd over de kracht en flexibiliteit van deze aanpak. En toen ik thuis een uitgebreide software-infrastructuur moest reproduceren voor testdoeleinden, heb ik dat meteen allemaal gebaseerd op de principes van virtualisatie. Dit maakte het mogelijk om zowel aanzienlijke kosten voor hardware te vermijden als om alles qua ruimte zeer compact in te passen.
De lezer moet er rekening mee houden dat er feitelijk een grote verscheidenheid aan virtualisatietools bestaat. Elk van hen heeft zijn eigen subtiliteiten en nuances. Mijn doel is om te praten over één optie waarmee ik persoonlijk werk, waarbij ik, indien mogelijk, de tekortkomingen en kenmerken van de andere opties beschrijf.
2. Mijn keuze heet KVM (of Kernel-gebaseerde virtuele machine).
Over deze optie kunt u meer lezen.
Maar het is beter om alles in volgorde te presenteren. Ik begin met de selectievoorwaarden en welke van de mij bekende opties niet aan deze voorwaarden voldoen:
— het hoofdsysteem moet betaalbaar en krachtig zijn.

Qua hardware heb ik voor de optie gekozen AMD-fenomeen X4 9550 / Asus M3A78 / 2x2Gb DDR-II / 1x160Gb IDE + 2x1Tb SATA-II. De video is hier helemaal niet belangrijk, behalve dat je er in het geval van de ingebouwde er rekening mee moet houden dat deze een deel van het RAM-geheugen in beslag neemt, dus er zal minder van zijn voor virtuele machines. Ik zeg meteen dat de keuze voor een moederbord met ingebouwde RAID-controller niet helemaal juist was. Het bleek dat deze RAID alleen in de softwaremodus werkt, d.w.z. Voor Windows-systemen zijn stuurprogramma's nodig, maar in Linux zou hetzelfde effect veel gemakkelijker kunnen worden bereikt met behulp van standaardtools.
Het gebruik van een softwareplatform voor het hoofdsysteem was duidelijk in het voordeel van GNU/Linux, omdat maakte het mogelijk om een ​​virtualisatieomgeving te verkrijgen zonder extra kosten voor licenties, evenals een lichtere belasting (ik zal nooit begrijpen waarom in Windows-server zonder graphics kun je niets opvoeren of doen…. zinloze belasting, IMHO). Aanvankelijk was het de bedoeling om van de optie gebruik te maken Ubuntu-server Hardy LTS, maar vrijwel onmiddellijk werd er een migratie uitgevoerd naar Debian Lenny (het was toen net uitgebracht). Ik bagatelliseer op geen enkele manier de verdiensten van Ubuntu, maar subjectief gezien is Debian stabieler en sneller.

— het virtualisatiesysteem moet stabiel, publiek toegankelijk en weinig veeleisend zijn.

De keuze is duizelingwekkend, maar nadat ik recensies op internet heb bestudeerd en geprobeerd heb deze te gebruiken, heb ik een subjectieve mening gevormd.
VMWare-producten zijn niet geschikt. Werkstation is betaald, ESXi kon niet op mijn systeem worden geïnstalleerd vanwege een niet-ondersteunde chipset (deze bleek moderner). Zou een goede keuze zijn VMWare-server, maar afgaande op de recensie is het een beetje zwaar en crasht het regelmatig; ik heb het zelf niet geprobeerd na de mislukking met ESXi. Ze pasten om nog een reden niet: het bedrijf verkoopt nog steeds zijn producten en slechts enkele ervan zijn vrij verkrijgbaar.
VirtualBox bleek een zeer goede optie. Het wordt geleverd in twee versies: OSE en Freeware. De bronnen van de Freeware-versie zijn niet publiekelijk beschikbaar, maar dit wordt gecompenseerd door functionaliteit. Van de mij bekende verschillen is dit de afwezigheid in de OSE-versie USB-ondersteuning, beperkingen bij het werken met het netwerk, grafische versnelling wordt niet ondersteund (het geeft trouwens een zeer behoorlijke toename van de snelheid van de virtuele machine). VirtualBox is ideaal voor de eenvoudigste implementatie, omdat... stelt u in staat snel een werkende virtuele machine te krijgen zonder onnodige bewegingen en een zorgvuldige bestudering van de handleiding. Een leuke functie was ondersteuning voor het werken vanaf de console, waardoor je het gebruik van grafische add-ons kunt vermijden en dienovereenkomstig de extra belasting van de hostmachine wegneemt. Voor beginnende ‘thuisvirtualizers’ zou ik deze optie aanbevelen. Persoonlijk gebruik ik het nog steeds op mijn persoonlijke laptop om snel een testomgeving op te zetten, maar ook om in Windows te werken (Ubuntu is daar al lang gevestigd als hoofdsysteem). Volgens subjectieve gevoelens werkt VirtualBox veel sneller dan VMWare Workstation en neemt het minder ruimte in beslag, zowel op de schijf als in het geheugen. Voor elke machine is een apart venster toegewezen, en als de stuurprogramma's in het gastsysteem zijn geïnstalleerd (out of the box), is het mogelijk om ze te integreren in de hostdesktop, wat erg handig is en waarmee u taken kunt verdelen over verschillende virtuele desktops.
QEMU is een zeer krachtig iets. Maar toen ik eraan terugdacht, lette ik al op kernelgebaseerde virtualisatie en informatie over Xen en KVM, dus ik maakte niet echt kennis met pure QEMU.
Xen is een ideaal systeem voor virtualisatie. Maar het heeft een heel belangrijk nadeel: het gastsysteem moet van tevoren worden voorbereid.
KVM, gebaseerd op QEMU, is bijna net zo snel als Xen, maar heeft flexibelere functionaliteit en alle kracht van QEMU-instellingen (hoewel het meeste van wat ik nodig had in VirtualBOX zat). Beide opties, Xen en KVM, zijn in alle moderne distributies geïmplementeerd en vereisen geen serieuze inspanning om te gebruiken. Maar er is een fundamenteel verschil tussen beide, dat verder zal worden besproken.

— het is noodzakelijk om verschillende softwareplatforms op virtuele machines te kunnen reproduceren.

Ondanks de beschikbaarheid van VMWare- en VirtualBOX-producten in dit opzicht, weigerde ik ze zelfs eerder te gebruiken, dus ik zal ze niet overwegen... Maar met betrekking tot Xen en KVM zal ik wat gedetailleerder beschrijven, omdat Ik was zelf heel lang op zoek naar informatie.
Xen staat niet toe dat je andere systemen draait dan het hostsysteem!!!, of beter gezegd, systemen die niet van tevoren zijn voorbereid op het werken in een virtuele omgeving. En helaas (of misschien gelukkig) kunnen Windows-distributies niet op deze manier worden verwerkt. Wat mij niet beviel, want uiteindelijk viel de keuze op de mogelijkheid om KVM te gebruiken, waarvoor het niet nodig is om het gastsysteem vooraf klaar te maken.

Dus kort de redenen om voor KVM te kiezen:

1. De implementatie is out-of-the-box beschikbaar in elke grote distributie;
2. Geïmplementeerd op basis van de Linux-kernel, daarom hoge snelheid;
3. Gebruikt door giganten als RedHat en Ubuntu, wat wijst op een hoge stabiliteit en flexibiliteit;
4. Er zijn geen aanvullende manipulaties met het gastsysteem vereist voor installatie op een virtuele machine.

3. Hoe ik het deed op Debian.
Hierna volgt een meer technische beschrijving, waarin stap voor stap wordt beschreven hoe ik mijn server heb gemaakt, die gemakkelijk een tiental virtuele servers aankan.
Ondanks het feit dat mijn favoriete distributie Ubuntu is, uiteindelijk onder basissysteem Er werd voor Debian gekozen. In het kader van het artikel zal ik de subtiliteiten, wat en hoe niet uitleggen, maar op de desktop gebruik ik nog steeds het liefst Ubuntu. De meeste instructies voor Ubuntu en Debian zijn relevant voor beide opties, dus bij het instellen heb ik beide gebruikt.
Laten we dus beginnen met het instellen van de server.
Laten we de Debian-distributie nemen. Om niet te veel later te downloaden en meteen een nieuw systeem te krijgen, heb ik de netinstall-optie genomen, waarmee ik alleen de optie “Standaardsysteem” heb geïnstalleerd, meer hebben we niet nodig; Ik gebruik trouwens de 64-bit editie om ondersteuning te krijgen meer RAM (>3GB) zonder oplossingen of trucs (de 32-bits serverkernel van de Ubuntu-distributie ondersteunt bijvoorbeeld meer dan 3GB, maar alleen als deze mogelijkheid beschikbaar is in de chipset).
Ik gebruik onder systeempartities(“/”, “/home”, swap) IDE-harde schijf, om geen problemen te hebben met het systeem wanneer geïnstalleerd op een RAID-array (en die zijn er enkele). Tijdens de installatie maak ik meteen RAID-1 op basis van twee harde schijven SATA-schijven om een ​​grotere gegevensbeveiliging te bereiken (basisinformatie wordt erop opgeslagen). Als u in de toekomst met een softwarematige RAID-array wilt werken, moet u het hulpprogramma mdadm gebruiken.
Ik retoucheer het nieuw geïnstalleerde systeem een ​​beetje. Eerst installeer ik ssh zodat ik de systeemeenheid onmiddellijk kan opbergen en de niet langer benodigde monitor ervan kan loskoppelen: sudo apt-get install ssh Veel mensen adviseren om de poort van standaard 22 naar een andere te veranderen. Maar dit mag alleen worden gedaan als u vertrouwen heeft in uw acties en uw server rechtstreeks met internet is verbonden. Overigens moet worden vermeld dat als een niet-standaard poort wordt gebruikt, er problemen zullen ontstaan ​​​​bij het beheer op afstand van KVM-virtualisatie. Daarom verliet ik de standaardpoort, maar stuurde deze via de hardwarerouter door naar een niet-standaardpoort, toegankelijk van buitenaf.

Vervolgens schakelen we tijdsynchronisatie via internet in (ik raad het ten zeerste aan, het zal van pas komen).
sudo apt-get install ntp ntpdate
Om de temperatuur van chipsets, processor en harde schijven te controleren:
sudo apt-get install lm-sensoren hddtemp
Het hulpprogramma hddtemp werkt onmiddellijk om lm-sensoren te configureren die we na de installatie uitvoeren: sudo-sensoren detecteren en beantwoorden alle vragen bevestigend.
Het is heel gemakkelijk te gebruiken:
- ontdek de temperatuur van de processor, chipset en andere kenmerken sudo-sensoren die we zoiets krijgen als:

it8712-isa-0290
Adapter: ISA-adapter
VCore 1: +1,33 V (min = +3,54 V, max = +3,30 V) ALARM
VCore 2: +3,76 V (min = +1,39 V, max = +1,01 V) ALARM
+3,3V: +3,28 V (min = +4,00 V, max = +0,91 V) ALARM
+5V: +6,69 V (min = +3,04 V, max = +6,10 V) ALARM
+12V: +12,67 V (min = +15,23 V, max = +5,57 V) ALARM
-12V: -15,33 V (min = -0,85 V, max = -12,39 V) ALARM
-5V: +2,85 V (min = +3,06 V, max = +3,47 V) ALARM
Stdby: +5,99 V (min = +0,11 V, max = +6,37 V)
Vbat: +3,31 V
ventilator1: 2922 RPM (min = 3260 RPM, div = 2)
ventilator2: 0 RPM (min = 5400 RPM, div = 2) ALARM
ventilator3: 0 RPM (min = 2732 RPM, div = 2) ALARM
M/B Temp: +44,0°C (laag = -73,0°C, hoog = -49,0°C) sensor = transistor
CPU-temperatuur: +32,0°C (laag = -65,0°C, hoog = -9,0°C) sensor = transistor
Temp3: +128,0°C (laag = +23,0°C, hoog = -66,0°C) sensor = uitgeschakeld
cpu0_vid: +0,000 V

— ontdek de temperatuur 1 harde schijf SATA - sudo hddtemp /dev/sda we krijgen zoiets als:

/dev/sda: WDC WD1001FALS-00J7B0: 33°C

Voor verder werk Ik raad aan om een ​​DHCP-server van derden aan te schaffen en een bridge-interface op onze virtualisatieserver in te stellen.
Laten we de benodigde hulpprogramma's installeren: sudo apt-get install bridge-utils
Ik gebruik mijn router als DHCP-server en heb de bridge-interface gemaakt volgens de instructies. Dezelfde instructies vertellen u hoe u standaard een virtuele KVM-machine kunt maken met behulp van deze verbindingsmethode. Om het opnieuw opstarten te versnellen (helemaal geen kritieke situatie als de server 24/7 aan staat), raad ik u aan om vooraf een statisch adres voor de interface op te geven, zelfs als DHCP beschikbaar is.

En het beste is het installeren van KVM-modules en handige hulpprogramma's. Laten we de huidige gebruiker onmiddellijk aan de juiste groep toevoegen om deze beschikbaar te maken voor het gebruik van KVM. Een beschrijving van het gebruik van de hulpprogramma's vindt u in de reeds genoemde handleidingen. sudo aptitude install kvm libvirt-bin virtinst virt-top python-virtinst
sudo adduser softovick libvirt Je kunt het zelfs meteen gebruiken. Ik zie geen enkel nut in het beschrijven van alle commando's; daar is een manpagina voor. Maar ik zal je laten zien hoe ik een virtuele machine maak:
voor Linux virt-install -n linux -r 512 -f linux.img -s 15 -c image.iso --accelerate --vnc --vncport=5900 --noautoconsole --os-type=linux --os-variant =algemeen26
voor Windows virt-install -n windows -r 512 -f windows.img -s 15 -c image.iso --accelerate --vnc --vncport=5901 --noautoconsole --os-type=windows --os-variant =win2k3 --noacpi Hierna kan de verdere voortgang van de installatie en het scherm van de gastmachine worden gecontroleerd door via een VNC-client verbinding te maken met de server op poort 5900 en 5901 (ik raad aan om vooraf voor elke machine de VNC-poort te definiëren zodat het gemakkelijk is om verbinding te maken). Er zijn verschillende andere handige opties, ik gebruik ze niet alleen omdat ik de noodzaak ervan niet ben tegengekomen.

En nog een aanraking, maar niet de laatste. Ik ben er nog niet achter hoe ik verbinding kan maken met het gastsysteem, de mogelijkheid om tijdens de raid iets rechtstreeks naar een fysieke partitie of map te schrijven, hoewel ik het heb geprobeerd. Daarom maak ik in het geval van Linux verbinding met de gegevens op de server via nfs, en in het geval van Windows via Samba. Het instellen van Samba is vrij triviaal; installeer sudo aptitude install samba en bewerk het configuratiebestand /etc/samba/smb.conf zodat het bij uw taken past. Maar het installeren en configureren van nfs is niet geheel triviaal. Ik gebruik deze installatieoptie, waarmee ik verbinding kan maken de benodigde mappen vanaf elk lokaal netwerk IP-adres (type 192.168.10.*): sudo aptitude install nfs-kernel-server portmap
perl -pi -e "s/^OPTIONS/#OPTIONS/" /etc/default/portmap
echo "poortkaart: 192.168.10." >> /etc/hosts.allow
/etc/init.d/portmap opnieuw opstarten
echo "/media/raid 192.168.10.0/255.255.255.0(rw,no_root_squash,subtree_check)" >> /etc/exports
/etc/init.d/nfs-kernel-server opnieuw laden
Na de bovenstaande stappen is het voldoende om dit op het gastsysteem te doen:
sudo mount server:/media/raid local_folder
Indien nodig kunt u dit inschakelen automatische montage bij het laden corrigeert u het configuratiebestand /etc/fstab en voegt u een regel toe als:
virtual:/media/raid /media/raid nfs standaard 0 2
Over het algemeen is de installatie van onze virtualisatieserver voltooid. Je kunt het zowel in de console beheren als met behulp van grafische tools virsh of virtuele manager.

P.S.:
Enkele nuttige tips:
1. Als u een specifieke VNC-poort voor de gastmachine hebt opgegeven, kunt u via Virtual Manager de grafische console niet automatisch starten.
2. Virtual Manager kan geen verbinding maken als u dit heeft overschreven ssh-poort. Om precies te zijn, dit zal een lang en moeizaam begrip vereisen.
3. Zorg ervoor dat u de --noacpi-modus gebruikt voor de Windows Server-gast, zodat deze normaal wordt geïnstalleerd.
4. Stel de energiebesparende modus op gastsystemen zorgvuldig in; schakel in geen geval het scherm uit, anders kunt u later geen verbinding maken via VNC.
5. Als u machines op afstand wilt afsluiten en opnieuw wilt opstarten via Virtual Manager, schakel dan de schermbeveiliging uit, omdat het blokkeert het energiebeheer.

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 word ik geconfronteerd met het probleem van de huur goede ober met een grote hoeveelheid 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. gastheer aan goede klier brengt een aantal virtuele servers op, 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 ondersteunen Intel-gebaseerd VT/AMD SVM, voer 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 grafische schil systeem, dan 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 consoleversie van installatie en configuratie 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, 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 houd iso-afbeeldingen Besturingssysteem 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

Al deze parameters vertalen naar " menselijke taal", het blijkt dat we een virtuele machine maken met Ubuntu 16.04 OS, 1024 MB RAM, 1 processor, een standaard netwerkkaart (de virtuele machine heeft toegang tot internet alsof het NAT is), 20 GB HDD.

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. Dat kan maak opnieuw verbinding 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 ssh geconfigureerd port forwarding 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 scherm weergegeven standaard raam groeten voor het starten van de Ubuntu-installatie:

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:

Bewerken netwerkinstellingen hypervisor:

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.

Hypervisors, virtualisatie en cloud

KVM-hypervisoranalyse

Inhoud serie:

Over deze serie artikelen

Deze cyclus begint met algemene informatie over de soorten hypervisors en systeemvirtualisatie, en kijkt vervolgens naar de kenmerken van de vijf hypervisors, hun installatieprocessen en de beheerproblemen die zich kunnen voordoen.

U kunt deze reeks artikelen gebruiken als uitgangspunt om de rol van de hypervisor in cloudvirtualisatie te begrijpen, of om afzonderlijke artikelen te verkennen die u zullen helpen bepalen welke hypervisor het meest geschikt is voor specifieke cloudworkloads.

Wat u moet weten om aan de slag te gaan

Kernel-gebaseerde Virtual Machine (KVM) is een complete platformspecifieke virtualisatieoplossing voor Linux op x86-processors met virtualisatie-uitbreidingen (Intel VT of AMD-V). Beperkte paravirtualisatie-ondersteuning voor Linux en Windows is ook beschikbaar voor gasten in de vorm van een paravirtuele netwerkdriver.

Momenteel communiceert KVM met de kernel via een laadbare kernelmodule. Er wordt een verscheidenheid aan gastbesturingssystemen ondersteund, zoals Linux, BSD, Solaris, Windows, Haiku, ReactOS en AROS Research Operating System. Een aangepaste versie van KVM (qemu) kan op Mac OS X draaien.

Opmerking: KVM voert geen zelfemulatie uit; in plaats daarvan gebruikt een programma dat in de gebruikersruimte draait de /dev/kvm-interface om de adresruimte van de virtuele gastserver te configureren, de gesimuleerde I/O-bronnen te nemen en zijn afbeelding toe te wijzen aan de host-image.

De KVM-architectuur wordt getoond in Figuur 1.

Figuur 1. KVM-architectuur
Paravirtualisatie

Paravirtualisatie is een virtualisatietechniek die virtuele machines voorziet van een software-interface die vergelijkbaar is met, maar niet identiek is aan de onderliggende hardware. Het doel van deze aangepaste interface is om de tijd te verminderen die het gastbesturingssysteem besteedt aan het uitvoeren van bewerkingen die veel moeilijker uit te voeren zijn in een virtuele omgeving dan in een niet-gevirtualiseerde omgeving.

Er zijn speciale "hooks" waarmee de gast- en hostsystemen de oplossing van deze complexe taken kunnen aanvragen en bevestigen die in een virtuele omgeving zouden kunnen worden uitgevoerd, maar in een veel langzamer tempo.

In de KVM-architectuur draait de virtuele machine als een normaal Linux-proces, gepland door de standaard Linux-planner. In feite verschijnt elke virtuele processor als een normaal Linux-proces. Hierdoor kan KVM profiteren van alle functies van de Linux-kernel.

Apparaatemulatie wordt bestuurd door een aangepaste versie van qemu, die emulatie biedt van het BIOS, de PCI-bus, de USB-bus, evenals een standaardset apparaten zoals schijfcontrollers IDE en SCSI, netwerkkaarten enz.

Functionaliteit

De belangrijkste kenmerken van KVM worden hieronder vermeld.

Veiligheid

Omdat de virtuele machine is geïmplementeerd als een Linux-proces, gebruikt deze het standaard Linux-beveiligingsmodel om bronnen te isoleren en te beheren. Met SELinux (Security-Enhanced Linux) voegt de Linux-kernel verplichte toegangscontroles, gelaagde en rijke beveiligingscontroles toe, en beheert het beveiligingsbeleid. SELinux biedt strikte bronisolatie en beperkt de mobiliteit van processen die in de Linux-kernel draaien.

Het SVirt-project is een inspanning van de gemeenschap om de beveiligingsfuncties en virtualisatie van Mandatory Access Control (MAC) te integreren Linux-gebaseerd(KVM) - bouwt voort op SELinux om een ​​infrastructuur te bieden waarmee een beheerder isolatiebeleid voor virtuele machines kan definiëren. SVirt is ontworpen om ervoor te zorgen dat bronnen van virtuele machines niet toegankelijk zijn voor andere processen (of virtuele machines); de beheerder kan dit beleid uitbreiden door gedetailleerde machtigingen te definiëren; bijvoorbeeld om een ​​groep virtuele machines dezelfde bronnen te laten delen.

Geheugenbeheer

KVM erft krachtige geheugenbeheerfuncties van Linux. Het geheugen van een virtuele machine wordt op dezelfde manier opgeslagen als het geheugen van elk ander Linux-proces en kan worden vervangen en gekopieerd grote pagina's om de prestaties te verbeteren, samengevat of opgeslagen in een bestand op schijf. Dankzij ondersteuning voor NUMA-technologie (Non-Uniform Memory Access, een geheugenarchitectuur voor systemen met meerdere processors) kunnen virtuele machines efficiënt toegang krijgen tot grote hoeveelheden geheugen.

KVM ondersteunt de nieuwste geheugenvirtualisatiefuncties van processorfabrikanten, zoals Intel Extended Page Table (EPT) en AMD Rapid Virtualization Indexing (RVI), om de processorbelasting te minimaliseren en hoge prestaties te bereiken. bandbreedte.

Het delen van geheugenpagina's wordt ondersteund met behulp van de kernelfunctie Kernel Same-page Merging (KSM). KSM scant het geheugen van elke virtuele machine en als sommige geheugenpagina's van de virtuele machines identiek zijn, combineert het deze tot één pagina, die gemeenschappelijk wordt voor deze virtuele machines en in één kopie wordt opgeslagen. Als een gast deze gedeelde pagina probeert te wijzigen, krijgt deze een eigen kopie.

Gegevensopslag

KVM kan elk door Linux ondersteund medium gebruiken om afbeeldingen van virtuele machines op te slaan, inclusief lokale schijven Met IDE-interfaces, SCSI en SATA, Netwerk Bijgevoegde opslag(NAS), inclusief NFS en SAMBA/CIFS, of SAN met iSCSI-ondersteuning en Fibre-kanaal. Multi-threaded I/O kan worden gebruikt om de opslagdoorvoer en redundantie te verbeteren.

Nogmaals, aangezien KVM onderdeel is van de Linux-kernel, kan er gebruik worden gemaakt van bewezen en betrouwbare opslaginfrastructuur, met ondersteuning van alle toonaangevende leveranciers; Het scala aan opslagfuncties heeft zich in veel productie-installaties bewezen.

KVM ondersteunt afbeeldingen van virtuele machines op gedistribueerde bestandssystemen zoals Global Bestandssysteem(GFS2), zodat ze kunnen worden gedeeld over meerdere hosts of kunnen worden samengevoegd met behulp van logische volumes. Steun fijnafstemming (thin provisioning) van schijfkopieën stelt u in staat het gebruik van gegevensopslagbronnen te optimaliseren, door ze niet allemaal vooraf in één keer toe te wijzen, maar alleen wanneer de virtuele machine dit nodig heeft. KVM's eigen schijfformaat, QCOW2, ondersteunt snapshots en biedt meerdere niveaus van snapshots, compressie en encryptie.

Live migratie

KVM ondersteunt livemigratie, waardoor draaiende virtuele machines tussen fysieke hosts kunnen bewegen zonder de service te onderbreken. Livemigratie is transparant voor gebruikers: de virtuele machine blijft ingeschakeld, netwerkverbindingen blijven actief, en aangepaste toepassingen blijven draaien terwijl de virtuele machine naar een nieuwe fysieke server wordt verplaatst.

Naast livemigratie ondersteunt KVM het opslaan van een kopie van de huidige status van de virtuele machine op schijf, zodat u deze kunt opslaan en later kunt herstellen.

Apparaatstuurprogramma's

KVM ondersteunt hybride virtualisatie wanneer para-gevirtualiseerde stuurprogramma's worden geïnstalleerd in het gastbesturingssysteem, waardoor virtuele machines een geoptimaliseerde I/O-interface kunnen gebruiken in plaats van geëmuleerde apparaten. hoge prestaties I/O voor netwerk- en blokapparaten.

De KVM-hypervisor maakt gebruik van de VirtIO-standaard, ontwikkeld door IBM en Red Hat samen met de Linux-gemeenschap voor paragevirtualiseerde stuurprogramma's; Het is een hypervisor-onafhankelijke interface voor het maken van apparaatstuurprogramma's, waardoor meerdere hypervisors dezelfde set apparaatstuurprogramma's kunnen delen, waardoor de interoperabiliteit tussen gasten wordt verbeterd.

VirtIO-stuurprogramma's zijn inbegrepen moderne versies Linux-kernels (de nieuwste is 2.6.25) zijn opgenomen in Red Hat Enterprise Linux 4.8+ en 5.3+, en zijn ook beschikbaar voor Red Hat Enterprise Linux 3. Red Hat heeft VirtIO-stuurprogramma's ontwikkeld voor Microsoft Windows-gastbesturingssystemen die netwerk- en schijfbewerkingen I/O; Deze stuurprogramma's zijn gecertificeerd door het certificeringsprogramma van Microsoft Windows Hardware Quality Labs (WHQL).

Prestaties en schaalbaarheid

KVM erft de prestaties en schaalbaarheid van Linux en ondersteunt virtuele machines met 16 virtuele processors en 256 GB RAM, evenals hostsystemen met 256 cores en meer dan 1 TB RAM. Het kan bieden:

  • 95-135% prestatie vergeleken met bare metal in echte bedrijfsapplicaties zoals SAP, Oracle, LAMP en Microsoft Exchange;
  • meer dan een miljoen berichten per seconde en een latentie van minder dan 200 microseconden in virtuele machines die op een standaardserver draaien;
  • Maximale consolidatieniveaus met meer dan 600 virtuele machines waarop bedrijfsapplicaties op één server draaien.

Dit betekent dat KVM de meest veeleisende workloads kan virtualiseren.

Virtualisatie implementeren

Het implementeren van KVM is een vrij complex proces, vol met speciale configuratievereisten, dus zie de sectie voor meer informatie.

Virtuele machines beheren

Er zijn verschillende virtuele machinebeheerders. Onder hen:

  • Univention virtuele manager;
  • qemu/KVM: draait rechtstreeks vanaf de opdrachtregel op de KVM-machine;
  • Virsh: een minimale shell voor het beheren van virtuele machines;
  • Virtual Machine Manager: ook wel bekend als virt-manager, een gebruikersinterface voor het beheren van virtuele machines.

KVM selecteren

Pluspunten:

  • ondanks het feit dat KVM een relatief jonge hypervisor is, is het een compacte module die, in combinatie met de Linux-kernel, implementatiegemak biedt en tegelijkertijd ondersteuning biedt voor Linux-zwaargewichten;
  • KVM is flexibel; Omdat gastbesturingssystemen communiceren met een hypervisor die in de Linux-kernel is geïntegreerd, hebben ze in alle gevallen rechtstreeks toegang tot de hardware zonder dat het gevirtualiseerde besturingssysteem hoeft te worden aangepast. Dit maakt KVM een snellere oplossing voor virtuele machines;
  • KVM-patches zijn compatibel met de Linux-kernel. KVM is geïmplementeerd in de Linux-kernel zelf, waardoor het eenvoudiger wordt om virtualisatieprocessen te beheren.

Nadelen:

  • Er zijn geen krachtige tools voor het beheer van de server en virtuele KVM-machines;
  • KVM-ondersteuning moet worden verbeterd virtuele netwerken en virtuele opslagsystemen, het versterken van de beveiliging, het verbeteren van de betrouwbaarheid en veerkracht, energiebeheer, HPC/real-time ondersteuning, schaalbaarheid van virtuele processors, compatibiliteit tussen leveranciers, VM-portabiliteit en het creëren van een ecosysteem voor cloudservices.