Auf dieser Seite wird gezeigt, wie Sie mit Anthos VM Runtime VMs in Anthos-Cluster auf Bare-Metal bereitstellen. Anthos VM Runtime verwendet KubeVirt, um VMs in Clustern zu orchestrieren, sodass Sie mit Ihren VM-basierten Anwendungen und Arbeitslasten in einer einheitlichen Entwicklungsumgebung arbeiten können. Sie können die Anthos VM Runtime beim Erstellen eines neuen Clusters und auf vorhandenen Clustern aktivieren.
Hinweis
Bei dieser Anleitung wird davon ausgegangen, dass ein Cluster einsatzbereit ist. Falls nicht, können Sie der Anthos-Cluster auf Bare-Metal-Kurzanleitung folgen, um einen Cluster auf Ihrer Workstation schnell einzurichten.
Anthos VM Runtime aktivieren
Die VM-Laufzeit von Anthos ist standardmäßig deaktiviert. Bearbeiten Sie zum Aktivieren der Anthos VM-Laufzeit die benutzerdefinierte Ressource VMRuntime
im Cluster. Ab Anthos-Clustern auf Bare-Metal-Version 1.10.0 wird die benutzerdefinierte Ressource VMRuntime
automatisch auf Clustern installiert.
So aktivieren Sie die Anthos VM-Laufzeit:
Aktualisieren Sie die benutzerdefinierte Ressource
VMRuntime
, umenabled
auftrue
festzulegen.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Wenn Ihr Knoten keine Hardwarevirtualisierung unterstützt oder Sie sich nicht sicher sind, setzen Sie
useEmulation
auftrue
.Die Hardwarevirtualisierung bietet eine bessere Leistung als die Softwareemulation. Das Feld
useEmulation
ist standardmäßig auffalse
gesetzt, wenn es nicht angegeben ist.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Um das für die von Ihnen erstellten VMs verwendete Image-Format zu ändern, legen Sie das
vmImageFormat
-Feld fest.Das Feld
vmImageFormat
unterstützt zwei Werte für das Laufwerk-Image-Format:raw
undqcow2
. Wenn SievmImageFormat
nicht festlegen, verwendet die Anthos VM-Laufzeit das Laufwerk-Image-Formatraw
, um VMs zu erstellen. Das Formatraw
bietet möglicherweise eine bessere Leistung gegenüberqcow2
, eine Kopie des Schreibformats, benötigt aber möglicherweise mehr Platz auf dem Laufwerk. Weitere Informationen zu den Image-Formaten für Ihre VM finden Sie in der QEMU-Dokumentation unter Dateiformate für Laufwerk-Images.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Speichern Sie die Konfiguration und prüfen Sie, ob die benutzerdefinierte Ressource
VMRuntime
aktiviert ist:kubectl describe vmruntime vmruntime
Die Details der benutzerdefinierten Ressource
VMRuntime
enthalten den AbschnittStatus
. Die Anthos-VM-Laufzeit ist aktiviert und funktioniert, wennVMRuntime.Status.Ready
auftrue
gesetzt ist.
1.9.x-Cluster aktualisieren
Die benutzerdefinierte Ressource VMRuntime
wird automatisch auf Clustern installiert, die auf Version 1.10.0 oder höher aktualisiert wurden. Wenn Sie einen Cluster der Version 1.9.x auf Version 1.10.0 und höher aktualisieren, prüft der Upgradeprozess Ihre Clustereinstellungen und konfiguriert die benutzerdefinierte Ressource VMRuntime
so, dass sie den Einstellungen der Anthos-VM-Laufzeit auf Ihrem Cluster der Version 1.9.x entspricht. Wenn spec.kubevirt
in der Clusterressource der Version 1.9.x vorhanden ist, aktiviert der Upgradeprozess die Anthos-VM-Laufzeit.
Die benutzerdefinierten Ressourceneinstellungen VMRuntime
haben Vorrang vor Legacy-Clustereinstellungen von Anthos-VM-Laufzeiten, z. B. spec.kubevirt.useEmulation
in Clustern der Version 1.10.0 oder höher. Aktualisieren Sie die benutzerdefinierte VMRuntime
-Ressource, um die Einstellungen für die Anthos VM-Laufzeit für Cluster ab Version 1.10.0 zu ändern.
virtctl
installieren
Installieren Sie das
virtctl
-Befehlszeilentool alskubectl
-Plug-in.export GOOGLE_APPLICATION_CREDENTIALS="bm-gcr.json" sudo -E ./bmctl install virtctl
Prüfen Sie, ob
virtctl
installiert ist:kubectl plugin list
Wenn
virtctl
in der Antwort aufgeführt ist, wurde es erfolgreich installiert.
VM erstellen
Nachdem Sie KubeVirt auf Ihrem Cluster aktiviert und das virtctl
-Plug-in für kubectl
installiert haben, können Sie mit dem Befehl kubectl virt create vm
VMs in Ihrem Cluster erstellen. Bevor Sie diesen Befehl ausführen, sollten Sie eine cloud-init-Datei konfigurieren, damit Sie von der Konsole aus Zugriff auf die VM haben, nachdem sie erstellt wurde.
Benutzerdefinierte cloud-init-Datei für den Konsolezugriff erstellen
Es gibt zwei Möglichkeiten, eine benutzerdefinierte cloud-init-Datei zu erstellen. Am einfachsten ist es, das Flag --os=<OPERATING_SYSTEM>
beim Erstellen der VM anzugeben. Diese Methode konfiguriert automatisch eine einfache cloud-init-Datei und funktioniert für die folgenden Betriebssysteme.
- Ubuntu
- CentOS
- Debian
- Fedora
Nachdem die VM erstellt wurde, können Sie sie mit den folgenden Anmeldedaten zum ersten Mal aufrufen und dann das Passwort ändern:
user: root
password: changeme
Wenn das Image ein anderes Linux-basiertes Betriebssystem enthält oder Sie eine erweiterte Konfiguration benötigen, können Sie manuell eine benutzerdefinierte cloud-init-Datei erstellen und den Pfad zu dieser Datei mit dem Flag --cloud-init-file=<path/to/file>
angeben. In ihrer grundlegendsten Form ist die cloud-init-Datei eine YAML-Datei, die Folgendes enthält:
#cloud-config
user: root
password: changeme
lock_passwd: false
chpasswd: {expire: false}
disable_root: false
ssh_authorized_keys:
- <ssh-key>
Erweiterte Konfigurationen finden Sie unter Cloud-Konfigurationsbeispiele.
Nachdem Sie entschieden haben, welche Methode Sie verwenden möchten, können Sie eine VM erstellen.
Befehl kubectl virt create vm
ausführen
Sie können VMs aus öffentlichen oder benutzerdefinierten Images erstellen.
Öffentliches Image
Wenn Ihr Cluster eine externe Verbindung hat, können Sie mit dem folgenden Befehl eine VM aus einem öffentlichen Image erstellen:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class="DISK_CLASS" \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_NAME \
--memory=MEMORY_SIZE
Dabei gilt:
- VM_NAME durch den Namen der VM, die Sie erstellen möchten.
- MODE durch den Zugriffsmodus des Bootlaufwerks. Mögliche Werte sind
ReadWriteOnce
(Standardeinstellung) oderReadWriteMany
. - DISK_SIZE durch die gewünschte Größe für das Bootlaufwerk. Der Standardwert ist
20Gi
- DISK_CLASS durch die Speicherklasse des Bootlaufwerks. Der Standardwert ist
local-shared
. Führen Sie den Befehlkubectl get storageclass
aus, um eine Liste der verfügbaren Speicherklassen aufzurufen. - FILE_PATH durch den vollständigen Pfad der benutzerdefinierten cloud-init-Datei.
Je nach Image ist es möglicherweise erforderlich, dass die Konsole Zugriff auf die VM hat, nachdem sie erstellt wurde. Wenn Sie die cloud-init-Datei automatisch mit dem Flag
--os
konfigurieren möchten, geben Sie das Flag--cloud-init-file
nicht an. Wenn Sie das Flag--cloud-init-file
angeben, wird das Flag--os
ignoriert. Zulässige Werte für--os
sindubuntu
,centos
,debian
undfedora
. - CPU_NUMBER durch die Anzahl der CPUs, die Sie für die VM konfigurieren möchten.
Der Standardwert ist
1
. - IMAGE_NAME durch das VM-Image, das
ubuntu20.04
(Standardeinstellung),centos8
oder eine URL des Images sein kann. - MEMORY_SIZE durch die Speichergröße der VM. Der Standardwert ist
4Gi
.
Benutzerdefiniertes Image
Beim Erstellen einer VM aus einem benutzerdefinierten Image können Sie entweder ein Image von einem HTTP-Image-Server oder ein lokal gespeichertes Image angeben.
HTTP-Image-Server
Sie können einen HTTP-Server mit Apache oder nginx einrichten und das benutzerdefinierte Image in seinen freigegebenen Ordner hochladen. Anschließend können Sie mit dem folgenden Befehl eine VM aus dem benutzerdefinierten Image erstellen:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=http://SERVER_IP/IMAGE_NAME \
--memory=MEMORY_SIZE
Dabei gilt:
- VM_NAME durch den Namen der VM, die Sie erstellen möchten.
- DISK_ACCESS_MODE durch den Zugriffsmodus des Bootlaufwerks. Mögliche Werte sind
ReadWriteOnce
(Standardeinstellung) oderReadWriteMany
. - DISK_SIZE durch die gewünschte Größe für das Bootlaufwerk. Der Standardwert ist
20Gi
- DISK_CLASS durch die Speicherklasse des Bootlaufwerks. Der Standardwert ist
local-shared
Führen Sie den Befehlkubectl get storageclass
aus, um eine Liste der verfügbaren Speicherklassen aufzurufen. - FILE_PATH durch den vollständigen Pfad der benutzerdefinierten cloud-init-Datei.
Je nach Image ist es möglicherweise erforderlich, dass die Konsole Zugriff auf die VM hat, nachdem sie erstellt wurde. Wenn Sie die cloud-init-Datei automatisch mit dem Flag
--os
konfigurieren möchten, geben Sie das Flag--cloud-init-file
nicht an. Wenn Sie das Flag--cloud-init-file
angeben, wird das Flag--os
ignoriert. Die akzeptablen Werte für--os
sindubuntu
,centos
,debian
undfedora
. - CPU_NUMBER durch die Anzahl der CPUs, die Sie für die VM konfigurieren möchten. Der Standardwert ist
1
. - SERVER_IP durch die IP-Adresse des Servers, der das Image hostet.
- IMAGE_NAME durch den Dateinamen des benutzerdefinierten Images.
- MEMORY_SIZE durch die Speichergröße der VM. Der Standardwert ist
4Gi
.
Lokal gespeichertes Image
Mit dem folgenden Befehl können Sie das benutzerdefinierte Image lokal speichern und daraus eine VM erstellen:
kubectl virt create vm VM_NAME \
--boot-disk-access-mode=DISK_ACCESS_MODE \
--boot-disk-size=DISK_SIZE \
--boot-disk-storage-class=DISK_CLASS \
--cloud-init-file=FILE_PATH \
--cpu=CPU_NUMBER \
--image=IMAGE_PATH \
--memory=MEMORY_SIZE \
Dabei gilt:
- VM_NAME durch den Namen der VM, die Sie erstellen möchten.
- DISK_ACCESS_MODE durch den Zugriffsmodus des Bootlaufwerks. Mögliche Werte sind
ReadWriteOnce
(Standardeinstellung) oderReadWriteMany
. - DISK_SIZE durch die gewünschte Größe für das Bootlaufwerk. Der Standardwert ist
20Gi
- DISK_CLASS durch die Speicherklasse des Bootlaufwerks. Der Standardwert ist
local-shared
- FILE_PATH durch den vollständigen Pfad der benutzerdefinierten cloud-init-Datei.
Je nach Image ist es möglicherweise erforderlich, dass die Konsole Zugriff auf die VM hat, nachdem sie erstellt wurde. Wenn Sie die cloud-init-Datei automatisch mit dem Flag
--os
konfigurieren möchten, geben Sie das Flag--cloud-init-file
nicht an. Wenn Sie das Flag--cloud-init-file
angeben, wird das Flag--os
ignoriert. Die akzeptablen Werte für--os
sindubuntu
,centos
,debian
undfedora
. - CPU_NUMBER durch die Anzahl der CPUs, die Sie für die VM konfigurieren möchten. Der Standardwert ist
1
. - IMAGE_PATH durch den lokalen Dateipfad zum benutzerdefinierten Image.
- MEMORY_SIZE durch die Speichergröße der VM. Der Standardwert ist
4Gi
.
Standardwerte für Flags ändern
Der Befehl kubectl virt create vm
verwendet beim Ausführen Standardwerte, um nicht angegebene Flags automatisch auszufüllen. Sie können diese Standardwerte mit dem folgenden Befehl ändern:
kubectl virt config default FLAG
Ersetzen Sie FLAG durch das Flag des Parameters, für den Sie den Standardwert ändern möchten.
Beispiel: Mit dem folgenden Befehl wird die Standard-CPU-Konfiguration von der anfänglichen Standardeinstellung 1
in 2
geändert:
kubectl virt config default --cpu=2
Führen Sie folgenden Befehl aus, um eine Liste der unterstützten Flags und ihrer aktuellen Standardwerte aufzurufen:
kubectl virt config default -h
Die Standardkonfigurationen werden clientseitig als lokale Datei mit dem Namen ~/.virtctl.default
gespeichert. Sie können die Standardkonfigurationen ändern, indem Sie diese Datei auch bearbeiten.
Auf die VM zugreifen
Sie haben folgende Möglichkeiten, auf VMs zuzugreifen:
Konsolenzugriff
Führen Sie folgenden Befehl aus, um über die Konsole auf eine VM zuzugreifen:
kubectl virt console VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
VNC-Zugriff
Führen Sie folgenden Befehl aus, um mit VNC auf eine VM zuzugreifen:
# This requires remote-viewer from the virt-viewer package and a graphical desktop from where you run virtctl
kubectl virt vnc VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
Interner Zugriff
Auf die IP-Adressen Ihrer Cluster-VMs können alle anderen Pods im Cluster direkt zugreifen. Führen Sie Folgendes aus, um die IP-Adresse einer VM zu ermitteln:
kubectl get vmi VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
Der Befehl gibt etwa Folgendes zurück:
NAME AGE PHASE IP NODENAME
vm1 13m Running 192.168.1.194 upgi-bm002
Externer Zugriff
In Ihrem Cluster erstellte VMs haben Pod-Netzwerkadressen, auf die nur von innerhalb des Clusters zugegriffen werden kann. So greifen Sie extern auf Cluster-VMs zu:
Geben Sie die VM als Load-Balancer-Dienst frei:
kubectl virt expose vm VM_NAME \ --port=LB_PORT \ --target-port=VM_PORT \ --type=LoadBalancer \ --name=SERVICE_NAME
Dabei gilt:
- VM_NAME durch den Namen der VM, auf die Sie zugreifen möchten.
- LB_PORT durch den Port des freigegebenen Load-Balancer-Dienstes.
- VM_PORT durch den Port auf der VM, auf die Sie über den Load-Balancer-Dienst zugreifen möchten.
- SERVICE_NAME durch den Namen, den Sie diesem Load-Balancer-Dienst geben möchten.
Rufen Sie die externe IP-Adresse des Load-Balancer-Dienstes ab:
kubectl get svc SERVICE_NAME
Ersetzen Sie SERVICE_NAME durch den Namen des Load-Balancer-Dienstes, der die VM freigibt.
Sie können auf den Zielport der VM über die IP-Adresse zugreifen, die im Feld
EXTERNAL-IP
der Antwort aufgeführt ist.
Beispiel
Wenn Sie eine VM mit dem Namen galaxy
haben, auf die Sie von außerhalb des Clusters mit SSH zugreifen möchten, führen Sie Folgendes aus:
kubectl virt expose vm galaxy \
--port=25022 \
--target-port=22 \
--type=LoadBalancer \
--name=galaxy-ssh
Rufen Sie die IP-Adresse des Load-Balancers ab:
kubectl get svc galaxy-ssh
Der Befehl gibt etwa Folgendes zurück:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
galaxy-ssh LoadBalancer 10.96.250.76 21.1.38.202 25000:30499/TCP 4m40s
Jetzt können Sie mit SSH über 21.1.38.202:25022
(VIP:Port) von außerhalb des Clusters auf die VM zugreifen:
ssh root@21.1.38.202:22 -p 25022
VM-Telemetrie und Konsolenlogs prüfen
VM-Telemetrie und -Konsolenlogs wurden in die Google Cloud Console eingebunden. Telemetrieinformationen und Logdaten sind für das Monitoring des Status Ihrer VMs und die Fehlerbehebung bei Problemen mit Ihren Cluster-VMs entscheidend.
VM-Telemetrie
Im Dashboard VM-Status von Anthos-Clustern finden Sie Live-Telemetriedaten für Ihre Cluster-VMs.
So rufen Sie Telemetriedaten für Ihre Cluster-VMs auf:
Wählen Sie in der Google Cloud Console Monitoring aus oder klicken Sie auf die folgende Schaltfläche:
Wählen Sie Dashboards aus.
Klicken Sie in der Liste Alle Dashboards auf VM-Clusterstatus von Anthos.
VM-Konsolenlogs
Logs von seriellen Konsolen-VMs werden an Cloud Logging gestreamt und können im Log-Explorer aufgerufen werden.
VMs und ihre Ressourcen löschen
Nur die VM löschen
kubectl virt delete vm VM_NAME
Ersetzen Sie VM_NAME durch den Namen der VM, die Sie löschen möchten.
Nur VM-Laufwerke löschen
kubectl virt delete disk DISK_NAME
Ersetzen Sie DISK_NAME durch den Namen des Laufwerks, das Sie löschen möchten. Wenn Sie versuchen, ein VM-Laufwerk zu löschen, bevor Sie die VM löschen, wird das Laufwerk zum Löschen markiert, für den Fall dass die VM gelöscht wird.
VM und Ressourcen löschen
kubectl virt delete vm VM_NAME --all
Ersetzen Sie VM_NAME durch den Namen der VM, die Sie löschen möchten.
Wenn Sie die Ressourcen prüfen möchten, die von der gelöschten VM verwendet werden, können Sie das Flag --dry-run
zusammen mit --all
angeben.
Anthos VM Runtime deaktivieren
Bevor Sie Anthos VM Runtime in einem Cluster deaktivieren können, müssen Sie überprüfen, ob alle VMs in diesem Cluster gelöscht wurden. Wenn Sie Anthos VM Runtime deaktivieren, werden alle KubeVirt-bezogenen Bereitstellungen entfernt, z. B. Pods und Dienste in den KubeVirt- und CDI-Namespaces.
Suchen Sie nach vorhandenen VMs im Cluster:
kubectl get vm
Wenn der Befehl anzeigt, dass sich in Ihrem Cluster noch VMs befinden, müssen Sie diese löschen, bevor Sie fortfahren.
Aktualisieren Sie die benutzerdefinierte Ressource
VMRuntime
, umenabled
auffalse
festzulegen.apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: false # useEmulation default to false if not set. useEmulation: true # vmImageFormat default to "qcow2" if not set. vmImageFormat: qcow2
Speichern Sie die Konfiguration und prüfen Sie, ob die benutzerdefinierte Ressource
VMRuntime
deaktiviert ist:kubectl describe vmruntime vmruntime
Die Details der benutzerdefinierten Ressource
VMRuntime
enthalten den AbschnittStatus
. Die Anthos-VM-Laufzeit ist aktiviert und funktioniert, wennVMRuntime.Status.Ready
auffalse
gesetzt ist.