Reparo Automático de Nó

O recurso de reparo automático de nós monitora continuamente a integridade de cada nó em um pool de nós. Se um nó apresentar problemas de integridade, o recurso de reparo automático de nós o reparará automaticamente. Esse recurso diminui a probabilidade de interrupções do cluster e degradação do desempenho, além de minimizar a necessidade de manutenção manual dos seus clusters.

Você pode habilitar o reparo automático de nós ao criar ou atualizar um pool de nós. Observe que esse recurso é habilitado ou desabilitado em pools de nós, e não em nós individuais.

Condições de nódulos prejudiciais

O reparo automático de nós examina o status de integridade de cada nó para determinar se ele precisa de reparo. Um nó é considerado íntegro se reportar o status Ready . Caso contrário, se reportar consecutivamente um status não íntegro por um período específico, os reparos serão iniciados.

Um status não íntegro pode surgir de um estado NotReady , detectado em verificações consecutivas ao longo de aproximadamente 15 minutos. Alternativamente, um status não íntegro pode resultar de espaço em disco de inicialização esgotado, identificado ao longo de um período de aproximadamente 30 minutos.

Você pode verificar manualmente os sinais de integridade do seu nó a qualquer momento executando o comando kubectl get nodes .

Estratégias de reparo de nós

O reparo automático de nós segue determinadas estratégias para garantir a integridade geral do cluster e a disponibilidade dos aplicativos durante o processo de reparo. Esta seção descreve como o recurso de reparo automático de nós respeita as configurações PodDisruptionBudget , o Pod Termination Grace Period e outras medidas que minimizam a interrupção do cluster ao reparar nós.

Honor PodDisruptionBudget por 30 minutos

Se um nó precisar de reparo, ele não será esvaziado e recriado instantaneamente. Em vez disso, o recurso de reparo automático do nó respeita as configurações do PodDisruptionBudget (PDB) por até 30 minutos, após os quais todos os Pods no nó serão excluídos. (Uma configuração de PDB define, entre outras coisas, o número mínimo de réplicas de um Pod específico que devem estar disponíveis a qualquer momento).

Ao honrar o PodDisruptionBudget por aproximadamente 30 minutos, o recurso de reparo automático de nós oferece uma janela de oportunidade para que os Pods sejam reprogramados com segurança e redistribuídos entre outros nós saudáveis ​​no cluster. Isso ajuda a manter o nível desejado de disponibilidade do aplicativo durante o processo de reparo.

Após o limite de 30 minutos, o reparo automático do nó prossegue com o processo de reparo, mesmo que isso signifique violar o PodDisruptionBudget . Sem um limite de tempo, o processo de reparo pode ser interrompido indefinidamente se a configuração PodDisruptionBudget impedir as remoções necessárias para um reparo.

Respeite o período de carência para término do Pod

O recurso de reparo automático do nó também respeita um Período de Carência de Encerramento de Pod de aproximadamente 30 minutos. O Período de Carência de Encerramento de Pod fornece aos Pods uma janela de tempo para um desligamento normal durante o encerramento. Durante o período de carência, o kubelet em um nó é responsável por executar tarefas de limpeza e liberar recursos associados aos pods naquele nó. O recurso de reparo automático do nó permite até 30 minutos para que o kubelet conclua essa limpeza. Se os 30 minutos estipulados se esgotarem, o nó será forçado a encerrar, independentemente de os pods terem sido encerrados normalmente.

Estratégias adicionais de reparo de nós

O Node Auto Repair também implementa as seguintes estratégias:

  • Se vários nós precisarem de reparo, eles serão reparados um de cada vez para limitar a interrupção do cluster e proteger as cargas de trabalho.
  • Se você desabilitar o reparo automático do nó durante o processo de reparo, os reparos em andamento continuarão até que a operação de reparo seja bem-sucedida ou falhe.

Como habilitar e desabilitar o reparo automático de nós

Você pode habilitar ou desabilitar o reparo automático de nós ao criar ou atualizar um pool de nós. Você habilita ou desabilita esse recurso em pools de nós, e não em nós individuais.

Habilitar reparo automático para um novo pool de nós

gcloud container azure node-pools create NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --node-version 1.31.4-gke.500 \
   --vm-size VM_SIZE \
   --max-pods-per-node 110 \
   --min-nodes MIN_NODES \
   --max-nodes MAX_NODES \
   --azure-availability-zone AZURE_ZONE \
   --ssh-public-key SSH_PUBLIC_KEY" \
   --subnet-id SUBNET_ID \
   --enable-autorepair

Substitua o seguinte:

  • NODE_POOL_NAME : um nome exclusivo para seu pool de nós — por exemplo, node-pool-1
  • CLUSTER_NAME : o nome do seu cluster do GKE no Azure
  • GOOGLE_CLOUD_LOCATION : o Google Cloud local que gerencia seu cluster
  • NODE_VERSION : a versão do Kubernetes a ser instalada em cada nó no pool de nós (por exemplo, "1.31.4-gke.500")
  • VM_SIZE : um tamanho de VM do Azure compatível
  • MIN_NODES : o número mínimo de nós no pool de nós — para obter mais informações, consulte Cluster autoscaler
  • MAX_NODES : o número máximo de nós no pool de nós
  • AZURE_ZONE : a zona de disponibilidade do Azure onde o GKE no Azure inicia o pool de nós — por exemplo, 3
  • SSH_PUBLIC_KEY : o texto da sua chave pública SSH.
  • SUBNET_ID : o ID da sub-rede do pool de nós.

Habilitar reparo automático para um pool de nós existente

Para habilitar o reparo automático de nós em um pool de nós existente, execute o seguinte comando:

gcloud container azure node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --enable-autorepair

Substitua o seguinte:

  • NODE_POOL_NAME : um nome exclusivo para seu pool de nós — por exemplo, node-pool-1
  • CLUSTER_NAME : o nome do seu cluster
  • GOOGLE_CLOUD_LOCATION : o Google Cloud região que gerencia seu cluster

Desabilitar reparo automático para um pool de nós existente

gcloud container azure node-pools update NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION \
   --no-enable-autorepair

Substitua o seguinte:

  • NODE_POOL_NAME : um nome exclusivo para seu pool de nós — por exemplo, node-pool-1
  • CLUSTER_NAME : o nome do seu cluster
  • GOOGLE_CLOUD_LOCATION : o Google Cloud região que gerencia seu cluster

Observe que o GKE no Azure executa a desativação gradual do reparo automático de nós. Ao desabilitar o reparo automático de nós para um pool de nós existente, o GKE no Azure inicia uma operação de atualização do pool de nós. A operação aguarda a conclusão de quaisquer reparos de nós existentes antes de prosseguir.

Verifique se o reparo automático do nó está habilitado

Execute o seguinte comando para verificar se o reparo automático do nó está habilitado ou não:

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Substitua o seguinte:

  • NODE_POOL_NAME : um nome exclusivo para seu pool de nós — por exemplo, node-pool-1
  • CLUSTER_NAME : o nome do seu cluster
  • GOOGLE_CLOUD_LOCATION : o Google Cloud região que gerencia seu cluster

Histórico de reparo do nó

Você pode visualizar o histórico de reparos realizados em um pool de nós executando o seguinte comando:

gcloud container azure operations list \
   --location GOOGLE_CLOUD_LOCATION \
   --filter="metadata.verb=repair AND metadata.target=projects/PROJECT_ID/locations/GOOGLE_CLOUD_LOCATION/azureClusters/CLUSTER_NAME/azureNodePools/NODEPOOL_NAME

Substitua o seguinte:

  • GOOGLE_CLOUD_LOCATION : o suportado Google Cloud região que gerencia seu cluster — por exemplo, us-west1
  • PROJECT_ID : seu Google Cloud projeto
  • CLUSTER_NAME : o nome do seu cluster
  • NODE_POOL_NAME : um nome exclusivo para seu pool de nós — por exemplo, node-pool-1

Resumo da integridade do pool de nós

Depois de habilitar o reparo automático do nó, você pode gerar um resumo da integridade do pool de nós executando o seguinte comando:

gcloud container azure node-pools describe NODE_POOL_NAME \
   --cluster CLUSTER_NAME \
   --location GOOGLE_CLOUD_LOCATION

Um resumo de integridade do pool de nós é semelhante a este exemplo:

{
  "name": "some-np-name",
  "version": "some-version",
  "state": "RUNNING",

  ...

  "errors": [
    {
      "message": "1 node(s) is/are identified as unhealthy among 2 total node(s) in the node pool. No node is under repair."
    }
  ],
}

O resumo de integridade do pool de nós ajuda você a entender o estado atual do pool de nós. Neste exemplo, o resumo contém uma mensagem de erro informando que um dos dois nós no pool de nós não está íntegro. Ele também informa que nenhum nó está passando pelo processo de reparo.