OpenShift-Virtualisierung: Container, KVM und virtuelle Maschinen

OpenShift-Virtualisierung (Upstream-Projekt – Kubernetes: KubeVirt, siehe. hier und hier), 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.

OpenShift-Virtualisierung: Container, KVM und virtuelle Maschinen

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.

OpenShift-Virtualisierung: Container, KVM und virtuelle Maschinen

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.

OpenShift-Virtualisierung: Container, KVM und virtuelle Maschinen

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.

OpenShift-Virtualisierung: Container, KVM und virtuelle Maschinen

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 hier. DarĂŒber hinaus nmstate operator, 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:

OpenShift-Virtualisierung: Container, KVM und virtuelle Maschinen

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 die Dokumentation zu OpenShift fĂŒr Installationsanweisungen, einschließlich dem Abschnitt zur Konfiguration von Multus, der Informationen zur Konfiguration von externen Netzwerken enthĂ€lt.

Quelle: habr.com

60GB SSD 8Gb DDR4