VM-Laufzeit auf GDC aktivieren oder deaktivieren

In diesem Dokument wird beschrieben, wie Sie die VM-Laufzeit in Google Distributed Cloud aktivieren oder deaktivieren. Dazu aktualisieren Sie entweder die benutzerdefinierte Ressource VMRuntime oder führen bmctl-Befehle aus.

Hinweise

Zum Aktivieren oder Deaktivieren der VM-Laufzeit auf GDC benötigen Sie Zugriff auf die folgenden Ressourcen und Tools:

VM-Laufzeit auf GDC aktivieren

Die VM-Laufzeit auf GDC wird automatisch in Google Distributed Cloud Version 1.10 oder höher installiert, aber standardmäßig deaktiviert. Bevor Sie VM-Ressourcen in Ihrer Google Distributed Cloud ausführen können, müssen Sie die VM-Laufzeit auf GDC 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. Google Distributed Cloud generiert die kubeconfig-Datei auf der Administratorworkstation, wenn Sie einen Cluster erstellen. Der Pfad ist standardmäßig bmctl-workspace/CLUSTER_NAME/CLUSTER_NAME-kubeconfig.

    Wenn die VM-Laufzeit auf GDC 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.

  1. Bearbeiten Sie die benutzerdefinierte VMRuntime-Ressource:

    kubectl edit vmruntime
    
  2. 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: Legen Sie den Wert auf „true“ fest, um die VM-Laufzeit auf GDC zu aktivieren.
    • useEmulation: 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 Feld useEmulation ist standardmäßig auf false gesetzt, wenn es nicht angegeben ist.
    • vmImageFormat: Unterstützt zwei Laufwerk-Image-Format-Werte: raw und qcow2. Wenn Sie vmImageFormat nicht festlegen, verwendet die VM-Laufzeit auf GDC das Laufwerk-Image-Format raw zum Erstellen von VMs. Das Format raw bietet möglicherweise eine bessere Leistung gegenüber qcow2, 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 unter Dateiformate für Laufwerk-Images in der QEMU-Dokumentation.
  3. Speichern Sie die benutzerdefinierte Ressource in Ihrem Editor.

  4. Prüfen Sie, ob die benutzerdefinierte Ressource VMRuntime aktiviert ist:

    kubectl describe vmruntime vmruntime
    

    Die Details der benutzerdefinierten Ressource VMRuntime enthalten den Abschnitt Status. VM-Laufzeit auf GDC ist aktiviert und funktioniert, wenn VMRuntime.Status.Ready als true angezeigt wird.

VM-Laufzeit auf GDC deaktivieren

Wenn Sie die VM-Laufzeit auf GDC 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 auf true, um zu bestätigen, dass Sie vorhandene VM-Ressourcen löschen möchten. Der Standardwert ist false.

Benutzerdefinierte Ressource

Zum Deaktivieren der Laufzeit aktualisieren Sie die benutzerdefinierte Ressource VMRuntime:

  1. Bearbeiten Sie die benutzerdefinierte VMRuntime-Ressource:

    kubectl edit vmruntime
    
  2. 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
    
  3. Speichern Sie die aktualisierte benutzerdefinierte Ressourcenspezifikation in Ihrem Editor.

  4. Prüfen Sie, ob die benutzerdefinierte Ressource VMRuntime deaktiviert ist. Rufen Sie dazu die Pods auf, die im Namespace vm-system ausgeführt werden:

    kubectl get pods --namespace vm-system
    

    VM-Laufzeit in GDC 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 auf der GDC-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 auf GDC, laufende VMs zu schützen. Löschen Sie alle ausgeführten VMs, bevor die VM-Laufzeit auf GDC 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 Deaktivieren Sie VM-Laufzeit auf GDC.
Vorhandene VMs Wahr Wahr Alle laufenden VMs und die zugehörigen Ressourcen löschen. Deaktivieren Sie die VM-Laufzeit auf GDC.
Wahr Falsch Alle laufenden VMs und die zugehörigen Ressourcen löschen. Deaktivieren Sie die VM-Laufzeit auf GDC.
Falsch Wahr Aufforderung zum Löschen laufender VMs und zugehöriger Ressourcen. Wenn alle ausgeführten VMs gelöscht wurden, deaktivieren Sie die VM-Laufzeit auf GDC.
Falsch Falsch Keine vorhandenen laufenden VMs löschen. Deaktivieren Sie nicht die VM-Laufzeit auf GDC. Der bmctl-Befehl gibt einen Fehler zurück.

VM-Laufzeit in der GDC-Preflight-Prüfung

Die Preflight-Prüfung für VM-Laufzeit in der GDC prüft eine Reihe von Voraussetzungen in der Maschinenumgebung, bevor die VM-Laufzeit für GDC und VMs verwendet wird. Die VM-Erstellung wird blockiert, wenn die VM-Laufzeit in der GDC-Preflight-Prüfung fehlschlägt. Die VM-Laufzeit auf der GDC-Preflight-Prüfung wird automatisch ausgeführt, wenn spec.enabled auf „true“ gesetzt ist.

kubectl label nodes NODE_NAME "kubevm.io/VM-SkipSchedule"= --kubeconfig KUBECONFIG_PATH

Die VM-Laufzeit in der GDC-Preflight-Prüfung wird ausgeführt, wenn Sie einen der folgenden Vorgänge ausführen:

  1. VM-Laufzeit auf GDC aktivieren

  2. VM-Laufzeit auf GDC-Features wie useEmulation aktivieren

  3. Cluster aktualisieren

  4. Label kubevm.io/VM-SkipSchedule an Knoten entfernen

  5. Erstellen Sie unabhängig davon ein VM-Laufzeit in der GDC-Preflight-Prüfung, indem Sie den Befehl bmctl check vmruntimepfc --kubeconfig KUBECONFIG_PATH ausführen oder ein VMRuntimePreflightCheck-YAML-Manifest anwenden.

Sie können VMs starten, wenn die letzte VM-Laufzeit in der GDC-Preflight-Prüfung erfolgreich war. 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:

  1. 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
    
  2. 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
    ...
    

Fehler bei Preflight-Prüfung beheben

Wenn die Preflight-Prüfung fehlschlägt, führen Sie zur Fehlerbehebung die folgenden Schritte aus:

  1. Suchen Sie die letzten ausgeführten Preflight-Prüfungen.

    kubectl get vmruntimepfc -n vm-system
    
  2. Prüfen Sie den Status dieser Preflight-Prüfung, um weitere Informationen zu erhalten.

    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
    ...
    
  3. Beheben Sie das Problem und führen Sie die VM-Laufzeit in der GDC-Preflight-Prüfung noch einmal aus. Das folgende Beispiel zeigt ein YAML-Manifest für VMRuntimePreflightCheck:

    apiVersion: vm.cluster.gke.io/v1
    kind: VMRuntimePreflightCheck
    metadata:
      name: vmruntime-preflight-check-manual
      namespace: vm-system
    

Nächste Schritte