Ir para o conteúdo

Como posso solucionar problemas de atualização de grupo de nós gerenciados para o Amazon EKS?

6 minuto de leitura
0

Estou tentando atualizar meu grupo de nós gerenciados do Amazon Elastic Kubernetes Service (Amazon EKS) e estou enfrentando problemas.

Breve descrição

Ao atualizar seu grupo de nós gerenciados do Amazon EKS, é possível receber um dos seguintes erros:

  • "PodEvictionFailure Reached max retries while trying to evict pods from nodes in node group nodegroup-1234"

  • "Error: Nodegroup health has issues other than AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable"

  • "Error: InvalidParameterException: Launch template details can't be null for Custom ami type node group"

        -ou-
    
       "An error occurred (InvalidParameterException) when calling the UpdateNodegroupVersion operation: You cannot specify the field kubernetesVersion when using custom AMIs"
    
  • "UPDATE_FAILED Resource handler returned message: Requested release version 1.xx is not valid for kubernetes version 1.yy"

Resolução

Para resolver erros de atualização de grupo de nós gerenciados do Amazon EKS, siga estas etapas de solução de problemas.

Observação: Se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

PodEvictionFailure Alcançou o máximo de novas tentativas ao tentar remover pods dos nós no grupo de nós nodegroup-1234

O erro PodEvictionFailure ocorre quando o upgrade não consegue drenar todos os pods do nó. Se um orçamento de interrupção do pod (pod disruption budget, PDB) estiver impedindo que os pods sejam drenados do nó, isso pode causar o problema. Por exemplo, se uma aplicação tiver um PDB de dois, pelo menos dois pods desse aplicativo devem estar em execução.

Para verificar se sua aplicação está usando um PDB, execute o seguinte comando kubectl:

$ kubectl get pdb —all-namespaces

Se você estiver usando um PDB, execute uma das seguintes ações:

A opção de forçar a atualização não reconhece PDBs. As atualizações ocorrem independentemente dos problemas do PDB, forçando o nó a reiniciar.

Observação: Se os pods de um controlador Kubernetes não estiverem espalhados pelos nós, essa opção poderá causar tempo de inatividade em suas aplicações.

Para usar a opção forçar, execute o comando da AWS CLI semelhante ao seguinte:

$ aws eks update-nodegroup-version --cluster-name cluster-123 --nodegroup-name nodegroup-1234 --force

-ou-

Execute o seguinte comando eksctl:

$ eksctl upgrade nodegroup --cluster OneCluster --name managed-ng --force-upgrade

Solução de problemas de falhas de remoção do PodDisruptionBudget com o CloudWatch Logs Insights

É possível usar o Amazon CloudWatch Logs Insights para pesquisar os dados de log do ambiente de gerenciamento do Amazon EKS. Para obter mais informações, consulte Análise de dados de log com o CloudWatch Logs Insights.

Importante: É possível visualizar eventos de logs no CloudWatch Logs somente depois de ativar o registro de log do ambiente de gerenciamento em um cluster. Antes de selecionar um intervalo de tempo para executar consultas no CloudWatch Logs Insights, verifique se você ativou o registro de log do ambiente de gerenciamento. Para obter mais informações, consulte Como posso recuperar os logs do ambiente de gerenciamento do Amazon EKS do CloudWatch Logs?

Para identificar o pod que falhou na remoção e a contagem de falhas, execute uma consulta semelhante à seguinte:

fields @timestamp, @message
| stats count(*) as count by objectRef.name
| filter @logStream like /audit/
| filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod" and responseStatus.code > 400
| sort count desc

O número máximo de novas tentativas para um pod de remoção é 20. Se a contagem de um pod exibido for maior ou igual a 20 falhas, esse é o pod que falhou na remoção.

Para identificar o nome do orçamento de interrupção do pod que está impedindo que o pod anterior seja removido, execute a consulta a seguir.

filter @logStream like /^kube-apiserver-audit/
  | fields @logStream, @timestamp, @message
  | sort @timestamp desc
  | filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod_name" and responseStatus.code > 400
  | limit 999
  | display responseObject.details.causes.0.message,objectRef.name,objectRef.namespace,objectRef.resource

Observação: Substitua pod_name pelo nome do seu pod.

A saída tem uma mensagem semelhante à seguinte, em que pod_distruption_budget é o objeto que está causando as falhas de remoção:

The disruption budget pod_distruption_budget needs 1 healthy pods and has 1 currently

Erro: Nodegroup health has issues other than AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable

Se você receber essa mensagem de erro, verifique os detalhes do grupo de nós gerenciados e localize os problemas de integridade. Para obter mais informações e solucionar problemas, verifique se há erros de grupos de nós gerenciados e a Amazon EKS issue API reference (referência da API de problemas do Amazon EKS).

Erro: InvalidParameterException: Launch template details can't be null for Custom ami type node group

-ou-

An error occurred (InvalidParameterException) when calling the UpdateNodegroupVersion operation: Você não pode especificar o campo kubernetesVersion ao usar AMIs personalizadas.

Para grupos de nós gerenciados com uma AMI personalizada, você deve criar uma nova versão da AMI com a versão do Kubernetes para a qual você deseja fazer o upgrade. Durante o upgrade, especifique o modelo de execução e a versão.

Se você estiver usando a AWS CLI, use o sinalizador --launch-template. Em eksctl, use o sinalizador --launch-template-version.

Observação: Evite usar o sinalizador --kubernetes-version com esses comandos.

UPDATE_FAILED Mensagem retornada pelo manipulador de recursos: "Requested release version 1.xx is not valid for kubernetes version 1.yy"

Esse erro ocorre ao atualizar o grupo de nós gerenciados com o cluster do Amazon EKS da mesma pilha do AWS CloudFormation com a chamada de API UpdateStack.

O CloudFormation tenta reverter a pilha, mas falha porque o cluster do Amazon EKS foi atualizado com sucesso e não pode ser revertido. O cluster do Amazon EKS não pode combinar 1.xx com 1.yy (por exemplo, 1.21 e 1.22).

Verifique o primeiro erro que ocorreu no grupo de nós na pilha do CloudFormation para obter mais detalhes sobre como corrigir o problema. Em seguida, atualize sua pilha do CloudFormation novamente.

Para obter mais informações, consulte Comportamento de atualização do nó gerenciado.


Informações relacionadas

Como solucionar falhas na criação de grupos de nós gerenciados do Amazon EKS?

Como resolvo erros de grupos de nós gerenciados em um cluster do Amazon EKS?

Solução de problemas do Amazon EKS

AWS OFICIALAtualizada há 3 anos