Como posso solucionar problemas de pods do Amazon EKS no AWS Fargate que estão paralisados no estado Pendente?

6 minuto de leitura
0

Meus pods do Amazon Elastic Kubernetes Service (Amazon EKS), que são executados em instâncias do AWS Fargate, estão paralisados no estado Pendente.

Breve descrição

Há vários motivos pelos quais seus pods do Amazon EKS que usam o AWS Fargate podem ficar paralisados no estado Pendente:

  • Ocorre um erro de capacidade por uma combinação específica de vCPU e memória não estar disponível.
  • Você criou os pods do CoreDNS com uma anotação padrão que os mapeia para o tipo de computação do Amazon Elastic Compute Cloud (Amazon EC2). Para agendá-los em um nó do Fargate, remova o tipo de computação do Amazon EC2.
  • Quando você criou o pod e o atribuiu ao fargate-scheduler, o pod não correspondeu a nenhum perfil do Fargate. Se um pod não tiver correspondência quando for criado, ele não será reprogramado automaticamente para os nós do Fargate. Isso ocorre mesmo se você criar um perfil com correspondência depois. Nesse caso, o pod é atribuído ao default-scheduler.
  • Se o pod estiver atribuído ao fargate-scheduler, mas permanecer em um estado Pendente, talvez o pod precise de solução de problemas adicional.

Resolução

Pré-requisitos

  • Configure o namespace e (opcionalmente) especifique rótulos do Kubernetes de modo a combinarem com os rótulos dos seletores de pods. O fluxo de trabalho do Fargate associa os pods a um perfil do Fargate somente se ambas as condições corresponderem à especificação do pod.
  • Se você especificar vários seletores de pod em um único perfil do Fargate, o fargate-scheduler agendará o pod se ele corresponder a qualquer um dos seletores.
  • Se a especificação de um pod corresponder a vários perfis do Fargate, o pod será agendado de acordo com um perfil aleatório do Fargate. Para evitar isso, use a anotação eks.amazonaws.com/fargate-profile:fp_name na especificação do pod. Substitua fp_name pelo nome do seu perfil do Fargate.

Importante: as etapas a seguir se aplicam somente aos pods que são iniciados com o AWS Fargate. Para obter informações sobre pods iniciados em instâncias do Amazon EC2, consulte How can I troubleshoot the pod status in Amazon EKS?

Descubra o status do seu pod

1. Execute o comando a seguir para verificar o estado do pod:

kubectl get pods -n <namespace>

2. Para obter mais informações de erro sobre o pod, execute o seguinte comando describe:

kubectl describe pod YOUR\_POD\_NAME -n <namespace>

Consulte a saída do comando describe para avaliar as etapas de resolução a serem concluídas.

Resolva um erro de capacidade

Se seus pods tiverem um problema de capacidade, a saída de describe será semelhante à seguinte mensagem:

"Fargate capacity is unavailable at this time. Please try again later or in a different availability zone."

Isso significa que o Fargate não pode provisionar capacidade computacional com base na combinação de vCPU e memória selecionada.

Para resolver esse erro, conclua as seguintes etapas:

  • Tente criar o pod novamente após 20 minutos. Como o erro é baseado na capacidade, a quantidade exata de tempo pode variar.
  • Altere a solicitação (CPU e memória) dentro da especificação do seu pod. Para obter informações sobre a especificação do pod, consulte How Kubernetes applies resource requests and limits no site do Kubernetes. O fluxo de trabalho do Fargate então provisiona uma nova combinação de vCPU e memória.
    Observação: você é cobrado com base em uma de suas combinações. Para obter mais informações sobre como a combinação é finalizada com base na especificação do seu pod, consulte Pod CPU and memory. Execute um comando kubectl describe node a partir do seu terminal ou ambiente de desenvolvimento integrado (IDE) para obter um valor maior de combinação de vCPU e memória. O Fargate nem sempre tem capacidade disponível com base em suas solicitações. O Fargate provisiona recursos de um pool de capacidade da melhor maneira possível. Você é cobrado apenas pelo uso do pod e pela combinação equivalente de vCPU e memória.

Resolva pods do CoreDNS em estado Pendente

Se os pods do CoreDNS estiverem em estado Pendente, sua saída será semelhante à seguinte mensagem:

kubectl get pods -n kube-system
NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

Pode ser que isso ocorra porque a anotação padrão da implantação do CoreDNS é a seguinte: eks.amazonaws.com/compute-type : ec2.

Para resolver isso e reatribuir os pods ao agendador do Fargate, consulte Atualizar CoreDNS.

Solucione problemas de pods atribuídos ao fargate-scheduler

Há vários motivos pelos quais os pods atribuídos ao fargate-scheduler podem ficar paralisados no estado Pendente. Se seus pods permanecerem no estado Pendente, a saída describe será semelhante à seguinte mensagem:

Events:
Type       Reason              Age                     From
----       ------              ----                    ----
Warning    FailedScheduling    2m25s (x301 over 5h3m)  fargate-scheduler

Para resolver esse erro, conclua as seguintes tarefas:

  • Exclua e recrie os pods.
  • Confirme se as seguintes especificações não estão definidas no YAML de especificação do pod. Essas especificações podem fazer com que o fargate-scheduler ignore o pod:
    seletor de nós
    <>nome do nó
    schedulerName
  • Confirme se as sub-redes selecionadas em seu perfil do Fargate têm endereços IP livres suficientes para criar novos pods. Cada nó do Fargate consome um endereço IP da sub-rede.
  • Confirme se o gateway NAT está configurado como uma sub-rede pública e tem um endereço IP elástico anexado a ele.
  • Confirme se os conjuntos de opções DHCP associados à sua nuvem privada virtual (VPC) têm um AmazonProvidedDNS ou um nome do host de servidor DNS válido para domain-name-servers.
  • Confirme se os nomes do host de DNS e a resolução de DNS estão ativados para sua VPC.
  • Se seus pods do Fargate usarem sub-redes privadas com apenas endpoints da VPC configurados para comunicação de serviços, permita esses endpoints com nomes DNS:
    ECR - API
    ECR - DKR
    Endpoint de gateway S3
  • Confirme se o grupo de segurança conectado ao endpoint da VPC permite a comunicação do Fargate de e para o servidor da API. O grupo de segurança do endpoint da VPC deve permitir a entrada da porta 443 a partir do CIDR da VPC do cluster. Você também deve ativar o acesso privado ao endpoint para seu cluster.

Resolva pods atribuídos ao default-scheduler

Para determinar o agendador ao qual seus pods são atribuídos, execute o seguinte comando:

kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.

Na saída, confirme se o schedulerName é fargate-scheduler. Se estiver listado como default-scheduler, o fargate-scheduler ignorou esse pod. Para solucionar esse problema, verifique a configuração do pod para ver as anotações do tipo de computação. Para obter mais informações, consulte Considerações sobre o AWS Fargate.

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses