Neste documento, mostramos como configurar a política de alta disponibilidade para máquinas virtuais (VMs) executadas com o ambiente de execução de VMs do Anthos.
Quando você
ativa o Anthos VM Runtime,
o cluster cria um objeto VMHighDisponibilidadePolicy chamado default
. Esse objeto especifica a estratégia de recuperação padrão caso um nó de cluster que esteja executando uma VM falhe. As possíveis estratégias de recuperação padrão são:
- Reprogramar: reprograme a VM em outro nó de cluster.
- Ignorar: não faça nada.
Inicialmente, a estratégia de recuperação padrão está definida como Reschedule
.
Uma estratégia de recuperação padrão de Reschedule
é apropriada na seguinte situação:
O cluster tem pelo menos dois nós de trabalho.
Os discos da VM são provisionados usando uma classe de armazenamento baseada em arquivos de rede. Ou seja, a classe de armazenamento é baseada em um sistema de arquivos de rede que coordena bloqueios de arquivos POSIX em clientes diferentes. O Sistema de arquivos de rede (NFS, na sigla em inglês) é um exemplo de classe de armazenamento baseada em arquivos de rede.
Se as VMs estiverem usando armazenamento local ou um sistema de armazenamento com base em blocos,
recomendamos que você defina a estratégia de recuperação padrão como Ignore
. Fazemos
essa recomendação pelos seguintes motivos:
Se as VMs usarem armazenamento local e um nó falhar, não será possível recuperar os dados armazenados e movê-los para um novo nó.
Se as VMs usarem um sistema de armazenamento baseado em bloco, o armazenamento pode não ter garantias de remoção suficientes. Isso pode levar ao acesso simultâneo ao disco e à corrupção de dados durante a programação da VM.
Inspecionar o objeto VMHighDisponibilidadePolicy
Verifique se há um objeto VMHighDisponibilidadePolicy:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get VMHighAvailabilityPolicy --namespace vm-system
Substitua USER_CLUSTER_KUBECONFIG pelo caminho do arquivo kubeconfig do cluster de usuário.
A saída mostra que há um objeto VMHighDisponibilidadePolicy chamado
default
. Na saída, também é possível ver o valor atual de
defaultRecoveryStrategy
. Por exemplo, a saída a seguir mostra que o
valor atual de defaultRecoveryStrategy
é Reschedule
:
vm-system default 5m55s Reschedule 15s 1m30s
Tenha uma visualização detalhada do objeto VMHighDisponibilidadePolicy:
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
Mudar a estratégia de recuperação padrão
Em determinadas situações, recomendamos que você altere a estratégia de recuperação padrão. Por exemplo, se as VMs estiverem usando armazenamento local ou um sistema de arquivos que não é baseado em arquivos de rede, recomendamos que você altere o valor de defaultRecoveryStrategy
para Ignore
.
Para alterar o valor de defaultRecoveryStrategy
, abra o objeto
VMHighDisponibilidadePolicy para edição:
kubectl --kubeconfig USER_CLUSTER_KUBECONFIG edit VMHighAvailabilityPolicy \ default --namespace vm-system
No editor de texto, mude o valor de defaultRecoveryStrategy
para um valor
da sua escolha: Reschedule
ou Ignore
. Feche o editor de texto.
Substituir a estratégia de recuperação padrão de uma VM
A estratégia de recuperação padrão se aplica a todas as VMs em execução no cluster. No entanto, talvez seja necessário substituir a estratégia de recuperação padrão de VMs individuais.
Por exemplo, suponha que a maioria das VMs seja provisionada com uma
classe de armazenamento baseada em arquivos de rede, mas algumas VMs são provisionadas com uma
classe de armazenamento baseada em blocos. Para cada VM que usa armazenamento baseado em bloco, recomendamos que você modifique a estratégia de recuperação padrão definindo a estratégia de recuperação de cada VM para Ignore
.
Para substituir a estratégia de recuperação padrão 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 chamada 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 você quiser remover as anotações mais tarde, use um hífen no final do nome da anotação. 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 padrão, você pode configurar o seguinte:
Intervalo de batimentos cardíacos do nó: o tempo entre os batimentos cardíacos enviado por cada nó do cluster.
Período de carência do monitor de nós: o tempo máximo que um nó pode falhar ao enviar um batimento cardíaco antes de ser considerado não íntegro.
Na maioria dos casos, os valores padrão para o intervalo de batimentos cardíacos e o período de carência são apropriados. No entanto, é possível ajustar esses valores se quiser ajustar a compensação entre a velocidade de recuperação e a sobrecarga. Um intervalo de frequência cardíaca menor encurta o tempo de recuperação, mas também aumenta a sobrecarga. Em um cluster grande, é possível aumentar o intervalo de batimentos cardíacos, porque os batimentos cardíacos frequentes de muitos nós podem criar uma carga inaceitável no servidor da API Kubernetes.
Mantenha o intervalo de batimentos cardíacos abaixo do período de carência para evitar casos em que um único batimento cardíaco perdido resulta em um nó não considerado íntegro.
Execute kubectl edit
para abrir o objeto VMHighDisponibilidadePolicy para edição. Defina
nodeHeartbeatInterval
e nodeMonitorGracePeriod
como valores de sua escolha.
spec: defaultRecoveryStrategy: Reschedule nodeHeartbeatInterval: 15s nodeMonitorGracePeriod: 1m30s