Este documento mostra como configurar a política de alta disponibilidade para máquinas virtuais (VMs) executadas com o tempo de execução de VMs no GDC.
Quando
ativa o tempo de execução de VMs no GDC,
o cluster cria um objeto VMHighAvailabilityPolicy denominado default
. Este objeto especifica a estratégia de recuperação predefinida caso ocorra uma falha num nó do cluster que esteja a executar uma VM. As estratégias de recuperação predefinidas possíveis são:
- Reagendar: reagende a VM noutro nó do cluster.
- Ignorar: não fazer nada.
Inicialmente, a estratégia de recuperação predefinida está definida como Reschedule
.
Uma estratégia de recuperação predefinida de Reschedule
é adequada na seguinte situação:
O cluster tem, pelo menos, dois nós de trabalho.
Os discos da VM são aprovisionados através de uma classe de armazenamento baseada em ficheiros de rede. Isto é, a classe de armazenamento baseia-se num sistema de ficheiros de rede que coordena os bloqueios de ficheiros POSIX em diferentes clientes. O Sistema de Arquivos de Rede (NFS) é um exemplo de uma classe de armazenamento baseada em ficheiros de rede.
Se as suas VMs estiverem a usar armazenamento local ou um sistema de armazenamento baseado em blocos,
recomendamos que defina a estratégia de recuperação predefinida como Ignore
. Fazemos esta recomendação pelos seguintes motivos:
Se as suas VMs usarem armazenamento local e um nó falhar, não existe forma de recuperar os dados armazenados e movê-los para um novo nó.
Se as suas VMs usarem um sistema de armazenamento baseado em blocos, o armazenamento pode não ter garantias de desanexação suficientes. Isso pode levar a acesso simultâneo ao disco e danos nos dados durante o agendamento de VMs.
Inspeccione o objeto VMHighAvailabilityPolicy
Verifique se existe um objeto VMHighAvailabilityPolicy:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy --namespace vm-system
Substitua USER_CLUSTER_KUBECONFIG pelo caminho do ficheiro kubeconfig do cluster de utilizadores.
O resultado mostra que existe um objeto VMHighAvailabilityPolicy com o nome default
. No resultado, também pode ver o valor atual de defaultRecoveryStrategy
. Por exemplo, a saída seguinte mostra que o valor atual de defaultRecoveryStrategy
é Reschedule
:
vm-system default 5m55s Reschedule 15s 1m30s
Obtenha uma vista detalhada do objeto VMHighAvailabilityPolicy:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy \ --namespace vm-system --output yaml
Exemplo de saída:
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
Altere a estratégia de recuperação predefinida
Em determinadas situações, recomendamos que altere a estratégia de recuperação predefinida. Por exemplo, se as suas VMs estiverem a usar armazenamento local ou um sistema de ficheiros que não seja baseado em ficheiros de rede, recomendamos que altere o valor de defaultRecoveryStrategy
para Ignore
.
Para alterar o valor de defaultRecoveryStrategy
, abra o objeto VMHighAvailabilityPolicy para edição:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit VMHighAvailabilityPolicy \ default --namespace vm-system
No editor de texto, altere o valor de defaultRecoveryStrategy
para um valor à sua escolha: Reschedule
ou Ignore
. Feche o editor de texto.
Substitua a estratégia de recuperação predefinida de uma VM
A estratégia de recuperação predefinida aplica-se a todas as VMs em execução no cluster. No entanto, pode ter de substituir a estratégia de recuperação predefinida para VMs individuais.
Por exemplo, suponha que a maioria das suas VMs é aprovisionada com uma classe de armazenamento baseada em ficheiros de rede, mas algumas VMs são aprovisionadas com uma classe de armazenamento baseada em blocos. Para cada VM que use armazenamento baseado em blocos, recomendamos que substitua a estratégia de recuperação predefinida definindo a estratégia de recuperação para a VM individual como Ignore
.
Para substituir a estratégia de recuperação predefinida de uma VM, adicione uma anotação vm.cluster.gke.io/vm-ha-recovery-strategy
ao objeto VirtualMachineInstance (VMI) e ao objeto GVM.
Por exemplo, estes comandos definem a estratégia de recuperação como Ignore
para uma VM com o nome 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 quiser remover as anotações mais tarde, use um hífen no final do nome da anotação. Por exemplo:
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-
Configuração avançada
Além de configurar a estratégia de recuperação predefinida, pode configurar o seguinte:
Intervalo de batimentos cardíacos do nó: o tempo entre os batimentos cardíacos enviados por cada nó do cluster
Período de tolerância do monitor de nós: o período máximo durante o qual um nó pode não enviar um sinal de pulsação antes de ser considerado não saudável
Na maioria dos casos, os valores predefinidos para o intervalo de sinal de pulsação e o período de tolerância são adequados. No entanto, pode optar por ajustar estes valores se quiser ajustar a troca entre a velocidade de recuperação e a sobrecarga. Um intervalo de pulsação mais curto reduz o tempo de recuperação, mas também aumenta a sobrecarga. Num cluster grande, pode optar por aumentar o intervalo de pulsação, porque as pulsações frequentes de muitos nós podem criar uma carga inaceitável no servidor da API Kubernetes.
Mantenha o intervalo de pulsação inferior ao período de tolerância para evitar casos em que uma única pulsação em falta faz com que um nó seja considerado danificado.
Execute kubectl edit
para abrir o objeto VMHighAvailabilityPolicy para edição. Defina
nodeHeartbeatInterval
e nodeMonitorGracePeriod
para os valores da sua escolha.
spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s