Når det er sagt, la oss prøve å sette opp vår egen KVM -hypervisor på en Debian 9 -server .
Ideelt sett trenger du en ren installasjon av din favoritt Linux -distribusjon på en maskin (ikke en VM) som har en ganske moderne CPU. De fleste moderne Intel CPU-er støtter VT-X-utvidelser og på samme måte AMD har sine AMD-V-utvidelser. Disse utvidelsene er "forbedringer" bygget rett inn i silisiumet til CPU -en din som muliggjør raskere og sikrere virtualisering. Du må aktivere disse utvidelsene fra hovedkortets BIOS/UEFI -meny. Henvis til hovedkorthåndboken for mer informasjon.
Hvis du ikke vil Sully din perfekt fungerende Linux -arbeidsstasjon, kan du bruke en virtuell maskin i skyen til å kjøre disse eksperimentene. Digitalocean tilbyr for eksempel virtuelle maskiner som har nestet virtualisering aktivert. Dette lar deg kjøre VM -er inne i skyverten VM (dette er kjent som nestet virtualisering). Det er klart at dette vil være en veldig ineffektiv måte å praktisk talt kjøre en hypervisor, men som et eksperiment vil det gjøre det bra. Sørg for å få minst 4 GB minne og mer enn 2 CPUer.
Når du har aktivert nevnte utvidelser, kan du bekrefte at ved å kjøre LSCPU og se etter virtualiseringsoppføringen:
$ LSCPU
.. .
Virtualisering: VT-X
.. .
Nå som vi har utvidelsene muliggjort tid til å komme videre i bunken.
Installere KVM og Qemu
KVM (eller kjernebasert virtuell maskin) består av noen få Linux-kjernemoduler som vil dra nytte av CPU-utvidelsene vi aktiverte tidligere. QEMU derimot består av en haug med brukerlandsprogrammer som gir oss emuleringsevner. Som en frittstående programvare kan QEMU brukes til å kjøre programmer fra en arkitektur, som ARM, på en annen som x86_64 og omvendt. Det kan brukes til å kjøre alt fra en enkelt binær fil til et komplett operativsystem.
Vi vil selvfølgelig bruke den bare til å virtualisere x86_64 operativsystemer på x86_64 -plattformen. Og for det trenger vi bare en enkelt pakke:
$ sudo apt install qemu-kvm
Du kan bekrefte at pakken har lastet alle nødvendige moduler, ved å kjøre:
$ lsmod | Grep KVM
KVM_Intel 200704 0
KVM 598016 1 KVM_Intel
Irqbypass 16384 1 KVM
Det er alt du trenger, teoretisk. Men du vil snart innse at det er praktisk. Virtuelle maskiner er enormt sammensatte, og vi krever programvareinnpakning for å administrere alle de forskjellige kravene som nettverk, filsystemstyring osv. På en ganske automatisert (og skalerbar måte). For å gjøre dette trenger vi Libvirt Virtualization Library/Daemon.
Installere libvirt
Libvirt er en viktig del av virtualiseringsstabelen din. Libvirtd Daemon driver virtualiseringsrelaterte tjenester i bakgrunnen. Tjenester som lytter til forespørsler som "Opprett en VM", "Ødelegg en VM", "Opprett et nettverk" osv.
Libvirt er veldig generalisert og det kan brukes til å administrere KVM -gjester, LXC -containere og Xen Virtualization Stack. Vi vil bare fokusere på libvirt for KVM -gjester for nå. Libvirtd utsetter et API som kan konsumeres av GUI-applikasjoner som virt-manager eller ovirt eller kommandolinjeverktøy som virtinstall, virsh, etc. Vi kan skrive til og med våre egne tilpassede kunder som bruker samme standard API. Vi vil bruke kommandolinjeverktøyene, som Virsh og Virt-Install, for å holde ting standardisert.
La oss installere alle disse verktøyene:
$ Apt Installer Libvirt-Clients Libvirt-Daemon-System Virtinst
Vi trenger også en annen pakke libguestfs-tools, for å hjelpe oss med å redigere eller endre gjestene VMs harddisker og filsystemer.
Flott! Nå har vi installert hele stabelen og vet hvordan arkitekturen er lagt ut. For å bruke libvirt (og relaterte verktøy), legg brukeren din til Libvirt-Qemu og Libvirt-grupper.
$ sudo usermod -ag libvirt
$ sudo usermod -ag libvirt -qemu
Eller kjør kommandoene som rotbruker.
Virsh og starter standardnettverket
Virsh -kommandolinjeverktøyet er noe du vil bruke mye, når du administrerer VM -ene. Du kan ganske enkelt skrive inn Virsh og slippe inn i Virsh -kommandolinjegrensesnittet, eller skriv Virsh [Alternativer] fra ditt vanlige skall. Gå gjennom utgangen av Virsh -hjelp når du sitter fast med litt VM -relatert operasjon.
Den første VIRSH -kommandoen vi vil bruke vil påkalle standardnettverket som en VM kan koble til:
$ virsh net-autostart standard
$ virsh net-start standard
Dette starter standardnettverket og vil sørge for at det startes automatisk når verten starter på nytt. For å sjekke detaljene om dette standardnettverket, bruk kommandoen:
$ virsh net-dumpxml standardmisligholde 3D723DC6-49A4-4F73-BF6D-623D6B46B099
XML -filen kan vise deg utvalget av mulige IP -adresser og hvordan de vil kommunisere med omverdenen. I utgangspunktet vil trafikken komme til dem via en NAT, og de vil ikke være en del av vertens eksterne nettverk. Du kan bruke bronettverk for å eksponere hver VM for vertsmaskinens LAN.
Å starte en virtuell maskin
For å starte en virtuell maskin trenger vi et installasjonsmedium (som installasjon ISO for et hvilket som helst operativsystem) og hvor mange CPU -er og hvor mye minne som må tildeles VM, og hvis det trenger VNC. Dette trinnet er der du virkelig kan sette pris på en GUI-installasjonsprogram som Virt-Manager, men vi vil gjøre det ved å bruke en ganske kompleks virtinstalleringskommando.
Jeg liker å holde alle oppstartsmediene mine på/var/lib/libvirt/boot og alle VM -ene og deres virtuelle harddisk på/var/lib/libvirt/bilder (standardplassering) Dette forenkler organisasjonen.
$ cd/var/lib/libvirt/boot
$ wget http: // utgivelser.Ubuntu.com/18.04.2/Ubuntu-18.04.2-Desktop-AMD64.ISO
Kommandoen over henter Ubuntu Desktop ISO, du kan like gjerne få centos eller annen distribusjon som du ønsker.
For å lage en ny VM og for å starte den på kjøring:
$ virtinstall-V-type KVM \
--Nevn myVM \
--minne 2048 --vcpus = 2 \
--CDROM/var/lib/libvirt/boot/ubuntu-18.04.2-Desktop-AMD64.ISO \
--diskstørrelse = 40 \
--grafikk VNC, lytt = 0.0.0.0, port = 5900 \
--Noautoconsole
Kommandoen ovenfor er faktisk komplisert. Jeg foreslår at du lagrer disse kommandoene i tekstfiler og kjører de som kjørbare skript når du oppretter en ny VM. De fleste av parametrene som virt-type og virt-navn er ganske selvforklarende. De er bare kjedelige å skrive ned.
Det siste alternativet for VNC -skjerm starter en VNC -server og vil tillate deg å ha konsolltilgang til VM -en din eksternt, ved å koble til vertens port 5900. Åpne en VNC -klient på skrivebordet ditt og gå til KVM -vertens IP på Port 5900. Forsikre deg om at du kommer til vertens IP og ikke VMs IP. VNC -en din vil koble seg til videoutgangen til VM, og du kan fortsette med installasjonen.
Hvor du skal neste?
Herfra kan du prøve å pause, stoppe og slette VMS. Du kan også endre den underliggende infrastrukturen ved å legge til bassenger for lagring og konfigurere bronettverk. Alle konfigurasjonsfilene, for individuelle VM -er, nettverksgrensesnitt og lagringsbassenger er lagret på/etc/libvirt/og/etc/libvirt/qemu.
Noen ganger må du fysisk slette harddiskfilene som er lagret på/lib/libvirt/bilder selv etter å ha fjernet VM fra libvirt. For å automatisere ting videre, prøv å importere QCOW2 -bilder som de fleste Linux -distribusjoner som Ubuntu og Centos. Disse har OS forhåndsinstallert i seg.
Å sette opp dette er ingen steder så enkelt som å sette opp VirtualBox og grunnen bak dette er mangfoldig. Det meste av stabelen er komplisert fordi den er designet for å være modulær og svært skalerbar. Det gjør ingen forutsetninger om hvor du kjører VM. Miljøet kan være et personlig skrivebord eller et datasenter. Å jobbe med en GUI kan bidra til å redusere denne kompleksiteten til en viss grad. Imidlertid er disse systemene designet for å jobbe med et REST API for å koble til organisasjonens faktureringssystemer, overvåkningssystemer osv. De blir nesten aldri berørt av et menneske etter å ha blitt utplassert.
Når det er sagt, er automatisering navnet på spillet med Libvirt og Qemu-KVM. Les gjennom den offisielle dokumentasjonen og skriv ditt eget kule manus for å snurre opp en flåte av VM -er og gi oss beskjed hvis du fant denne opplæringen nyttig.