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

Data da última atualização: 22-12-2021

Meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS) falha ao fazer upgrade. 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 problemas transitórios de fluxo de trabalho de backend, atualize o cluster novamente.

Observação: os links do console da AWS na seção Resolução direcionam você para a região da AWS us-east-1. Se seus recursos estiverem localizados em outra região da AWS, faça a alteração para a região em que seus recursos residem.

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 três 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.

2.    Selecione oAmazon EKS cluster (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).

6.    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:

$ 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.

WARM_IP_TARGET define quantos endereços IP secundários o Container Network Interface (CNI) deve reservar para os pods. Para obter mais informações sobre WARM_IP_TARGET e outras variáveis de configuração, consulte Quais são as práticas recomendadas para configurar o plugin CNI da Amazon VPC para usar um endereço IP em sub-redes da VPC com o Amazon EKS?

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 marcadas 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.    Navegue até a página Subnet (Sub-rede).

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 a versão 1.19, a etiqueta não é obrigatória. Substitua cluster-name pelo nome do seu cluster.

O valor da etiqueta pode ser compartilhado ou de propriedade.

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.

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 role (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.

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.

Verificar 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.

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

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?