Por que meu pod do Amazon EKS está preso no estado ContainerCreating com o erro “falhou ao criar o pod sandbox”?

6 minuto de leitura
0

Meu pod do Amazon Elastic Kubernetes Service (Amazon EKS) está preso no estado ContainerCreating com o erro “failed to create pod sandbox”.

Resolução

Você vê esse erro quando há um problema de rede ou uma configuração incorreta do limite de recursos do sistema.

Se você receber esse erro e seus pods estiverem no estado ContainerCreating, inspecione o status do pod. Em seguida, execute o comando a seguir para obter mais detalhes. Substitua podname pelo nome do seu pod:

 kubectl describe pod podname

Com base na saída, consulte as seções a seguir para ver as etapas de solução de problemas.

Resposta de erro “Resource temporarily unavailable”

Erro: "Error response from daemon: failed to start shim: fork/exec /usr/bin/containerd-shim: resource temporarily unavailable: unknown"

Essa resposta de erro ocorre quando as configurações definidas do kernel para PID máximo ou número máximo de arquivos causam uma limitação do sistema operacional.

Exemplo de saída:

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 temporariamente o problema, reinicie o nó.

Para solucionar o problema, conclua as tarefas a seguir:

  • Reúna os logs dos nós.

  • Analise os logs do Docker para ver a resposta de erro “dockerd\ [4597]: runtime/cgo: pthread\ _create failed: Resource temporarily unavailable”.

  • Consulte o log do Kubelet para ver as seguintes respostas de erro:

  • “kubelet[5267]: runtime: failed to create new OS thread (have 2 already; errno=11)”

  • “kubelet[5267]: runtime: may need to increase max user processes (ulimit -u)”.

  • Execute o comando ps para identificar os processos zumbis. Todos os processos listados com o estado Z na saída são os processos zumbis.

Resposta de erro “Network plugin cni failed to set up pod network”

Erro: “Network plugin cni failed to set up pod network: add cmd: failed to assign an IP address to container”

Essa resposta de erro significa que a Container Network Interface (CNI) não pode atribuir um endereço IP ao pod recém-criado.

Uma instância que usou o máximo permitido de interfaces de rede elástica e endereços IP pode causar essa resposta de erro. Você também pode receber essa resposta de erro quando as sub-redes do Amazon Virtual Private Cloud (Amazon VPC) têm uma contagem de endereços IP igual a zero.

Veja a seguir um exemplo do número máximo de endereços IP da interface de rede:

Instance type    Maximum network interfaces    Private IPv4 addresses per interface    IPv6 addresses per interfacet3.medium        3                             6                                       6

No exemplo anterior, a instância t3.medium tem no máximo três interfaces de rede e cada interface de rede tem no máximo seis endereços IP. O primeiro endereço IP é usado para o nó e você não pode atribuí-lo. Essa interface de rede tem então 17 endereços IP que ela pode alocar.

Quando a interface de rede fica sem endereços IP, os lgos locais do daemon de gerenciamento de endereços IP (iPAMD) mostram a seguinte mensagem:

“ipamd/ipamd.go:1285”,”msg”:”Total number of interfaces found: 3 “”AssignIPv4Address: IP address pool stats: total: 17, assigned 17” “AssignPodIPv4Address: ENI eni-abc123 does not have available addresses”

Exemplo de saída:

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

Examine a sub-rede para determinar 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.

Subnet: XXXXXXXXXXIPv4 CIDR Block 10.2.1.0/24   Number of allocated ips 254   Free address count 0

Para resolver esse problema, use as seguintes soluções:

Resposta de erro “Error while dialing”

Erro: “Error while dialing dial tcp 127.0.0.1:50051: connect: connection refused”

Esse erro indica que o pod aws-node não se comunicou com o IPAM porque o pod aws-node não pôde ser executando no nó.

Para solucionar esse problema, verifique se você está executando a versão correta do plug-in VPC CNI para a versão do cluster.

Os pods podem estar no estado Pending devido a erros nas sondas Liveness and Readiness. Certifique-se de ter a versão mais recente do complemento VPC CNI.

O problema também pode ocorrer porque o ponto de montagem do Dockershim (até a versão 1.23 do EKS) não pode ser montado. O exemplo de mensagem a seguir indica que o pod não montou var/run/dockershim.sock:

Getting running pod sandboxes from \"unix:///var/run/dockershim.sock\Not able to get local pod sandboxes yet (attempt 1/5): rpc error: code = Unavailable desc = all SubConns are in TransientFailure, latest connection error: connection error: desc = "transport: Error while dialing dial unix /var/run/dockershim.sock: connect: no such file or director

Para resolver esse problema, conclua as seguintes etapas:

  • Reinicie o pod aws-node para remapear o ponto de montagem.
  • Isole o nó e escale os nós no grupo de nós.
  • Atualize a interface de rede Amazon VPC para a versão mais recente do cluster compatível.

Se você adicionou o CNI como um plug-in gerenciado no Console de Gerenciamento da AWS, o aws-node não fará as sondagens. Os plug-ins gerenciados substituem 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 plug-in no Console de Gerenciamento da AWS e crie a conta de serviço com um arquivo de manifesto. Ou edite a conta de serviço do aws-node atual para adicionar a função usada no complemento gerenciado.

Resposta de erro “Pod does not have label”

Erros “Failed to parse Kubernetes args: pod does not have label vpc.amazonaws.com/PrivateIPv4Address” ou “Pod does not have label vpc.amazonaws.com/PrivateIPv4Address”

Esse problema ocorre quando um pod não tem um nodeSelector programado em um nó do Windows.

Para resolver o problema, certifique-se de incluir os seguintes rótulos no PodSpec para o nodeSelector:

kubernetes.io/os: windows  

kubernetes.io/arch: amd64

Erro no grupo de segurança

Erro: Plugin type="aws-cni" name="aws-cni" failed (add): add cmd: failed to assign an IP address to container
Vpc-resource-controller failed to allocate branch ENI to pod: creating network interface, NoCredentialProviders: no valid providers in chain. Deprecated.”

Essa resposta de erro pode indicar um problema com o plano de controle health.kubernetes. Para resolver esse problema, entre em contato com o AWS Support.

AWS OFICIAL
AWS OFICIALAtualizada há 7 meses