Wie funktioniert ein KVM Server (Kernel virtualization)

Wie funktioniert ein KVM Server (Kernel virtualization)

Um zu verstehen wie ein KVM Server funktioniert, müssen wir die Abkürzung “KVM” verstehen, welche ausgeschrieben Kernel-based Virtual Machine (auf deutsch: Kern-basierte virtuelle Maschine) ist. Aus der ausgeschriebenen Bezeichnung geht schon hervor, dass es sich hierbei um eine Virtualisierung handelt, also nicht um Bare-metal server (Server die physisch existieren).

Um die Virtualisierung der KVM-Server zu ermöglichen wird zwischen Bare-metal server und dem virtualisierten Server ein Programm geschaltet, was es uns ermöglicht auf einmal bestehender Hardware, mehrere Betriebssysteme zu installieren und diese zu isolieren. Dieses Programm nennt sich Hypervisor und ist dafür da, um eine sichere virtuelle Umgebung zu schaffen, die Ressourcen zuzuweisen, als auch das Netzwerk in die VM-Umgebung zu leiten und die Prozesse zwischen KVM-Server und Host-Hardware zu koordinieren.

Der Begriff Programm meint hierbei jedoch keine einzelne Software, sondern eine Zusammenführung von verschiedenen Hard- & Softwaresystemen, welche dies erst ermöglichen.

Kernelvirtualisierung

Die Kernelvirtualisierung, wie es bei KVM geschieht, ist eine von mehren Methoden, bei denen der Kernel eines Betriebssystems (OS) angepasst wird, um verschiedene Benutzer zu unterstützen, die gleichzeitig Anwendungen auf einer einzigen Maschine ausführen. Der Kernel ist der wesentliche Kern eines Betriebssystems, der grundlegende Dienste für alle anderen Teile des Betriebssystems bereitstellt.

Im herkömmlichen Virtualisierungsmodell isoliert ein Hypervisor Betriebssysteme und Anwendungen von der zugrundeliegenden Host-Hardware und ermöglicht es dem Host-Rechner, mehrere unabhängige virtuelle Maschinen (VMs) als Gäste zu betreiben, die sich die Ressourcen des Hosts teilen. Die Kernelvirtualisierung kann entweder auf Hypervisoren oder Containern basieren.

KVM ist dabei ein modifizierter QEMU (quick emulator), mit Hilfe man sich mit VMs verbinden kann. KVM nutzt den Linux-Kernel als Hypervisor. Der Linux Kernel kann dies seit der Version 2.6.20, welchem im Jahr 2007 erschien.

KVM selbst nimmt keine Emulation (also die eigentliche Virtualisierung) vor, sondern stellt nur die Infrastruktur dazu bereit. QEMU ist derzeit die einzige Möglichkeit, diese zu tun.

QEmu

QEmu (kurz für Quick EMUlator) ist ein freier und quelloffener Emulator und Virtualisierer, der Hardwarevirtualisierung durchführen kann.

QEmu ist eine komplette und eigenständige Software. Sie wird benutzt um Maschinen/Betriebssysteme zu emulieren. Hauptsächlich funktioniert es durch einen speziellen ‘Recompiler‘, der Binärcode, der für einen bestimmten Prozessor geschrieben wurde, in einen anderen umwandelt.

Um mehr als nur den Prozessor zu emulieren, enthält QEMU eine lange Liste von Peripherie-Emulatoren: Festplatte, Netzwerk, VGA, PCI, USB, serielle/parallele Schnittstellen, etc.

QEMU-KVM

KVM ein Fork des Qemu-Programms (also eine eigenständige Weiterentwicklung, eines zuvor bestehenden Programms). Beide Entwickler-Teams arbeiten aktiv daran, die Unterschiede in der Struktur so gering wie möglich zu halten um die Kompatibilität zu erhalten.

Letztendlich ist das Ziel, dass QUEMU überall funktionieren sollte und wenn ein KVM-Kernelmodul verfügbar ist, soll es automatisch verwendet werden können. Aber in der absehbaren Zukunft konzentriert sich das QUEMU-Team auf die Hardware-Emulation und die Portabilität, während sich die KVM-Entwickler auf das Kernel-Modul konzentrieren.

Das kvm-qemu Executable arbeitet wie ein normales QUEMU: es allokiert RAM, lädt den Code und anstatt ihn neu zu kompilieren oder KQUEMU aufzurufen, startet es einen Thread. Der Thread ruft das KVM-Kernelmodul auf, um in den Gastmodus zu wechseln und fährt fort, den VM-Code auszuführen. Bei einer privilegierten Anweisung schaltet er zurück zum KVM-Kernelmodul, welches, falls nötig, dem QUEMU-Thread signalisiert, den Großteil der Hardwareemulation zu übernehmen.

Eines der schönen Dinge dieser Architektur ist, dass der Gastcode in einem Posix-Thread[1] emuliert wird, welcher mit normalen Linux-Tools verwalten werden kann. Wenn eine Virtuelle-Maschine mit 2 oder 4 Kernen erstellt werden soll, erstellt kvm-qemu 2 oder 4 Threads, von denen jeder das KVM-Kernelmodul aufruft, um die Ausführung zu starten. Sollte das Hostsystem keine freien oder nicht genug Kerne zur Abarbeitung haben, werden diese in ein Scheduling gepackt, welches diese Prozesse beim nächsten freien Prozessslot abarbeitet.

Was lässt sich mit KVM virtualisieren?

Inzwischen können sehr viele Gastbetriebssysteme per KVM virtualisiert werden. Darunter zum Beispiel auch: Windows, Debian, Ubuntu, CentOS, Mac OS X, ReactOS, Solaris, Haiku und viele mehr.

Was für Hardware benötige ich dafür?

Zum einen benötigt das HostSystem genug Ressourcen um sich selbst am Laufen zu halten und um seinen Gastbetriebssystemen genug Ressourcen wie Speicher, Ram, CPU-Kernen und Netzwerk-Bandweite zu bieten.

Ebenfalls sollte die CPU stark genug sein, damit nicht nur sein eigenes Hostsystem problemlos läuft, sondern auch die Gastsysteme keine Prozessorprobleme haben.

DevStorage.eu setzt bei seinen KVM Servern auf starke und neue AMD Epyc 7402P Prozessoren und DDR4 ECC RAM, damit die KVM Server der Kunden problemlos laufen. Bestellbar sind diese hier: https://hosting.devstorage.eu/kvm/order

Damit das Kernelmodul zur Virtualisierung enthalten ist, muss die Hardware die x86-Architektur beinhalten und auf mind. Linux Version 2.6.20 laufen.


[1]Der POSIX Threads ermöglicht einem Programm, mehrere verschiedene Arbeitsabläufe zu steuern, die sich zeitlich überschneiden. Es ist zudem Sprachunabhängig.

Quellen:

  • https://planet.virt-tools.org/
  • https://www.redhat.com/de/topics/virtualization/what-is-KVM
  • http://www.linux-kvm.org/
  • http://www.linux-kvm.org/page/Guest_Support_Status

administrator
X