Configura un criterio di alta disponibilità per le VM

Questo documento mostra come configurare il criterio di alta disponibilità per le macchine virtuali (VM) eseguite con Anthos VM Runtime.

Quando attivi il runtime VM di Anthos, 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 che esegue una VM. Le possibili strategie di ripristino predefinite sono:

  • Ripianifica: ripianifica la VM su un altro nodo del cluster.
  • Ignora: non intervenire.

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

Una strategia di recupero predefinita per 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. In altre parole, la classe di archiviazione si basa su un file system di rete che coordina i blocchi dei file POSIX tra client diversi. Network File System (NFS) è un esempio di classe di archiviazione basata su file di rete.

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

  • Se le VM utilizzano l'archiviazione locale e un nodo non funziona, non è possibile recuperare i dati archiviati e spostarli su un nuovo nodo.

  • Se le VM utilizzano un sistema di archiviazione a blocchi, lo spazio di archiviazione potrebbe non avere garanzie sufficienti per lo scollegamento. Questo potrebbe causare 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 file kubeconfig del cluster utente.

L'output mostra che è presente un oggetto VMHighAvailabilityPolicy denominato default. Nell'output puoi anche visualizzare il valore corrente di defaultRecoveryStrategy. Ad esempio, il seguente output 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 alcune situazioni, ti consigliamo di modificare la strategia di recupero predefinita. Ad esempio, se le tue VM utilizzano l'archiviazione locale o un file system non basato su file di rete, ti consigliamo di cambiare il valore di defaultRecoveryStrategy in Ignore.

Per modificare il valore di defaultRecoveryStrategy, apri l'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 di tua scelta: Reschedule o Ignore. Chiudi l'editor di testo.

Sostituire la strategia di recupero predefinita per una VM

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

Ad esempio, supponiamo che il provisioning della maggior parte delle VM venga eseguito con una classe di archiviazione basata su file di rete, ma che per alcune VM venga eseguito il provisioning di una classe di archiviazione basata su blocchi. Per ogni VM che utilizza l'archiviazione basata su blocchi, ti consigliamo di eseguire l'override della strategia di recupero predefinita impostando la strategia di recupero per la singola VM su 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 VirtualVMInstance (VMI) che all'oggetto GVM.

Ad esempio, questi comandi impostano la strategia di recupero su Ignore per una VM denominata 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 un trattino alla fine del 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 alla configurazione della strategia di recupero predefinita, puoi configurare quanto segue:

  • Intervallo battito cardiaco nodo: il tempo tra battiti cardiaci inviati da ogni nodo del cluster

  • Periodo di tolleranza per il monitoraggio dei nodi: il tempo massimo per cui un nodo non riesce a inviare un battito cardiaco prima che sia considerato non integro.

Nella maggior parte dei casi, i valori predefiniti per l'intervallo del battito cardiaco e il periodo di tolleranza sono appropriati. Tuttavia, potresti scegliere di regolare questi valori se vuoi ottimizzare il compromesso tra velocità di ripristino e overhead. Un intervallo di battito cardiaco più breve riduce i tempi di recupero, ma aumenta anche i costi generali. In un cluster di grandi dimensioni, potresti scegliere di allungare l'intervallo del battito cardiaco, perché i battiti cardiaci frequenti di molti nodi potrebbero creare un carico inaccettabile sul server dell'API Kubernetes.

Mantieni l'intervallo del battito cardiaco più basso del periodo di tolleranza per evitare casi in cui un singolo battito del cuore perso determina un stato non integro.

Esegui kubectl edit per aprire l'oggetto VMHighAvailabilityPolicy da modificare. Imposta nodeHeartbeatInterval e nodeMonitorGracePeriod sui valori che preferisci.

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