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