In diesem Dokument erfahren Sie, wie Sie die VM-Laufzeit in Google Distributed Cloud aktivieren oder deaktivieren, indem Sie entweder die benutzerdefinierte Ressource VMRuntime
aktualisieren oder bmctl
-Befehle ausführen.
Hinweise
Zum Aktivieren oder Deaktivieren der VM-Laufzeit in Google Distributed Cloud benötigen Sie Zugriff auf die folgenden Ressourcen und Tools:
- Zugriff auf GKE on Bare Metal-Cluster der Version 1.12.0 (
anthosBareMetalVersion: 1.12.0
) oder höher. Sie können jeden Clustertyp verwenden, der Arbeitslasten ausführen kann. Testen Sie bei Bedarf GKE on Bare Metal in Compute Engine oder sehen Sie sich die Übersicht über die Clustererstellung an. bmctl
-Befehlszeilentool Weitere Informationen finden Sie unterbmctl
-Tool herunterladen und installieren.
VM-Laufzeit in Google Distributed Cloud aktivieren
Die VM-Laufzeit in Google Distributed Cloud wird automatisch in GKE on Bare Metal-Version 1.10 oder höher installiert, ist aber standardmäßig deaktiviert. Bevor Sie VM-Ressourcen in GKE on Bare Metal ausführen können, müssen Sie die VM-Laufzeit in Google Distributed Cloud aktivieren.
bmctl
Verwenden Sie das Tool
bmctl
, um die Laufzeit zu aktivieren:bmctl enable vmruntime --kubeconfig KUBECONFIG_PATH
Geben Sie den Pfad zur kubeconfig-Datei für Ihren Cluster an. GKE on Bare Metal generiert die kubeconfig-Datei auf der Administrator-Workstation, wenn Sie einen Cluster erstellen. Der Pfad ist standardmäßig
bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig
.Wenn die VM-Laufzeit in Google Distributed Cloud bereits aktiviert ist, gibt der Befehl einen Fehler zurück.
Zusätzliche Einstellungen, z. B. für die Emulation oder das Image-format, können durch Bearbeiten der benutzerdefinierten Ressource VMRuntime
konfiguriert werden.
Benutzerdefinierte Ressource
Zum Aktivieren der Laufzeit aktualisieren Sie die benutzerdefinierte Ressource VMRuntime
: Diese benutzerdefinierte Ressource wird standardmäßig installiert.
Bearbeiten Sie die benutzerdefinierte
VMRuntime
-Ressource:kubectl edit vmruntime
Legen Sie
enabled:true
in der Spezifikation fest:apiVersion: vm.cluster.gke.io/v1 kind: VMRuntime metadata: name: vmruntime spec: enabled: true # useEmulation defaults to "false" if not set. useEmulation: true # vmImageFormat defaults to "qcow2" if not set. vmImageFormat: qcow2
Im vorherigen Abschnitt
spec
können die folgenden Werte festgelegt werden:enabled
: auf „true“ setzen, um die VM-Laufzeit in Google Distributed Cloud zu aktivierenuseEmulation
: Wenn Ihr Knoten die Hardwarevirtualisierung nicht unterstützt oder Sie sich nicht sicher sind, legen Sie den Wert auf "true" fest. Die Hardwarevirtualisierung bietet eine bessere Leistung als die Softwareemulation. Das FelduseEmulation
ist standardmäßig auffalse
gesetzt, wenn es nicht angegeben ist.vmImageFormat
: Unterstützt zwei Laufwerk-Image-Format-Werte:raw
undqcow2
. Wenn SievmImageFormat
nicht festlegen, verwendet die VM-Laufzeit in Google Distributed Cloud das Laufwerk-Image-Formatraw
zum Erstellen von VMs. 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.
Speichern Sie die benutzerdefinierte Ressource in Ihrem Editor.
Prüfen Sie, ob die benutzerdefinierte Ressource
VMRuntime
aktiviert ist:kubectl describe vmruntime vmruntime
Die Details der benutzerdefinierten Ressource
VMRuntime
enthalten den AbschnittStatus
. VM-Laufzeit in Google Distributed Cloud ist aktiviert und funktioniert, wennVMRuntime.Status.Ready
alstrue
angezeigt wird.
VM-Laufzeit in Google Distributed Cloud deaktivieren
Wenn Sie die VM-Laufzeit in Google Distributed Cloud nicht mehr verwenden müssen, können Sie dieses Feature deaktivieren.
bmctl
Verwenden Sie das Tool
bmctl
, um die Laufzeit zu aktivieren:bmctl disable vmruntime --kubeconfig KUBECONFIG_PATH \ --force=true
Geben Sie den Pfad zur kubeconfig-Datei für Ihren Cluster und die Werte für die folgenden Konfigurationsoptionen an:
--force
: Gesetzt auftrue
, um zu bestätigen, dass Sie vorhandene VM-Ressourcen löschen möchten. Der Standardwert istfalse
.
Benutzerdefinierte Ressource
Zum Deaktivieren der Laufzeit aktualisieren Sie die benutzerdefinierte Ressource VMRuntime
:
Bearbeiten Sie die benutzerdefinierte
VMRuntime
-Ressource:kubectl edit vmruntime
Legen Sie
enabled:false
in der Spezifikation fest:apiVersion: vm.cluster.gke.io/v1` kind: VMRuntime metadata: name: vmruntime spec: enabled: false useEmulation: true vmImageFormat: qcow2
Speichern Sie die aktualisierte benutzerdefinierte Ressourcenspezifikation in Ihrem Editor.
Wenn Sie prüfen möchten, ob die benutzerdefinierte Ressource
VMRuntime
deaktiviert ist, rufen Sie die Pods auf, die im Namespacevm-system
ausgeführt werden:kubectl get pods --namespace vm-system
Die VM-Laufzeit in Google Distributed Cloud ist deaktiviert, wenn nur die Pods, die zur
vmruntime-controller-manager
-Bereitstellung gehören, im Namespace ausgeführt werden.
Informationen zum Verhalten laufender VMs
Die Annotation baremetal.cluster.gke.io/vmrumtime-force-disable
kann für die VM-Laufzeit in einer Google Distributed Cloud-Ressource verwendet werden, um das Verhalten zu definieren, wenn die Laufzeit deaktiviert ist, während VMs im Cluster ausgeführt werden.
Das folgende Beispiel zeigt, dass der Wert dieser Annotation standardmäßig auf false
gesetzt ist:
// VM runtime yaml file
apiVersion: vm.cluster.gke.io/v1
kind: VMRuntime
metadata:
annotations:
baremetal.cluster.gke.io/vmrumtime-force-disable: "false"
name: vmruntime
[...]
Wenn diese Annotation auf false
gesetzt ist, versucht die VM-Laufzeit in Google Distributed Cloud, laufende VMs zu schützen. Löschen Sie alle ausgeführten VMs, bevor die VM-Laufzeit in Google Distributed Cloud deaktiviert wird, oder geben Sie den Parameter --force=true
mit dem Befehl bmctl disable vmruntime
an, wie im vorherigen Abschnitt gezeigt.
In der folgenden Tabelle wird erläutert, was mit aktiven VMs geschieht, wenn diese Annotation auf true
oder false
gesetzt ist und wenn Sie den Parameter --force=true
angeben oder nicht:
Cluster Status | --force parameter | vmrumtime-force-disable Annotation | Verhalten |
---|---|---|---|
Keine VMs | – | – | VM-Laufzeit in Google Distributed Cloud deaktivieren. |
Vorhandene VMs | Ja | Ja | Alle laufenden VMs und die zugehörigen Ressourcen löschen. Deaktivieren Sie die VM-Laufzeit in Google Distributed Cloud. |
Ja | Falsch | Alle laufenden VMs und die zugehörigen Ressourcen löschen. Deaktivieren Sie die VM-Laufzeit in Google Distributed Cloud. | |
Falsch | Ja | Aufforderung zum Löschen laufender VMs und zugehöriger Ressourcen. Wenn alle ausgeführten VMs gelöscht wurden, deaktivieren Sie die VM-Laufzeit in Google Distributed Cloud. | |
Falsch | Falsch | Keine vorhandenen laufenden VMs löschen. Deaktivieren Sie die VM-Laufzeit in Google Distributed Cloud nicht. Der bmctl -Befehl gibt einen Fehler zurück. |
Preflight-Prüfung für VM-Laufzeit in Google Distributed Cloud
Die Preflight-Prüfung zur VM-Laufzeit in Google Distributed Cloud validiert eine Reihe von Voraussetzungen in der Maschinenumgebung, bevor die VM-Laufzeit in Google Distributed Cloud und auf VMs verwendet wird. Das Erstellen von VMs wird blockiert, wenn die Preflight-Prüfung der VM-Laufzeit in Google Distributed Cloud fehlgeschlagen ist.
Die Preflight-Prüfung für die VM-Laufzeit in Google Distributed Cloud wird automatisch ausgeführt, wenn spec.enabled
auf „true“ gesetzt ist.
kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH
Die Preflight-Prüfung für die VM-Laufzeit in Google Distributed Cloud wird ausgeführt, wenn Sie einen der folgenden Vorgänge ausführen:
- VM-Laufzeit in Google Distributed Cloud aktivieren
- VM-Laufzeit in Google Distributed Cloud-Features wie useEmulation aktivieren
- Cluster aktualisieren
- Label
kubevm.io/VM-SkipSchedule
bei Knoten entfernen - Erstellen Sie unabhängig von der VM-Laufzeit im Preflight-Prüfungsobjekt von Google Distributed Cloud. Dazu führen Sie den Befehl
bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH
aus oder wenden ein YAML-ManifestVMRuntimePreflightCheck
an.
Sie können VMs starten, wenn die letzte Preflight-Prüfung für die VM-Laufzeit in Google Distributed Cloud abgeschlossen ist. Wenn die Preflight-Prüfung fehlschlägt, wird die VM-Erstellung blockiert und Sie erhalten Preflight-Prüfungsfehler.
Erfolg der Preflight-Prüfung prüfen
Führen Sie die folgenden Befehle aus, um zu prüfen, ob die Preflight-Prüfungen erfolgreich waren:
Suchen Sie die letzten ausgeführten Preflight-Prüfungen:
kubectl get vmruntimepfc -n vm-system --kubeconfig KUBECONFIG_PATH
Die Ausgabe sollte in etwa so aussehen:
NAME PASS AGE vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e false 42s vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 true 21s
Führen Sie den folgenden Befehl aus, um den Status einer Preflight-Prüfung zu ermitteln:
kubectl get vmruntime vmruntime -o yaml --kubeconfig KUBECONFIG_PATH
... preflightCheckSummary: preflightCheckSummary: featureStatuses: CPU: passed: true KVM: passed: true preflightCheckName: vmruntime-preflight-check-f8d71751-a01c-471e-bab5-3370fc2addd5 preflightCheckPassed: true ... ```
Debug-Preflight-Prüfung schlägt fehl
Wenn die Preflight-Prüfung fehlschlägt, führen Sie die folgenden Schritte zur Fehlerbehebung aus:
Findet die letzten ausgeführten Preflight-Prüfungen.
kubectl get vmruntimepfc -n vm-system
Weitere Informationen finden Sie im Status dieser Preflight-Prüfung.
kubectl get vmruntimepfc -n vm-system \ vmruntime-preflight-check-6ee61513-ea5d-4340-9374-90396cac129e -o yaml \ --kubeconfig KUBECONFIG_PATH
... status: checks: worker-0--52229ee15841099-22c41577139a7b8c.lab.anthos: passed: false results: - checkName: CPU passed: true - checkName: KVM message: | command terminated with exit code 1 ls: /mnt/dev/kvm: No such file or directory passed: false ...
Beheben Sie das Problem und führen Sie die Preflight-Prüfung für die VM-Laufzeit in Google Distributed Cloud noch einmal aus. Im Folgenden sehen Sie ein Beispiel für ein VMRuntimePreflightCheck-YAML-Manifest:
apiVersion: vm.cluster.gke.io/v1 kind: VMRuntimePreflightCheck metadata: name: vmruntime-preflight-check-manual namespace: vm-system