Configura un criterio di alta disponibilità per le VM

Questo documento mostra come configurare il criterio di alta disponibilità per le macchine virtuali (VM) in esecuzione utilizzando il runtime VM su GDC.

Quando abiliti il runtime VM su GDC, il cluster crea un oggetto VMHighAvailabilityPolicy denominato default. Questo oggetto specifica la strategia di recupero predefinita in caso di errore di un nodo del cluster su cui è in esecuzione una VM. Le possibili strategie di recupero predefinite sono:

  • Riprogramma: riprogramma la VM su un altro nodo del cluster.
  • Ignora: non fare nulla.

Inizialmente, la strategia di recupero predefinita è impostata su Reschedule.

Una strategia di recupero predefinita di Reschedule è appropriata nella seguente situazione:

  • Il cluster ha almeno due nodi worker.

  • Il provisioning dei dischi VM viene eseguito utilizzando una classe di archiviazione basata su file di rete. Vale a dire che la classe di archiviazione si basa su un file system di rete che coordina POSIX blocchi di file tra diversi client. File system di rete (NFS) è un esempio di classe di archiviazione basata su file di rete.

Se le VM utilizzano l'archiviazione locale o un sistema di archiviazione basato su blocchi, ti consigliamo di impostare la strategia di recupero predefinita su Ignore. Forniamo questo consiglio per i seguenti motivi:

  • Se le VM utilizzano lo spazio di archiviazione locale e un nodo non funziona, non c'è modo di recuperare i dati archiviati e spostarli in un nuovo nodo.

  • Se le tue VM usano un sistema di archiviazione basato su blocchi, potrebbero non avere garanzie di scollegamento sufficienti. Questo potrebbe comportare l'accesso simultaneo al disco e il danneggiamento dei dati durante la pianificazione delle VM.

Ispeziona l'oggetto VMHighavailabilityPolicy

Verifica che sia presente un oggetto VMHighavailabilityPolicy:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy --namespace vm-system

Sostituisci USER_CLUSTER_KUBECONFIG con il percorso del cluster utente kubeconfig.

L'output mostra che esiste un oggetto VMHighAvailabilityPolicy denominato default. Nell'output puoi anche vedere il valore corrente di defaultRecoveryStrategy. Ad esempio, l'output seguente mostra che il valore attuale di defaultRecoveryStrategy è Reschedule:

vm-system   default   5m55s   Reschedule   15s   1m30s

Visualizza una panoramica dettagliata dell'oggetto VMHighAvailabilityPolicy:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy \
    --namespace vm-system --output yaml

Output di esempio:

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

Modificare la strategia di recupero predefinita

In determinate situazioni, ti consigliamo di modificare il ripristino predefinito strategia. Ad esempio, se le VM utilizzano lo spazio di archiviazione locale o un file system non basato su file di rete, ti consigliamo di modificare il valore di defaultRecoveryStrategy in Ignore.

Per modificare il valore di defaultRecoveryStrategy, apri il Oggetto VMHighavailabilityPolicy per la modifica:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit VMHighAvailabilityPolicy \
    default --namespace vm-system

Nell'editor di testo, modifica il valore di defaultRecoveryStrategy con un valore scelto da te: Reschedule o Ignore. Chiudi l'editor di testo.

Esegui l'override della strategia di recupero predefinita per una VM

La strategia di recupero predefinita si applica a tutte le VM in esecuzione nel cluster. Tuttavia, potrebbe essere necessario eseguire l'override della strategia di recupero predefinita per le singole VM.

Ad esempio, supponiamo che per la maggior parte delle VM venga eseguito il provisioning basato su file di rete, ma per alcune VM viene eseguito il provisioning di archiviazione a blocchi. Per ogni VM che utilizza l'archiviazione basata su blocchi, consigliamo di eseguire l'override della strategia di recupero predefinita impostando strategia di ripristino per la singola VM a Ignore.

Per eseguire l'override della strategia di recupero predefinita per una VM, aggiungi un'annotazione vm.cluster.gke.io/vm-ha-recovery-strategy sia all'oggetto VirtualMachineInstance (VMI) sia all'oggetto GVM.

Ad esempio, questi comandi impostano la strategia di recupero su Ignore per una VM chiamata my-vm:

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

Se vuoi rimuovere le annotazioni in un secondo momento, utilizza il trattino alla fine del il nome dell'annotazione. Ad esempio:

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-

Configurazione avanzata

Oltre a configurare la strategia di recupero predefinita, puoi configurare il seguenti:

  • Intervallo di heartbeat del nodo: il tempo che intercorre tra un heartbeat inviato da ciascun nodo del cluster

  • Periodo di tolleranza del monitoraggio dei nodi: il periodo di tempo massimo durante il quale un nodo può non inviare un heartbeat prima di essere considerato non funzionante

Nella maggior parte dei casi, i valori predefiniti per l'intervallo heartbeat e il periodo di tolleranza sono appropriato. Tuttavia, puoi scegliere di modificare questi valori se vuoi ottimizzare il compromesso tra velocità di recupero e overhead. Un breve l'intervallo del battito cardiaco abbrevia il tempo di recupero, ma aumenta anche l'overhead. In un cluster di grandi dimensioni, potresti scegliere di allungare l'intervallo di battito cardiaco, perché heartbeat frequenti da molti nodi possono creare un carico inaccettabile il server API Kubernetes.

Mantieni l'intervallo di heartbeat inferiore al periodo di tolleranza per evitare i casi in cui un un singolo heartbeat mancante determina che un nodo viene considerato non integro.

Esegui kubectl edit per aprire l'oggetto VMHighavailabilityPolicy per la modifica. Imposta nodeHeartbeatInterval e nodeMonitorGracePeriod a valori di tua scelta.

spec:
  defaultRecoveryStrategy: Reschedule
  nodeHeartbeatInterval: 15s
  nodeMonitorGracePeriod: 1m30s