Med det sagt, lad os prøve at konfigurere vores egen KVM-hypervisor på en Debian 9-server .
Aktivering af VT-x- eller AMD-V-udvidelser
Ideelt set har du brug for en ren installation af din foretrukne Linux-distribution på en maskine (ikke en VM), der har en ret moderne CPU. De fleste moderne Intel-CPU'er understøtter VT-x-udvidelser, og på samme måde har AMD sine AMD-V-udvidelser. Disse udvidelser er “forbedringer” indbygget lige i silicium på din CPU, som muliggør hurtigere og mere sikker virtualisering. Du skal aktivere disse udvidelser inde fra dit bundbords BIOS / UEFI-menu. Se dit bundkort manual for mere information.
Hvis du ikke vil ødelægge din perfekt fungerende Linux-arbejdsstation, kan du bruge en virtuel maskine i skyen til at køre disse eksperimenter. DigitalOcean tilbyder for eksempel virtuelle maskiner, som har aktiveret indlejret virtualisering. Dette giver dig mulighed for at køre virtuelle computere inde i din cloud-hostede virtuelle enhed (dette kaldes indlejret virtualisering). Dette vil naturligvis være en meget ineffektiv måde at praktisk talt køre en hypervisor på, men som et eksperiment vil det klare sig fint. Sørg for at få mindst 4 GB hukommelse og mere end 2 CPU'er.
Når du har aktiveret de nævnte udvidelser, kan du bekræfte det ved at køre lscpu og se efter posten Virtualisering:
$ lscpu.. .
Virtualisering: VT-x
.. .
Nu hvor vi har udvidelserne aktiveret tid til at bevæge os længere op i stakken.
Installation af KVM og QEMU
KVM (eller Kernel-Based Virtual Machine) består af et par Linux-kernemoduler, der vil drage fordel af de CPU-udvidelser, vi tidligere har aktiveret. QEMU på den anden side består af en masse brugerlandsprogrammer, der giver os emuleringsfunktioner. Som en selvstændig software kan QEMU bruges til at køre programmer fra en arkitektur, som ARM, på en anden som x86_64 og omvendt. Det kan bruges til at køre alt fra en enkelt binær fil til et komplet operativsystem.
Vi bruger selvfølgelig kun til virtualisering af x86_64-operativsystemer på x86_64-platformen. Og til det har vi brug for kun en enkelt pakke:
$ sudo apt installer qemu-kvmDu kan kontrollere, at pakken har indlæst alle de krævede moduler ved at køre:
$ lsmod | grep kvmkvm_intel 200704 0
kvm 598016 1 kvm_intel
irqbypass 16384 1 kvm
Det er alt hvad du behøver, teoretisk. Men du vil snart indse, at det er praktisk. Virtuelle maskiner er enormt komplekse, og vi kræver softwareindpakning til at håndtere alle de forskellige krav som netværk, filsystemstyring osv. På en ret automatiseret (og skalerbar måde). For at gøre dette har vi brug for Libvirt virtualiseringsbibliotek / dæmon.
Installation af Libvirt
Libvirt er en vigtig del af din virtualiseringsstak. Libvirtd-dæmonen kører virtualiseringsrelaterede tjenester i baggrunden. Tjenester, der lytter til anmodninger som "Opret en VM", "Ødelæg en VM", "Opret et netværk" osv. Og udfører dem i dem ved hjælp af de grundlæggende Linux-hjælpeprogrammer som qemu-binære filer, iptables osv.
Libvirt er meget generaliseret, og det kan bruges til at styre KVM-gæster, LXC-containere og Xen-virtualiseringsstak. Vi vil bare fokusere på Libvirt for KVM-gæster indtil videre. Libvirtd udsætter en API, der kan forbruges af GUI-applikationer som virt-manager eller oVirt eller kommandolinjeværktøjer som virt-install, virsh osv. Vi kan selv skrive vores egne brugerdefinerede klienter, der bruger den samme standard API. Vi bruger kommandolinjeværktøjerne, som virsh og virt-install, for at holde tingene standardiserede.
Lad os installere alle disse værktøjer:
$ apt install libvirt-clients libvirt-daemon-system virtinstVi har også brug for en anden pakke libguestfs-tools, der hjælper os med at redigere eller ændre gæstens VM's harddiske og filsystemer.
Store! Nu har vi installeret hele stakken og ved, hvordan arkitekturen er lagt ud. For at bruge libvirt (og relaterede værktøjer) skal du tilføje din bruger til libvirt-qemu- og libvirt-grupperne.
$ sudo usermod -aG libvirt$ sudo usermod -aG libvirt-qemu
Eller kør kommandoerne som rodbruger.
Virsh og starte standardnetværket
Virsh kommandolinjeværktøjet er noget, du vil bruge meget, når du administrerer dine virtuelle computere. Du kan bare skrive virsh og slippe til virsh kommandolinjegrænsefladen eller skrive virsh
Den første virsh-kommando, vi bruger, påberåber det standardnetværk, som en VM kan oprette forbindelse til:
$ virsh net-autostart standard$ virsh net-start standard
Dette starter standardnetværket og sørger for, at det startes automatisk, når værten genstarter. For at kontrollere detaljerne om dette standardnetværk skal du bruge kommandoen:
$ virsh net-dumpxml standardXml-filen kan vise dig rækkevidden af mulige IP-adresser og hvordan de kommunikerer med omverdenen. Dybest set kommer trafikken til dem via en NAT, og de vil ikke være en del af din værts eksterne netværk. Du kan bruge Bridge Networking til at eksponere hver VM for værtsmaskinens LAN.
At starte en virtuel maskine
For at starte en virtuel maskine har vi brug for et installationsmedie (som ISO-installationen til ethvert operativsystem) og hvor mange CPU'er, og hvor meget hukommelse der skal tildeles til den virtuelle computer, og hvis den har brug for VNC. Dette trin er, hvor du virkelig kan sætte pris på et GUI-installationsprogram som virt-manager, men vi vil gøre det ved hjælp af en ret kompliceret virt-install-kommando.
Jeg kan godt lide at holde alle mine bootmedier på / var / lib / libvirt / boot og alle virtuelle computere og deres virtuelle harddisk på / var / lib / libvirt / images (standardplaceringen), dette forenkler organisationen.
$ cd / var / lib / libvirt / boot$ wget http: // udgivelser.ubuntu.com / 18.04.2 / ubuntu-18.04.2-desktop-amd64.iso
Kommandoen ovenfor henter Ubuntu desktop ISO, du kan lige så let få CentOS eller enhver anden distribution, du ønsker.
For at oprette en ny VM og starte den køre:
$ virt-installation --virt-type kvm \--navngiv myVM \
--hukommelse 2048 --vcpus = 2 \
--cdrom / var / lib / libvirt / boot / ubuntu-18.04.2-desktop-amd64.iso \
--diskstørrelse = 40 \
--grafik vnc, lyt = 0.0.0.0, port = 5900 \
--ingen autokonsol
Ovenstående kommando er faktisk kompliceret. Jeg foreslår, at du gemmer disse kommandoer i tekstfiler og kører dem som eksekverbare scripts, når du opretter en ny VM. De fleste af parametrene som virt-type og virt-name er ret selvforklarende. De er bare kedelige at skrive ned.
Den sidste mulighed for VNC-skærm starter en VNC-server og giver dig mulighed for at få konsoladgang til din VM eksternt ved at oprette forbindelse til værtens port 5900. Åbn en VNC-klient på dit skrivebord, og gå til din KVM-værts IP ved port 5900. Sørg for, at du når værtens IP og ikke VM's IP. Din VNC opretter forbindelse til videoudgangen på din VM, og du kan fortsætte med installationen.
Hvor skal vi næste?
Herfra kan du prøve at stoppe, stoppe og slette VM'erne. Du kan også ændre den underliggende infrastruktur ved at tilføje puljer til opbevaring og konfiguration af bronetværk. Alle konfigurationsfiler til individuelle virtuelle computere, netværksgrænseflader og lagringsbassiner er gemt på / etc / libvirt / og / etc / libvirt / qemu.
Nogle gange bliver du fysisk nødt til at slette de harddiskfiler, der er gemt på / lib / libvirt / images, selv efter at du har fjernet VM fra libvirt. For at automatisere tingene yderligere, prøv at importere qcow2-billeder, som de fleste linux-distributioner som Ubuntu og CentOS. Disse har OS forudinstalleret i dem.
Konklusion
Opsætning af dette er intetsteds så let som opsætning af VirtualBox, og årsagen bag dette er mangfoldig. Det meste af stakken er kompliceret, fordi den er designet til at være modulær og meget skalerbar. Det antager ikke antagelser om, hvor du kører VM. Miljøet kan være et personligt skrivebord eller et datacenter. Arbejde med en GUI kan hjælpe med at reducere denne kompleksitet til en vis grad. Disse systemer er dog designet til at arbejde med en REST API for at oprette forbindelse til din organisations faktureringssystemer, overvågningssystemer osv. De er næsten aldrig berørt af et menneske efter at være blevet indsat.
Når det er sagt, er automatisering navnet på spillet med libvirt og qemu-kvm. Gennemgå den officielle dokumentation, og skriv dit eget seje script for at få en flåde VM'er til at fortælle os, hvis du fandt denne tutorial nyttig.