Por que o meu pod do Amazon EKS está paralisado no estado ContainerCreating com o erro “failed to create pod sandbox” (falha ao criar o sandbox do pod)?

Data da última atualização: 30/11/2021

O meu pod do Amazon Elastic Kubernetes Service (Amazon EKS) está paralisado no estado ContainerCreating com o erro “failed to create pod sandbox” (falha ao criar o sandbox do pod).

Resolução

Seus pods do Amazon EKS podem ficar paralisados no estado ContainerCreating com erro de conectividade de rede por vários motivos. Siga as etapas de soluções de problemas indicadas a seguir de acordo com a mensagem de erro recebida.

Resposta de erro do daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown (falha ao iniciar o shim: fork/exec /usr/bin/containerd-shim: recurso temporariamente indisponível: desconhecido)

Esse erro ocorre em função de uma limitação do sistema operacional gerada pelas configurações definidas de kernel para PID máximo ou número máximo de arquivos.

Recupere informações sobre o seu pod executando o seguinte comando:

$ kubectl describe pod example_pod

A saída terá a seguinte aparência:

kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal  Failed to create pod sandbox: rpc error: code = Unknown desc = failed to start sandbox container for pod "example_pod": Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown

Para resolver o problema temporariamente, reinicie o nó.

Para solucionar esse problema, faça o seguinte:

  • Reúna os logs de nós.
  • Analise os logs do Docker em relação ao erro “dockerd[4597]: runtime/cgo: pthread_create failed: Resource temporarily unavailable” (dockerd[4597]: falha em runtime/cgo: pthread_create: recurso temporariamente indisponível).
  • Analise o log do Kubelet em relação aos erros “kubelet[5267]: runtime: failed to create new OS thread (have 2 already; errno=11)” (kubelet[5267]: tempo de execução: falha ao criar um novo thread de SO (já existem dois; errno=11)) e “kubelet[5267]: runtime: may need to increase max user processes (ulimit -u)” (kubelet[5267]: tempo de execução: pode ser necessário aumentar o máximo de processos do usuário (ulimit -u)).
  • Identifique os processos zumbis executando o comando ps. Todos os processos listados com o estado Z na saída são processos zumbis.

O plugin de rede cni falhou ao configurar a rede do pod: add cmd: failed to assign an IP address to container (add cmd: falha ao atribuir um endereço IP ao contêiner)

Esse erro indica que a interface de rede de contêineres (CNI) não pode atribuir um endereço IP ao pod recém-provisionado.

Recupere informações sobre o seu pod executando o seguinte comando:

$ kubectl describe pod example_pod

A saída terá a seguinte aparência:

Warning FailedCreatePodSandBox 23m (x2203 over 113m) kubelet, ip-xx-xx-xx-xx.xx-xxxxx-x.compute.internal (combined from similar events): Failed create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "provisioning-XXXXXXXXXXXXXXX": networkPlugin cni failed to set up pod "provisioning-XXXXXXXXXXXXXXX" network: add cmd: failed to assign an IP address to container

Analise a sub-rede para identificar se ela ficou sem endereços IP livres. Você pode visualizar os endereços IP disponíveis para cada sub-rede no console do Amazon VPC na seção Sub-redes.

Para resolver esse problema, reduza a escala de algumas workloads na vertical para liberar endereços IP disponíveis. Se houver capacidade de sub-rede adicional disponível, você poderá optar por escalar o nó. Você também pode criar uma sub-rede adicional. Para obter mais informações, consulte Create subnets with a new CIDR range (Criação de sub-redes com um novo intervalo de CIDR) em How do I use multiple CIDR ranges with Amazon EKS? (Como posso usar vários intervalos de CIDR com o Amazon EKS?)

Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused (Erro ao discar o dial tcp 127.0.0.1:50051: connect: conexão recusada)

Esse erro indica que o pod aws-node falhou ao se comunicar com o IPAM.

Recupere informações sobre o seu pod executando os seguintes comandos:

$ kubectl describe pod example_pod
$ kubectl describe pod/aws-node-XXXXX -n kube-system

A saída terá a seguinte aparência:

Warning  FailedCreatePodSandBox  51s  kubelet, ip-xx-xx-xx-xx.ec2.internal  Failed create pod sandbox: rpc error: code = Unknown desc = [failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to set up pod "example_pod" network: add cmd: Error received from AddNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused", failed to clean up sandbox container
"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "example_pod": NetworkPlugin cni failed to teardown pod "example_pod" network: del cmd: error received from DelNetwork gRPC call: rpc error: code = Unavailable desc = connection error: desc = "transport: Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused"]

Para solucionar esse problema, execute o seguinte comando para visualizar a última mensagem de log:

kubectl -n kube-system exec -it aws-node-XXX-- tail -f /host/var/log/aws-routed-eni/ipamd.log | tee ipamd.log

A última mensagem de log tem a seguinte aparência:

Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\

Essa mensagem indica que o pod não conseguiu montar o var/run/dockershim.sock.

Para resolver esse problema, tente o seguinte:

  • Reinicie o pod aws-node. Reiniciá-lo pode ajudar o pod a remapear o ponto da montagem.
  • Se o problema persistir, isole o nó e escale os nós no grupo de nós.
  • Tente atualizar a CNI da Virtual Private Cloud (VPC) para a versão compatível mais recente do cluster.

Se a CNI tiver sido adicionada como um complemento gerenciado no Console de Gerenciamento da AWS, o aws-node falhará nos testes. Mudar para complementos gerenciados substitui a conta de serviço. No entanto, a conta de serviço não está configurada com a função selecionada. Para resolver esse problema, desative o complemento no console e crie a conta de serviço usando um arquivo manifesto. Como alternativa, edite a conta de serviço atual do aws-node para adicionar a função usada no complemento gerenciado.

O plugin de rede cni falhou ao configurar a rede “example_pod” do pod: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address (falha ao analisar argumentos do Kubernetes: o pod não tem o rótulo vpc.amazonaws.com/PrivateIPv4Address)

Você pode receber esse erro caso a execução do pod não esteja adequada ou se o certificado que o pod está usando não tiver sido criado de forma bem-sucedida. Esse erro está relacionado ao webhook do controlador de admissão da VPC, que é exigido nos clusters do Amazon EKS para executar workloads do Windows. Esse componente é um plugin que executa um pod no namespace kube-system. Esse componente é executado em nós do Linux e habilita redes para pods de entrada em nós do Windows.

Recupere informações sobre o seu pod executando o seguinte comando:

$ kubectl describe pod example_pod

A saída terá a seguinte aparência:

Failed to create pod sandbox: rpc error: code = Unknown desc = failed to set up sandbox container "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" network for pod "<POD_ANME>": networkPlugin cni failed to set up pod "example_pod" network: failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address

Para solucionar esse problema, execute o seguinte comando para confirmar se o pod do controlador de admissão da VPC foi criado:

$ kubectl get pods -n kube-system

Se o pod do controlador de admissão não tiver sido criado, habilite o suporte do Windows para o seu cluster.

Importante: no momento, o Amazon EKS oferece suporte a grupos de nós do Windows sem exigir que o controlador da VPC esteja habilitado. Se o controlador da VPC estiver habilitado, remova o suporte do Windows herdado do seu plano de dados.

Execute o comando a seguir para verificar se há erros gravados nos logs:

$ kubectl logs your-admission-webhook-name -n kube-system

Você pode dar prosseguimento à solução de problemas de acordo com os erros identificados nos logs.


Este artigo foi útil?


Precisa de ajuda com faturamento ou suporte técnico?