Como faço para solucionar problemas de falha de upgrade com meu cluster do Amazon EKS?

Data da última atualização: 05/12/2022

Meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS) falha ao atualizar. Como resolver isso?

Breve descrição

Para resolver uma falha na atualização do cluster do Amazon EKS, tente o seguinte:

  • Para um erro IpNotAvailable, verifique se a sub-rede associada ao cluster tem endereços IP disponíveis suficientes.
  • Para um erro SubnetNotFound, verifique se as sub-redes existem e estão marcadas corretamente.
  • Para um erro SecurityGroupNotFound, verifique se os grupos de segurança associados ao cluster existem.
  • Para um erro EniLimitReached, aumente a cota de interface de rede elástica da conta da AWS.
  • Para um erro AccessDenied, verifique se você tem as permissões corretas.
  • Para um erro OperationNotPermitted, verifique se a função de serviço do Amazon EKS tem as permissões corretas.
  • Para um erro VpcIdNotFound, verifique se a VPC associada ao cluster existe.
  • Verifique se os recursos que você usou para criar o cluster foram excluídos.
  • Para clusters criados com eksctl, verifique se a pilha do AWS CloudFormation falhou ao fazer uma reversão.
  • Para um erro ResourceInUseException, aguarde um pouco antes de tentar a atualização novamente.
  • Para problemas transitórios de fluxo de trabalho de backend, atualize o cluster novamente.

Resolução

Verificar se as sub-redes têm endereços IP disponíveis (IpNotAvailable)

Para atualizar um cluster do Amazon EKS, você deve ter cinco endereços IP disponíveis de cada uma das sub-redes. Se você não tiver endereços IP disponíveis suficientes, poderá excluir interfaces de rede não utilizadas nas sub-redes do cluster. A exclusão de uma interface de rede libera o endereço IP. Para obter mais informações, consulte Excluir uma interface de rede.

Para verificar os endereços IP disponíveis nas sub-redes de cluster do Amazon EKS:

1.    Abra o console do Amazon EKS na região em que você criou seu cluster.

2.    Selecione Clusters na barra lateral. Em seguida, selecione seu cluster do Amazon EKS.

3.    Escolha a guia Configuration (Configuração).

4.    Escolha a guia Networking (Rede).

5.    Em Subnets (Sub-redes), selecione uma subnet (sub-rede) para abrir a página Subnets (Sub-redes).

6.    Selecione uma subnet (sub-rede) e escolha a guia Details (Detalhes).

7.    Localize os Available IPv4 addresses (endereços IPv4 disponíveis) para ver quantos endereços IP disponíveis a sub-rede tem.

Na interface de linha de comando da AWS, execute os seguintes comandos:

1.    Obtenha as sub-redes associadas ao cluster:

$ aws eks describe-cluster --name cluster-name --region your-region

Observação: substitua cluster-name pelo nome do seu cluster e your-region pela sua região da AWS.

Resultado:

...
   "subnetIds": [
                "subnet-6782e71e",
                "subnet-e7e761ac"
            ],
   ...

2.    Descreva as sub-redes da saída anterior:

aws ec2 describe-subnets --subnet-ids subet-id --region your-region

Observação: substitua subnet-id pelo ID da sub-rede e your-region pela sua região.

Resultado:

...
"AvailableIpAddressCount": 4089,
...

Se você não tiver endereços IP disponíveis suficientes, poderá definir a variável de ambiente no daemonset aws-node como WARM_IP_TARGET. Isso define quantos endereços IP secundários a Container Network Interface (CNI) deve reservar para os pods:

$ kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=number

Observação: substitua number pelo número de endereços IP que você deseja reservar das sub-redes.

Você também pode usar a variável MINIMUM_IP_TARGET para controlar o número mínimo de endereços IP por nó.

É uma prática recomendada usar essas variáveis de configuração para controlar quantas interfaces de rede e endereços IP são mantidos.

Verificar se as sub-redes existem e estão marcadas corretamente (SubnetNotFound)

Para verificar se suas sub-redes existem, execute o seguinte comando:

aws ec2 describe-subnets --subnet-ids subet-id --region region

Observação: substitua osubnet-id pelo ID da sub-rede e region pela região em que as sub-redes estão localizadas.

Se as sub-redes não existirem, você receberá o seguinte erro:

An error occurred (InvalidSubnetID.NotFound) when calling the DescribeSubnets operation: The subnet ID 'subnet-id' does not exist

Para verificar se as sub-redes estão identificadas corretamente:

1.    Identifique as sub-redes associadas ao cluster usando as etapas na seção Verificar se você tem endereços IP disponíveis suficientes (IpNotAvailable).

2.    Abra o console da VPC.

3.    Selecione Subnets (Sub-redes) na barra lateral.

4.    Selecione as sub-redes que devem ser associadas ao cluster e escolha a guia Tags (Etiquetas) no painel Details (Detalhes).

5.    Verifique se cada sub-rede tem as etiquetas corretas:

Key - kubernetes.io/cluster/cluster-name

Observação: a etiqueta anterior é adicionada somente às versões 1.18 ou anteriores do cluster do Amazon EKS. Para clusters criados com a versão 1.19 e posterior do Kubernetes, a etiqueta não é obrigatória. Substitua cluster-name pelo nome do seu cluster.

O valor da etiqueta pode ser compartilhado ou de propriedade.

Se você tiver um plano de suporte, entre em contato com a equipe de suporte para atualizar suas sub-redes do Amazon EKS.

Verificar se os grupos de segurança associados ao cluster existem (SecurityGroupNotFound).

Para identificar os grupos de segurança associados ao cluster:

1.    Abra o console do Amazon EKS na região em que você criou seu cluster.

2.    Selecione o cluster.

3.    Escolha a guia Configuration (Configuração).

4.    Escolha a guia Networking (Rede).

5.    Selecione os grupos de segurança listados emCluster security group (Grupo de segurança do cluster) e Additional security groups (Grupos de segurança adicionais).

Se o grupo de segurança existir, o console será aberto e exibirá os detalhes do grupo de segurança.

Na AWS CLI:

1.    Obtenha os grupos de segurança associados ao cluster:

$ aws eks describe-cluster --name cluster-name --region your-region

Observação: substitua cluster-name pelo nome do seu cluster e your-region pela sua região.

Resultado:

...
"securityGroupIds": [
    "sg-xxxxxxxx"
]
...

2.    Descreva o grupo de segurança da saída anterior:

$ aws ec2 describe-security-groups --group-ids security-group-id --region your-region

Observação: substitua security-group-id pelo ID do seu grupo de segurança eyour-region pela sua região.

Aumentar a cota de interface de rede elástica da conta da AWS (EniLimitReached)

Se você atingiu sua cota de interface de rede, poderá remover interfaces de rede não utilizadas ou solicitar um aumento de limite .

Se as interfaces de rede estiverem conectadas a um cluster, exclua o cluster para remover a interface de rede. Se as interfaces de rede estiverem conectadas a nós de processamento não utilizados,exclua o grupo do Auto Scaling para grupos de nós autogerenciados. Para grupos de nós gerenciados, exclua o grupo de nós do console do Amazon EKS. Para mover workloads de um grupo de nós para outro, consulte Migração para um novo grupo de nós.

Verificar se você tem as permissões corretas (AccessDenied)

1.    Abra o console do IAM.

2.    No painel de navegação, escolha Roles (Funções) ou Users (Usuários).

3.    Selecione role (função) ou user (usuário).

4.    Verifique se a função ou o usuário do IAM tem as permissões corretas.

Verificar se a função de serviço tem as permissões corretas (OperationNotPermitted)

1.    Abra o console do IAM.

2.    No painel de navegação, escolha Roles (Funções).

3.    Filtre porAWSServiceRoleForAmazonEKS e selecione a função.

4.    Verifique se a função tem a política AmazonEKSServiceRolePolicy anexada.

Se a política não estiver anexada, consulte Adicionar permissões de identidade do IAM.

Verificar se a VPC associada ao cluster existe (VpcNotFound)

1.    Abra o console do Amazon EKS na região em que você criou seu cluster.

2.    Selecione o cluster.

3.    Escolha a guia Configuration (Configuração).

4.    Escolha a guia Networking (Rede).

5.    Selecione o link VPC ID (ID da VPC) para ver se a VPC existe.

Se a VPC não existir, você deverá criar um novo cluster.

Verifique se os recursos associados ao cluster foram excluídos.

Se você criou o cluster no console do Amazon EKS e as sub-redes usadas para criar o cluster foram excluídas, o cluster não poderá ser atualizado. Você deve recriar o cluster e mover as workloads do cluster antigo para o novo. Se você tiver um plano de suporte, entre em contato com a equipe de suporte para atualizar suas sub-redes do Amazon EKS.

Verificar se a pilha do AWS CloudFormation falhou ao fazer uma reversão (eksctl).

Aguarde algum tempo antes de iniciar a atualização do ambiente de gerenciamento novamente (ResourceInUseException).

Esse erro ocorre se uma ação automatizada do ambiente de gerenciamento do Amazon EKS, como uma atualização da versão da plataforma, estiver em andamento quando você inicia uma atualização. O Amazon EKS detecta e substitui automaticamente instâncias de ambientes de gerenciamento não íntegras, além de fornecer atualizações de versão e correções automáticas para elas. Aguarde algum tempo até que a ação automatizada termine antes de iniciar a atualização do ambiente de gerenciamento novamente.

Observação: O tempo de espera depende de quando a atualização automática foi iniciada. Se você não tiver certeza de quando a ação automatizada será resolvida, aguarde uma hora antes de tentar novamente a atualização do ambiente de gerenciamento.

Atualizar o cluster novamente

Problemas transitórios podem fazer com que os fluxos de trabalho de backend fiquem instáveis. Se as etapas de solução de problemas anteriores não estiverem relacionadas ao seu problema, tente atualizar o cluster novamente.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?