Sådan bruger du KVM fra kommandolinjen på Debian eller Ubuntu

Der er forskellige måder at administrere virtuelle maskiner (VM'er) på KVM hypervisor. For eksempel er virt-manager et populært GUI-baseret front-end til VM-styring. Men hvis du gerne vil bruge KVM på en hovedløs server, vil GUI-baserede løsninger ikke være ideelle. Faktisk kan du oprette og styre KVM VM'er udelukkende fra kommandolinjen ved hjælp af kvm-kommandolinjeindpakningsskript. Alternativt kan du bruge virsh som er en brugervenlig kommandolinje brugergrænseflade til styring af gæst VM'er. Under virsh kommunikerer den med libvirtd service, som kan styre flere forskellige hypervisorer, herunder KVM, Xen, QEMU, LXC og OpenVZ.

En kommandolinjestyringsinterface som virsh er også nyttig, når du vil "automatisere" tilvejebringelsen og styringen af ​​VM'er. Det faktum, at virsh understøtter flere hypervisorer betyder, at du kan styre forskellige hypervisorer via samme virsh-grænseflade.

I denne tutorial vil jeg demonstrere hvordan man kører KVM fra kommandolinjen ved at bruge virsh på Debian eller Ubuntu.

Trin 1: Kontroller hardware virtualiseringsstøtte

Som et første trin skal du verificere, at værts CPU'en er udstyret med hardwarevirtualiseringsudvidelser (f.eks. Intel VT eller AMD-V), som er nødvendige for KVM. Følgende kommando vil gøre.

$ egrep '(vmx | svm)' -farve / proc / cpuinfo

Hvis output ikke indeholder vmx eller svm flag, betyder det, at værts CPU ikke har hardware virtualisering support. Således kan du ikke bruge KVM på værten. Efter at have verificeret, at værts CPU'en kommer med vmx eller svm, skal du fortsætte med at installere KVM næste.

For KVM er det ikke nødvendigt at køre en 64-bit kerne på KVM-værten, men generelt anbefales det.

Trin to: Installer KVM

Brug apt-get, installer KVM og relaterede brugerrumsværktøjer.

$ sudo apt-get installer qemu-kvm libvirt-bin

Under installationen oprettes libvirtd gruppe (eller libvirt-qemu på Debian), og dit brugernavn bliver automatisk tilføjet til gruppen. Dette giver dig mulighed for at styre VM'er som en ikke-root-regelmæssig bruger. Du kan bekræfte det ved at bruge id-kommando, som vil vise dit gruppe-id:

$ id <din-brugerID>

Hvis libvirtd (eller libvirt-qemu) af en eller anden grund ikke findes i din groupID-liste, kan du manuelt føje dig til gruppen som følger.

På Ubuntu:

$ sudo adduser [youruserID] libvirtd

På Debian:

$ sudo adduser [youruserID] libvirt-qemu

Genindlæs opdateret gruppemedlemskabsinfo som følger. Når du bliver bedt om et kodeord, skal du indtaste dit login kodeord.

$ exec su -l $ USER

På dette tidspunkt skal du kunne køre virsh som en almindelig bruger. Som en prøve, prøv kommandoen nedenfor, som vil vise en liste over tilgængelige VM'er (i øjeblikket ingen). Hvis du ikke støder på en tilladelsesfejl, betyder det at alt er i orden hidtil.

$ virsh liste

 Id Navn Stat ----------------------------------------------- -----

Trin tre: Konfigurér Bridged Networking

En måde at aktivere KVM VM'er på eksterne netværk er via en Linux-bro, der er oprettet på en KVM-vært. Broen forbinder de virtuelle grænseflader af VM'er med værtsens fysiske interface, så VM'erne kan sende eller modtage trafik via den fysiske grænseflade. Dette kaldes broget netværk.

Sådan oprettes og konfigureres en Linux bro br0 til broet netværk med KVM.

Først skal du installere en nødvendig pakke, og oprette en Linux-bro fra kommandolinjen.

$ sudo apt-get install bridge-utils
$ sudo brctl addbr br0

Det næste skridt er at konfigurere Linux-broen i / etc / network / interfaces, så broen konfigureres automatisk ved opstart. For at bruge / etc / network / interfaces skal du deaktivere Network Manager på dit system (hvis du bruger det). Følg denne instruktion for at deaktivere Network Manager.

Når du har deaktiveret Network Manager, skal du konfigurere Linux bridge br0 i / etc / network / interfaces som følger.

#auto eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp fra bridge_fd 0 bridge_maxwait 0

I ovenstående antager jeg, at eth0 er den primære netværksgrænseflade, der er forbundet til eksterne netværk. Jeg antager også, at eth0 får sin IP-adresse via DHCP. Bemærk, at der ikke er nogen konfiguration for eth0 i / etc / network / interface. Linux-broen BR0 tager op i konfigurationen af ​​eth0, da eth0 er enslaveret til broen br0.

Genstart netværkstjenesten, og kontroller, at Linux-broen er konfigureret med succes. Hvis det lykkes, skal br0 tildeles eth0s DHCP IP-adresse, og eth0 skal ikke have nogen tildelt IP-adresse.

$ sudo /etc/init.d/networking genstart
$ ifconfig

Hvis eth0 af en eller anden grund bevarer den IP-adresse, der er tildelt til br0, skal du muligvis eksplicit fjerne IP-adressen fra eth0.

Trin fire: Opret en VM fra kommandolinjen

Med KVM gemmes konfigurationen af ​​en VM i en domæne XML-fil. Således er det første skridt til at oprette en VM at forberede sin domæne XML-fil.

Følgende er en prøve domæne XML-fil af en VM. Du kan tilpasse det efter behov.

<domain type = 'kvm'> <navn> alice </ name> <uuid> f5b8c05b-9-7b3211-49bd9f2e635aa </ uuid> <memory> 7 </ memory> <nuværendeMemory> 2 </ currentMemory> <vcpu > 1048576 </ vcpu> <os> <type> hvm </ type> <boot dev = 'cdrom' /> </ os> <features> <acpi /> </ features> <clock offset = 'utc' /> <on_poweroff> ødelæg </ on_poweroff> <on_reboot> genstart </ on_reboot> <on_crash> ødelæg </ on_crash> <devices> <emulator> / usr / bin / kvm </ emulator> <disk type = "fil" device = " disk "> <drivernavn =" qemu "type =" raw "/> <kildefil =" / hjem / dev / images / alice.img "/> <target dev =" vda "bus =" virtio "/> < adresse type = "pci" domæne = "1048576x1" bus = "0x0000" slot = "0x00" funktion = "0x04" /> </ disk> <disk type = "file" device = "cdrom"> <drivernavn = " qemu "type =" raw "/> <kildefil =" / hjem / dev / iso / CentOS-0-x0_6.5-minimal.iso "/> <target dev =" hdc "bus =" ide "/> <readonly / > <address type = "drive" controller = "86" bus = "64" target = "0" enhed = "1" /> </ disk> <interface type = 'bro'> <s ource bridge = 'br0' /> <mac adresse = "0: 0: A00: B00: 3: 0" /> </ interface> <controller type = "ide" index = "56"> <adressetype = "pci "domain =" 10x0 "bus =" 0x0000 "slot =" 0x00 "funktion =" 0x01 "/> </ controller> <input type = 'mouse' bus = 'ps0' /> <grafik type = 'vnc' port = '-1' autoport = "ja" listen = '2' /> <konsoltype = 'pty'> <målport = '1' /> </ console> </ devices> </ domain>

Ovenstående domæne XML-fil definerer følgende VM.

  • 1GB-hukommelse, en vCPU og en harddisk.
  • Diskbillede: /home/dev/images/alice.img.
  • Boot fra cd-rom (/home/dev/iso/CentOS-6.5-x86_64-minimal.iso).
  • Netværk: En netværksgrænseflade broget til br0
  • Fjernadgang via VNC.

UUID-strengen inden for <uuid> </ uuid> kan genereres tilfældigt. For at få en tilfældig UUID, kan du bruge uuid kommandolinje værktøj.

$ sudo apt-get install uuid
$ uuid

En anden måde at oprette en domæne XML-fil på er at dumpe domæneinformationen for en eksisterende VM som følger.

$ virsh dumpxml alice> bob.xml

Trin fem: Start VM fra kommandolinjen

Før du starter en VM, skal du oprette sit oprindelige diskbillede. For det kan du bruge qemu-img-kommandoen, som følger med qemu-kvm-pakken, du har installeret. Følgende kommando opretter 10GB-størrelse tom diskbillede af qcow2 type:

$ qemu-img create -f qcow2 /home/dev/images/alice.img 10G

Fordelen ved at bruge "qcow2" (i modsætning til "rå") som et diskbilledeformat er, at et "qcow2" -type diskbillede først er oprettet som en fuld størrelse (10GB), men vokser, når disken bliver befolket. Så det er mere pladseffektivt.

Nu er du klar til at starte en VM ved hjælp af den domæne XML-fil, du oprettede tidligere. Følgende kommando vil oprette en VM, og automatisk starte den.

$ virsh oprette alice.xml

Domæne alice oprettet fra alice.xml

BEMÆRK: Hvis du kører ovenstående kommando med en allerede oprettet VM, vil den slette VM uden advarsel. Hvis du allerede har oprettet en VM, kan du i stedet bruge følgende kommando for bare at starte VM.

$ virsh start alice.xml

Bekræft, at et nyt domæne er oprettet og startet med succes med:

$ virsh liste

 Id Navn Stat ----------------------------------------------- ----- 3 alice løber

Kontrollér også, at den virtuelle grænseflade til VM'en (f.eks. Vnet0) er tilføjet til Linux bridge br0, som du oprettede tidligere.

$ sudo brctl show

Trin seks: Fjernadgang en VM

For at få adgang til konsollen af ​​en kørende VM fjernt, kan du bruge en hvilken som helst VNC-klient.

Find først VNC-portnummeret til VM som følger.

$ sudo netstat -nap | egrep '(kvm | qemu)'

I dette eksempel er VNC-portnummeret for alice VM 5900.

Start derefter en VNC-klient, og opret forbindelse til en VNC-server, der kører på <KVM-host-IP>: 5900. I vores eksempel skal VM starte op i CentOS CD-ROM.

Administrer VM'er med virsh

Nedenstående lister almindelige anvendelser af virsh-kommando.

At oprette et nyt gæstedomæne og starte en VM:

$ virsh oprette alice.xml

For at stoppe en VM og ødelægge et gæstedomæne:

$ virsh ødelægge alice

Sådan lukkes en VM (uden at ødelægge et domæne):

$ virsh shutdown alice

Sådan suspenderer du en VM:

$ virsh suspendere alice

Sådan genoptages en suspenderet VM:

$ virsh genoptage alice

For at få adgang til login konsol for en kørende VM:

$ virsh konsol alice

Sådan autostartes en VM ved host opstart:

$ virsh autostart alice

For at få domæneinformation fra en VM:

$ virsh dominfo alice

Sådan redigeres domæne XML fra en VM:

$ virsh rediger alice

Ovennævnte vil påberåbe sig domæne XML-filen i VM'en med en standard tekstredigerer. Enhver ændring i XML vil automatisk blive valideret af libvirt for korrekthed.

Du kan også administrere VM'er fra en virsh-session. For at oprette og indtaste en ny virsh-session, skal du blot køre:

$ virsh

Ved virsh prompt kan du bruge eventuelle virsh kommandoer.

Fejlfinding

1. Jeg får fejlen under forsøget på at oprette en VM:

fejl: intern fejl: ingen understøttet arkitektur for os type 'hvm'

Du kan få denne fejl, hvis din hardware ikke har hardware virtualiseringsstøtte (f.eks. Intel VT eller AMD-V), som er nødvendig for at køre KVM. Hvis du får denne fejl, selvom din CPU leveres med Intel VT eller AMD-V, er der mulige løsninger:

Kontroller først om kvm kernel modul mangler.

$ lsmod | grep kvm

Hvis kvm kernel modul ikke er indlæst, skal du indlæse det som følger.

$ sudo modprobe kvm_intel (til Intel processor)
$ sudo modprobe kvm_amd (til AMD-processor)

Den anden løsning er at tilføje "connect qemu: /// system" argument til virsh command som følger. Dette argument kan være nødvendigt, når du bruger mere end en hypervisor (f.eks. VMware, VirtualBox) på serverhardwaren.

$ virsh-connect qemu: /// system oprette alice.xml

2. Jeg får fejlen, mens jeg prøver at få adgang til login-konsollen i min VM:

$ virsh konsol alice

fejl: intern fejl: kan ikke finde tegn enhed <null>

Denne fejl opstår, fordi du ikke har defineret en konsol enhed i VM's XML-fil. Tilføj følgende inde i afsnittet "Enhed" i XML-filen.

    <konsoltype = 'pty'> <target port = '0' /> </ console>

One Response

  1. Dan

Giv en kommentar

Dette websted bruger Akismet til at reducere spam. Lær, hvordan dine kommentardata behandles.