In diesem Dokument erfahren Sie, wie Sie die Hochverfügbarkeitsrichtlinie für virtuelle Maschinen (VMs) konfigurieren, die mit VM Runtime on GDC ausgeführt werden.
Wenn Sie VM Runtime on GDC aktivieren, erstellt der Cluster ein VMHighAvailabilityPolicy-Objekt mit dem Namen default
. In diesem Objekt wird die Standard-Wiederherstellungsstrategie für den Fall angegeben, dass ein Clusterknoten, auf dem eine VM ausgeführt wird, ausfällt. Mögliche Standard-Wiederherstellungsstrategien:
- Verschieben: Verschieben Sie die VM auf einen anderen Clusterknoten.
- Ignorieren: Unternehmen Sie nichts.
Die Standardwiederherstellungsstrategie ist auf Reschedule
eingestellt.
Die Standardwiederherstellungsstrategie Reschedule
ist in folgenden Situationen geeignet:
Ihr Cluster hat mindestens zwei Worker-Knoten.
Ihre VM-Laufwerke werden mit einer netzwerkdateibasierten Speicherklasse bereitgestellt. Die Speicherklasse basiert also auf einem Netzwerkdateisystem, das POSIX-Dateisperren über verschiedene Clients hinweg koordiniert. Network File System (NFS) ist ein Beispiel für eine netzwerkdateibasierte Speicherklasse.
Wenn Ihre VMs lokalen Speicher oder ein blockbasiertes Speichersystem verwenden, empfehlen wir, die Standard-Wiederherstellungsstrategie auf Ignore
festzulegen. Wir empfehlen dies aus folgenden Gründen:
Wenn Ihre VMs lokalen Speicher verwenden und ein Knoten ausfällt, können die gespeicherten Daten nicht wiederhergestellt und auf einen neuen Knoten verschoben werden.
Wenn Ihre VMs ein blockbasiertes Speichersystem verwenden, sind die Speichergarantien für die Trennung möglicherweise nicht ausreichend. Das kann zu gleichzeitigem Laufwerkzugriff und Datenbeschädigungen während der VM-Planung führen.
VMHighAvailabilityPolicy-Objekt prüfen
Prüfen Sie, ob ein VMHighAvailabilityPolicy-Objekt vorhanden ist:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy --namespace vm-system
Ersetzen Sie USER_CLUSTER_KUBECONFIG durch den Pfad der kubeconfig-Datei des Nutzerclusters.
Die Ausgabe zeigt, dass es ein VMHighAvailabilityPolicy-Objekt mit dem Namen default
gibt. In der Ausgabe sehen Sie auch den aktuellen Wert von defaultRecoveryStrategy
. In der folgenden Ausgabe ist beispielsweise zu sehen, dass der aktuelle Wert von defaultRecoveryStrategy
Reschedule
ist:
vm-system default 5m55s Reschedule 15s 1m30s
Detaillierte Informationen zum Objekt „VMHighAvailabilityPolicy“ abrufen:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy \ --namespace vm-system --output yaml
Beispielausgabe:
apiVersion: vm.cluster.gke.io/v1alpha1 kind: VMHighAvailabilityPolicy metadata: ... labels: app.kubernetes.io/component: kubevirt app.kubernetes.io/managed-by: virt-operator kubevirt.io: virt-api name: default namespace: vm-system .. spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s
Standard-Wiederherstellungsstrategie ändern
In bestimmten Situationen empfehlen wir, die Standard-Wiederherstellungsstrategie zu ändern. Wenn Ihre VMs beispielsweise lokalen Speicher oder ein nicht netzwerkbasiertes Dateisystem verwenden, empfehlen wir, den Wert von defaultRecoveryStrategy
in Ignore
zu ändern.
Um den Wert von defaultRecoveryStrategy
zu ändern, öffnen Sie das Objekt „VMHighAvailabilityPolicy“ zur Bearbeitung:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit VMHighAvailabilityPolicy \ default --namespace vm-system
Ändern Sie in Ihrem Texteditor den Wert von defaultRecoveryStrategy
in einen Wert Ihrer Wahl: Reschedule
oder Ignore
. Schließen Sie den Texteditor.
Standard-Wiederherstellungsstrategie für eine VM überschreiben
Die Standard-Wiederherstellungsstrategie gilt für alle VMs, die im Cluster ausgeführt werden. Sie werden die Standard-Wiederherstellungsstrategie für einzelne VMs jedoch möglicherweise überschreiben müssen.
Angenommen, die meisten Ihrer VMs wurden mit einer netzwerkdateibasierten Speicherklasse, einige jedoch mit einer blockbasierten Speicherklasse bereitgestellt. Wir empfehlen, für jede VM, die blockbasierten Speicher verwendet, die Standard-Wiederherstellungsstrategie zu überschreiben, indem Sie die Wiederherstellungsstrategie für die einzelne VM auf Ignore
festlegen.
Wenn Sie die Standard-Wiederherstellungsstrategie für eine VM überschreiben möchten, fügen Sie sowohl dem VirtualMachineInstance-Objekt (VMI) als auch dem GVM-Objekt eine vm.cluster.gke.io/vm-ha-recovery-strategy
-Anmerkung hinzu.
Mit diesen Befehlen wird beispielsweise die Wiederherstellungsstrategie für eine VM mit dem Namen my-vm
auf Ignore
festgelegt:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate vmi my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy=Ignore --overwrite kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate gvm my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy=Ignore --overwrite
Wenn Sie die Anmerkungen später entfernen möchten, verwenden Sie am Ende des Anmerkungsnamens einen Bindestrich. Beispiele:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate vmi my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy- kubectl --kubeconfig USER_CLUSTER_KUBECONFIG \ annotate gvm my-vm \ vm.cluster.gke.io/vm-ha-recovery-strategy-
Erweiterte Konfiguration
Zusätzlich zur Standard-Wiederherstellungsstrategie können Sie Folgendes konfigurieren:
Knoten-Heartbeat-Intervall: Die Zeitspanne zwischen den Heartbeats, die von den einzelnen Clusterknoten gesendet werden.
Knotenmonitor-Kulanzzeit: Die maximale Zeitspanne, in der ein Knoten keinen Heartbeat senden darf, bevor er als fehlerhaft eingestuft wird.
In den meisten Fällen sind die Standardwerte für Heartbeat-Intervall und Kulanzzeitraum ausreichend. Sie können diese Werte jedoch anpassen, wenn Sie den Kompromiss zwischen Wiederherstellungsgeschwindigkeit und Overhead optimieren möchten. Ein kürzeres Heartbeat-Intervall verkürzt die Wiederherstellungszeit, erhöht aber auch den Overhead. In einem großen Cluster können Sie das Heartbeat-Intervall verlängern, da häufige Heartbeats von vielen Knoten eine unzulässige Belastung für den Kubernetes API-Server bedeuten können.
Das Heartbeat-Intervall sollte kürzer als der Kulanzzeitraum sein, damit ein Knoten nicht als fehlerhaft eingestuft wird, wenn ein einzelner Heartbeat verpasst wird.
Führen Sie kubectl edit
aus, um das Objekt „VMHighAvailabilityPolicy“ zur Bearbeitung zu öffnen. Legen Sie für nodeHeartbeatInterval
und nodeMonitorGracePeriod
Werte Ihrer Wahl fest.
spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s