Questo documento mostra come configurare la policy di alta disponibilità per le macchine virtuali (VM) che vengono eseguite 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 ripristino predefinita nel caso in cui un nodo del cluster che esegue una VM non funzioni. Le possibili strategie di ripristino predefinite sono:
- Riprogramma: riprogramma la VM su un altro nodo del cluster.
- Ignora: non fare nulla.
Inizialmente, la strategia di ripristino predefinita è impostata su Reschedule.
Una strategia di ripristino predefinita di Reschedule è appropriata nella seguente situazione:
Il cluster ha almeno due nodi worker.
I dischi delle VM vengono sottoposti a provisioning utilizzando una classe di archiviazione basata su file di rete. Ovvero, la classe di archiviazione si basa su un file system di rete che coordina i blocchi di file POSIX su diversi client. 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 basato su blocchi, ti consigliamo di impostare la strategia di ripristino predefinita su Ignore. Ti consigliamo di farlo per i seguenti motivi:
Se le VM utilizzano l'archiviazione locale e un nodo non funziona, non è possibile recuperare i dati archiviati e spostarli in un nuovo nodo.
Se le VM utilizzano un sistema di archiviazione basato su blocchi, l'archiviazione potrebbe non avere garanzie di scollegamento sufficienti. Ciò potrebbe comportare l'accesso simultaneo al disco e il danneggiamento dei dati durante la pianificazione delle VM.
Esaminare l'oggetto VMHighAvailabilityPolicy
Verifica che esista 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 esiste un oggetto VMHighAvailabilityPolicy denominato default. Nell'output puoi anche visualizzare il valore corrente di defaultRecoveryStrategy. Ad esempio, l'output seguente mostra che il valore corrente di defaultRecoveryStrategy è Reschedule:
vm-system default 5m55s Reschedule 15s 1m30s
Visualizza una visualizzazione 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 ripristino predefinita
In alcune situazioni, ti consigliamo di modificare la strategia di ripristino predefinita. Ad esempio, se le VM utilizzano l'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 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 a tua scelta: Reschedule o Ignore. Chiudi l'editor di testo.
Eseguire l'override della strategia di ripristino predefinita per una VM
La strategia di ripristino predefinita si applica a tutte le VM in esecuzione nel cluster. Tuttavia, potrebbe essere necessario eseguire l'override della strategia di ripristino predefinita per le singole VM.
Ad esempio, supponiamo che la maggior parte delle VM sia sottoposta a provisioning con una classe di archiviazione basata su file di rete, ma alcune VM siano sottoposte a provisioning con 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 ripristino predefinita impostando la strategia di ripristino per la singola VM su Ignore.
Per eseguire l'override della strategia di ripristino 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 ripristino 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 a configurare la strategia di ripristino predefinita, puoi configurare quanto segue:
Intervallo di heartbeat del nodo: il tempo tra gli heartbeat inviati da ogni nodo del cluster
Periodo di tolleranza del monitoraggio dei nodi: il tempo massimo in cui un nodo può non inviare un heartbeat prima di essere considerato non integro
Nella maggior parte dei casi, i valori predefiniti per l'intervallo di heartbeat e il periodo di tolleranza sono appropriati. Tuttavia, puoi scegliere di modificare questi valori se vuoi ottimizzare il compromesso tra velocità di ripristino e overhead. Un intervallo di heartbeat più breve ridurrà il tempo di ripristino, ma aumenterà anche l'overhead. In un cluster di grandi dimensioni, puoi scegliere di allungare l'intervallo di heartbeat, perché gli heartbeat frequenti di molti nodi potrebbero creare un carico inaccettabile sul server API Kubernetes.
Mantieni l'intervallo di heartbeat inferiore al periodo di tolleranza per evitare casi in cui un singolo heartbeat mancato comporti la classificazione di un nodo come non integro.
Esegui kubectl edit per aprire l'oggetto VMHighAvailabilityPolicy per la modifica. Imposta nodeHeartbeatInterval e nodeMonitorGracePeriod sui valori che preferisci.
spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s