Container und Virtualisierung gemeinsam einsetzen Das KubeVirt-Projekt der CNCF

Von Thomas Joos

Bei KubeVirt handelt es sich um ein Sandbox-Projekt der CNCF, das Virtualisierung und Container-Umgebungen verbinden soll. Dadurch lassen sich aus Kubernetes heraus VMs steuern und nutzen, wenn Anwendungen das benötigen.

Firmen zum Thema

Kubevirt in Kubernetes installieren und überprüfen.
Kubevirt in Kubernetes installieren und überprüfen.
(Bild: Joos / KubeVirt)

KubeVirt (Eigenschreibweise, im Folgenden Kubevirt) ist ein Projekt der CNCF, das es Entwicklern einfacher machen soll, Anwendungen für virtuelle Server und für Container zu schreiben. Wenn bei einer Anwendung Container-Technologien zum Einsatz kommen sollen, aber auch Komponenten aus der Virtualisierung notwendig sind, bietet Kubevirt eine ideale Schnittstelle für den Einsatz.

Für die Verwendung erweitert Kubevirt die Kubernetes-API um die Möglichkeit, VMs zu steuern. Auch der Konsolenzugriff auf VMs ist möglich. Das Tool selbst verfügt über keine grafische Oberfläche oder eine andere UI. Die zentrale Aufgabe von Kubevirt besteht darin die Steuerung von VMs in Kubernetes zu ermöglichen und wird komplett über Kubernetes-Tools gesteuert.

Der Code des Open-Source-Projektes ist auf GitHub zu finden. Die umfassende Dokumenation von Kubevirt hilft beim schnellen Einstieg. Auf dem Blog der Kubevirt-Entwickler sind neue Entwicklungen zu finden und viele Anleitungen, wie Kubevirt in die eigene Umgebung eingebunden werden kann. Der YouTube-Channel von Kubevirt zeigt einige Videos zur Verwendung der Umgebung.

Wer sich in Kubevirt einarbeiten will, findet verschiedene Szenarien online bei Katakoda.

Kubevirt verbindet VMs mit Kubernetes

Kubevirt stellt eine Schnittstelle zur Verfügung, über die Anwendungen in Containern auf virtuelle Server außerhalb von Kubernetes zugreifen können. Dadurch können Entwickler ihre Anwendungen in Container bereitstellen, die mit Kubernetes orchestriert werden.

Gleichzeitig lassen sich über Kubevirt aber auch virtuelle Server in die Umgebung integrieren. Die Verbindung zwischen Kubernetes und der virtuellen Umgebung werden über Kubevirt gesteuert. Die Anwendungen sind in einer gemeinsamen Umgebung integriert, die Kubevirt verwaltet.

Einstieg mit Minikube

Der schnellste Weg, mit dem sich Entwickler in Kubevirt einarbeiten können, besteht in der Verwendung von Minikube. Damit lässt sich ein lokaler Kubernetes-Cluster aufbauen, mit dem auch die Entwicklung von Anwendungen möglich ist.

Nach der Einrichtung des Clusters kann dieser mit „kubectl“ verwaltet werden. Bei der Verwendung von Minikube kommt dazu „minikube kubectl“ zum Einsatz. Um Kubevirt in einen Cluster zu integrieren, hilft ebenfalls Minikube. Der schnellste Weg dazu ist der Befehl:

minikube addons enable kubevirt

Wenn die Installation von Minikube auf einem virtuellen Server erfolgt, sind in der Quickstart-Anleitung von Kubevirt die entsprechenden Anleitungen für die Installation zu finden. Bei der Bereitstellung von Kubevirt muss allerdings darauf geachtet werden, dass die Lösung einige Ressourcen auf dem Kubernetes-Cluster erstellt. Die Hardware des Computers muss daher damit umgehen können.

Kubevirt in Kubernetes installieren und überprüfen.
Kubevirt in Kubernetes installieren und überprüfen.
(Bild: Joos / KubeVirt)

Kubevirt benötigt für seinen Grundbetrieb sieben Pods, drei Services, einen Daemonset, drei Deployment-Apps und drei Replica-Sets. Nach der Bereitstellung können die Funktionen von Kubevirt mit den folgenden Befehlen getestet werden:

kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.phase}"
kubectl get all -n kubevirt

Mit Kubevirt arbeiten: Virtctl

Virtctl mit Kubevirt kombinieren
Virtctl mit Kubevirt kombinieren
(Bild: Joos / KubeVirt)

Über eine Beispielumgebung von Kubevirt hinaus lässt sich eine Testumgebung für Kubevirt aufbauen. Zu Kubevirt gehört noch das Tool „Virtctl“ für den Zugriff auf die Konsole und Ports der VM, um Aktionen in den VMs aus Kubernetes heraus durchzuführen.

Die Installation des Tools kann in Kubernetes mit folgenden Befehlen erfolgen:

VERSION=$(kubectl get kubevirt.kubevirt.io/kubevirt -n kubevirt -o=jsonpath="{.status.observedKubevirtVersion}")
ARCH=$(uname -s | tr A-Z a-z)-$(uname -m | sed 's/x86_64/amd64/') || windows-amd64.exe
echo ${ARCH}
curl -L -o virtctl https://github.com/kubevirt/kubevirt/releases/download/${VERSION}/virtctl-${VERSION}-${ARCH}
chmod +x virtctl
sudo install virtctl /usr/local/bin

Kubevirt kann aus Kubernetes heraus auch eine VM erstellen:

wget https://Kubevirt.io/labs/manifests/vm.yaml
less vm.yaml

Um in diesem Beispiel die VM bereitzustellen und in Kubernetes zu integrieren, kann der folgende Befehl verwendet werden:

kubectl apply -f https://Kubevirt.io/labs/manifests/vm.yaml
kubectl get vms

Wenn „virtctl“ installiert ist, lässt sich die VM direkt aus Kubernetes heraus über Kubevirt starten:

./virtctl start testvm

Um eine VM wieder zu beenden, kann der folgende Befehl zum Einsatz kommen:

./virtctl stop testvm

Wird eine VM nicht mehr benötigt, kann der folgende Befehl verwendet werden:

kubectl delete vms testvm

Aus Kubevirt heraus kann auch direkt eine Verbindung zur Konsole einer VM aufgebaut werden.
Aus Kubevirt heraus kann auch direkt eine Verbindung zur Konsole einer VM aufgebaut werden.
(Bild: Joos / KubeVirt)

Ob die VM gestartet ist, kann wieder mit „kubectl get vms“ getestet werden. Der Status der VM lässt sich anschließend mit „kubectl get vmis“ testen. Hier zeigt sich der Vorteil der zusätzlichen Installation von „virtctl“. Mit dem folgenden Befehl kann die Konsole der VM geöffnet werden:

./virtctl console testvm

Fazit

In wenigen Schritten ist Kubevirt in eine Kubernetes-Umgebung implementiert und ermöglicht die Anbindung von VMs in Kubernetes. Dadurch ergeben sich für Entwickler zahlreiche neue Möglichkeiten, da Anwendungen nicht nur in Containern zum Einsatz kommen können, sondern parallel auch noch virtuelle Server angebunden werden können. Es lohnt sich mit Kubevirt auseinanderzusetzen, wenn Anwendungen nicht nur Container nutzen sollen, sondern auch auf virtuelle Funktionen zugreifen sollen.

(ID:47809175)