OpenShift-Virtualisierung (Upstream-Projekt â Kubernetes: KubeVirt, siehe. und ), frĂŒher bekannt als Container-native Virtualization, wurde als FunktionalitĂ€t der OpenShift-Plattform vorgestellt, die fĂŒr die Bereitstellung und Verwaltung von virtuellen Maschinen (VMs) als Grundeinheiten von Kubernetes gedacht ist. Eine solche Aufgabe ist technisch komplex aufgrund der grundlegenden Unterschiede der Technologien. Um das gesetzte Ziel zu erreichen, wurden vertraute Technologien auf Basis von Red Hat Enterprise Linux und KVM verwendet, die uns schon seit vielen Jahren begleiten und ihre Effizienz bewiesen haben.

In diesem Artikel werden wir die technischen Aspekte der OpenShift-Virtualisierung betrachten, die das Zusammenleben von VMs und Containern auf einer Plattform ermöglichen, die diese als eine Einheit verwaltet.
Rechenaufgaben
Container nutzen Mechanismen des Linux-Kernels wie Namespaces und cgroups zur Isolierung von Prozessen und zur Ressourcenverwaltung. In der Regel versteht man unter Prozessen Anwendungen wie Python, Java oder ausfĂŒhrbare Dateien, allerdings können dies in Wahrheit beliebige Prozesse sein, wie zum Beispiel bash, Emacs oder vim.
Was ist eine virtuelle Maschine? Aus Sicht des Hypervisors ist sie ebenfalls ein Prozess. Aber nicht ein Anwendungsprozess, sondern ein KVM-Prozess, der fĂŒr die AusfĂŒhrung einer bestimmten VM verantwortlich ist.

Das Container-Image enthĂ€lt alle Werkzeuge, Bibliotheken und Dateien, die fĂŒr die KVM-VM erforderlich sind. Wenn wir ein Pod der laufenden VM inspizieren, sehen wir dort Helfer und Prozesse von qemu-kvm. DarĂŒber hinaus haben wir Zugang zu KVM-Tools zur Verwaltung virtueller Maschinen, wie qemu-img, qemu-nbd und virsh.

Da die virtuelle Maschine ein Pod ist, erbt sie automatisch die gesamte FunktionalitĂ€t eines Pods in Kubernetes. Auf VM-Pods gelten genau wie bei normalen Pods Schemata und Kriterien desSchedulers wie Taints, Toleranzen, AffinitĂ€t und Anti-AffinitĂ€t. AuĂerdem profitieren Sie von hoher VerfĂŒgbarkeit usw. Ein wichtiger Unterschied besteht jedoch: Normale Pods migrieren nicht im gewohnten Sinne von Host zu Host. Wenn ein Knoten ausfĂ€llt, wird das Pod dort unterbrochen und einem anderen Knoten im Cluster zugewiesen. Bei einer virtuellen Maschine erwarten wir hingegen, eine live Migration zu sehen.
Um diese LĂŒcke zu schlieĂen, wurde eine benutzerdefinierte Ressourcenbeschreibung (CDR) erstellt, die den Mechanismus der Live-Migration beschreibt, der fĂŒr die Initialisierung, Ăberwachung und Verwaltung der Live-Migrationen von VMs zwischen den Arbeitsknoten verantwortlich ist.
apiVersion: kubevirt.io/v1alpha3
kind: VirtualMachineInstanceMigration
metadata:
name: migration-job
spec:
vmiName: fedora
Beim Deaktivieren eines Knotens werden automatisch Migrationsaufgaben fĂŒr alle virtuellen Maschinen erstellt, die fĂŒr die Eviction-Strategie die Live-Migration angegeben haben. Auf diese Weise kann das Verhalten der virtuellen Maschinen beim Verschieben zwischen den Knoten des Clusters kontrolliert werden. Sie können sowohl die Live-Migration einrichten als auch die VMs verwalten, wie auch alle anderen Pods.
Netzwerk
Jedes Kubernetes-System stellt die Kommunikation zwischen Knoten und Pods mithilfe von softwarebasierten SDN-Netzwerken sicher. OpenShift bildet da keine Ausnahme und verwendet ab Version 3 standardmĂ€Ăig OpenShiftSDN dafĂŒr. DarĂŒber hinaus wurde mit OpenShift 4 eine neue Funktion mit dem Namen Multus eingefĂŒhrt, die es ermöglicht, mehrere Netzwerke verfĂŒgbar zu machen und Pods gleichzeitig damit zu verbinden.

Mit Multus kann der Administrator zusĂ€tzliche CNI-Netzwerke definieren, die dann von einem speziellen Operator, dem Cluster Network Operator, im Cluster bereitgestellt und konfiguriert werden. Danach werden Pods mit einem oder mehreren dieser Netzwerke verbunden, normalerweise mit dem standardmĂ€Ăigen OpenShiftSDN und einem zusĂ€tzlichen Interface. SR-IOV-GerĂ€te, Standard-Linux-Bridges, MACVLAN- und IPVLAN-GerĂ€te können ebenfalls verwendet werden, wenn dies fĂŒr Ihre VM erforderlich ist. Das folgende Bild zeigt, wie Multus CNI fĂŒr ein Bridge-Netzwerk am Interface eth1 konfiguriert wird:
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
name: cluster
spec:
additionalNetworks:
- name: multus1
rawCNIConfig: '{ "cniVersion": "0.3.1", "type": "bridge", "master": "eth1", "ipam":
{ "type": "static", "addresses": [ { "address": "191.168.1.1/24" } ] } }'
type: Raw
Im Kontext von OpenShift-Virtualisierung bedeutet dies, dass VMs direkt mit einem externen Netzwerk verbunden werden können, ohne SDN zu umgehen. Dies ist wichtig fĂŒr virtuelle Maschinen, die aus Red Hat Virtualization oder VMware vSphere nach OpenShift migriert wurden, da es bei Zugang auf OSI-Schicht 2 keine Ănderung der Netzwerkeinstellungen gibt. Dies bedeutet auch, dass die VM eine Netzwerkadresse haben kann, die SDN umgeht. So können wir spezialisierte Netzwerkadapter effizient nutzen oder direkt ĂŒber das Netzwerk mit dem SAN verbinden...
Weitere Informationen darĂŒber, wie Sie OpenShift-Virtualisierungs-VMs mit Netzwerken verbinden, finden Sie . DarĂŒber hinaus , der zusammen mit OpenShift-Virtualisierung bereitgestellt wird, bietet Ihnen eine weitere Ihnen wohlbekannte Möglichkeit, Netzwerkkonfigurationen auf physischen Knoten, die von Hypervisoren genutzt werden, zu erstellen und zu verwalten.
Speicherung
Die Verbindung und Verwaltung der Festplatten virtueller Maschinen im Rahmen der OpenShift-Virtualisierung erfolgt unter Verwendung von Kubernetes-Konzepten wie StorageClasses, PersistentVolumeClaims (PVC) und PersistentVolume (PV) sowie der fĂŒr die Kubernetes-Umgebung typischen Speicherprotokolle. Damit erhalten Kubernetes-Administratoren und die fĂŒr Anwendungen zustĂ€ndigen Teams einen einheitlichen und gewohnten Verwaltungsmechanismus sowohl fĂŒr Container als auch fĂŒr virtuelle Maschinen. FĂŒr viele Administratoren von Virtualisierungsumgebungen mag dieses Konzept vertraut erscheinen, da es dasselbe Prinzip der Trennung von Konfigurationsdateien von VMs und Festplatten verwendet, das auch in OpenStack und vielen anderen Cloud-Plattformen angewendet wird.
Es ist jedoch nicht möglich, jedes Mal eine neue Festplatte fĂŒr die VM zu erstellen, da wir bei der Migration von einem Hypervisor zu OpenShift die Daten erhalten mĂŒssen. Selbst wenn wir eine neue VM bereitstellen, geht das immer schneller aus einer Vorlage, als von Grund auf neu zu erstellen. Daher benötigen wir die FunktionalitĂ€t zum Import vorhandener Festplatten.
Um diese Aufgabe zu vereinfachen, implementiert OpenShift-Virtualisierung das Projekt Containerized Data Importer (CDI), das den Import von Festplatten-Images aus verschiedenen Quellen auf das Erstellen eines Eintrags in PVC reduziert.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: "fedora-disk0"
labels:
app: containerized-data-importer
annotations:
cdi.kubevirt.io/storage.import.endpoint: "http://10.0.0.1/images/Fedora-Cloud-Base-31-1.9.x86_64.qcow2"
spec:
storageClassName: ocs-gold
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 20Gi
Genau dieser Eintrag aktiviert CDI und löst die Abfolge von Aktionen aus, die im Bild unten dargestellt ist:

Nachdem CDI ausgefĂŒhrt wurde, enthĂ€lt PVC die Festplatte der virtuellen Maschine, die bereit zur Nutzung und im fĂŒr OpenShift standardisierten Format istâŠ
Bei der Arbeit mit OpenShift-Virtualisierung ist auch OpenShift Container Storage (OCS) nĂŒtzlich, eine Red Hat-Lösung auf Basis des Ceph-Dateisystems, die FunktionalitĂ€t fĂŒr persistente Speicher fĂŒr Container bereitstellt. Neben den Standardzugriffsarten fĂŒr PVC â RWO (Block) und RWX (Datei) â bietet OCS RWX fĂŒr Raw-BlockgerĂ€te, was bei der Einrichtung des gemeinsamen Blockzugriffs fĂŒr Anwendungen mit hohen Leistungsanforderungen sehr hilfreich ist. DarĂŒber hinaus unterstĂŒtzt OCS den neuen Standard fĂŒr Object Bucket Claim-Anfragen, der es Anwendungen ermöglicht, direkt auf das objektspeicherbasierte Datenspeicher zuzugreifen.
Virtuelle Maschinen in Containern
Wenn Sie interessiert sind, wie das funktioniert, wissen Sie, dass die OpenShift-Virtualisierung bereits in der Tech Preview in OpenShift 3.11 und höher verfĂŒgbar ist. Besitzer eines aktiven Abonnements fĂŒr OpenShift können die OpenShift-Virtualisierung völlig kostenlos und ohne zusĂ€tzliche Schritte nutzen. Zum Zeitpunkt der Veröffentlichung dieses Beitrags sind OpenShift 4.4 und OpenShift-Virtualisierung 2.3 aktuell. Wenn Sie frĂŒhere Versionen verwenden, sollten Sie ein Upgrade durchfĂŒhren, um die neuesten Funktionen zu erhalten. Die vollstĂ€ndig unterstĂŒtzte Version der OpenShift-Virtualisierung wird in der zweiten HĂ€lfte des Jahres 2020 erwartet.
FĂŒr weitere Informationen wenden Sie sich an fĂŒr Installationsanweisungen, einschlieĂlich , der Informationen zur Konfiguration von externen Netzwerken enthĂ€lt.
Quelle: habr.com
