Como soluciono problemas de agendamento de pod com o Autoscaler do cluster no Amazon EKS?
Eu tenho problemas de agendamento de pod quando uso o Autoscaler do cluster no Amazon Elastic Kubernetes Service (Amazon EKS). Meu pod está preso no estado Pendente ou recebo uma notificação sobre uma falha no agendamento de um evento.
Resolução
Se você ativou o Autoscaler do cluster e seu pod estiver preso no estado Pendente, o Autoscaler do cluster talvez não adicione novos nós a pods não programados.
Verifique o estado do seu pod
Para verificar o estado do seu pod, execute o seguinte comando kubectl get pods:
kubectl get pods -n kube-system -l app=cluster-autoscaler
Se o pod estiver no estado Pendente ou se o contêiner do seu pod estiver no estado Aguardando, solucione o problema do status do pod.
Se seu pod estiver no estado CrashLoopBackOff, execute o seguinte comando kubectl describe pod:
kubectl describe pod cluster-autoscaler-####-#### -n kube-system
Observação: substitua cluster-autoscaler-####-#### pelo pod do Autoscaler do seu cluster.
Se a saída do comando mostrar “OOMKilled” com o código de saída 137, aumente os limites de recursos de memória e as solicitações para a implantação do autoscaler do seu cluster. Para obter mais informações, consulte Specify a memory request and a memory limit (Especificar uma solicitação de memória e um limite de memória) no site do Kubernetes.
Para verificar os logs do pod, execute o seguinte comando kubectl logs:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Os logs podem fornecer informações sobre solução de problemas. Por exemplo, o log do pod pode mostrar a seguinte mensagem de erro “AccessDenied”:
"Failed to create AWS Manager: AccessDenied: User: arn:aws:sts::444455556666:assumed-role/your-role is not authorized to perform: your-action because no identity-based policy allows the your-action action"
Para solucionar problemas de permissões do AWS Identity and Access Management (AWS IAM), anexe a política do IAM correta ao pod. Para obter mais informações, consulte Política do IAM no site do GitHub.
Ou o log pode mostrar a seguinte mensagem de erro:
"Failed to create AWS Manager: cannot autodiscover ASGs: WebIdentityErr: failed to retrieve credentials caused by: RequestError: send request failed caused by: Post https://sts.region.amazonaws.com/: : dial tcp: i/o timeout"
Se você estiver enfrentando problemas de conectividade de rede, verifique se a sub-rede do seu nó de processamento tem uma rota para os seguintes endpoints de serviço da AWS:
- ec2.region.amazonaws.com
- autoscaling.region.amazonaws.com
- sts.region.amazonaws.com
Além disso, verifique se a lista de controle de acesso à rede (ACL da rede) ou o grupo de segurança do nó de processamento da sua sub-rede não bloqueia o tráfego para os endpoints anteriores.
Se o cluster for privado, realize as seguintes ações:
- Adicione os endpoints anteriores à sua nuvem privada virtual (VPC).
- Configure o grupo de segurança nos endpoints para permitir tráfego na porta 443 de um grupo de segurança de nó de processamento.
Identifique por que seu Autoscaler do cluster não pode aumentar a escala horizontalmente do grupo do Auto Scaling
Para verificar se seu pod contém uma regra de agendamento, como afinidade ou antiafinidade, execute o seguinte comando kubectl describe pod:
kubectl describe pod pending-pod-name -n pending-pod-namespace
Observação: substitua pending-pod-name pelo nome do seu pod pendente e pending-pod-namespace pelo namespace do seu pod pendente. Para obter mais informações, consulte Affinity and anti-affinity (Afinidade e antiafinidade) no site do Kubernetes.
Na saída do comando, verifique a seção Eventos para entender por que seu pod está preso no estado Pendente. Por exemplo, é possível identificar um problema com seus rótulos de grupo de nós.
Para garantir que seus grupos de nós funcionem, realize as seguintes ações:
- Configure seus grupos de nós com rótulos que correspondam às configurações nodeSelector e requiredDuringSchedulingIgnoredDuringExecution na especificação nodeAffinity do seu pod. Para obter mais informações, consulte Node labels (Rótulos de nó) no site do Kubernetes. Os rótulos corretos permitem que o Autoscaler do cluster identifique os nós elegíveis para operações de escalabilidade.
- Verifique se você definiu corretamente as regras de agendamento do seu pod. Para obter mais informações, consulte Assigning Pods to nodes (Atribuição de pods a nós) no site do Kubernetes. Quando os pods usam nodeSelector ou requiredDuringSchedulingIgnoredDuringExecution, o Autoscaler do cluster considera somente a escalabilidade dos grupos de nós que atendam aos requisitos de agendamento dessas configurações.
Para verificar a configuração do Autoscaler do cluster, execute o seguinte comando kubectl get deployment:
kubectl get deployment cluster-autoscaler -n kube-system -o yaml
Se o Autoscaler do cluster tiver o argumento correto de node-group-auto-discovery, a saída do comando mostrará a seguinte configuração:
command: - ./cluster-autoscaler - --v=4 - --stderrthreshold=info - --cloud-provider=aws - --skip-nodes-with-local-storage=false - --expander=least-waste - --node-group-auto-discovery=asg:tag=k8s.io/cluster-autoscaler/enabled,k8s.io/cluster-autoscaler/your-cluster-name
Verifique se o grupo do Auto Scaling tem as tags corretas.
O Autoscaler do cluster exige as seguintes tags para descobrir o grupo do Auto Scaling associado ao grupo de nós:
Tag 1: key: k8s.io/cluster-autoscaler/your-cluster-name value: owned Tag 2: key: k8s.io/cluster-autoscaler/enabled value: true
Para verificar se o grupo de nós atingiu o número máximo de nós, execute o seguinte comando describe-nodegroup:
aws eks describe-nodegroup --cluster-name your-cluster-name --nodegroup-name your-nodegroup-name
Observação: substitua your-cluster-name pelo nome do seu cluster e your-nodegroup-name pelo nome do seu grupo de nós.
Se o grupo de nós atingiu o número máximo de nós, atualize o grupo de nós para aumentar a contagem máxima de nós. Em seguida, os novos nós podem programar os novos pods.
Verifique se a instância do Amazon Elastic Compute Cloud (Amazon EC2) que seu grupo do Auto Scaling lançou pode se juntar ao seu cluster. Se a instância não conseguir se juntar ao seu cluster, solucione os problemas dos seus nós de processamento.
Para verificar a solicitação de recurso do pod, execute o seguinte comando kubectl get pod:
kubectl get pod pending-pod-name -n pending-pod-namespace -o yaml | grep resources -A6
Observação: substitua pending-pod-name pelo nome do seu pod pendente e pending-pod-namespace pelo nome do namespace do seu pod pendente.
Verifique se o tipo de instância do nó atual atende à solicitação de recurso do pod e modifique a solicitação do recurso do pod, se necessário. Ou crie um novo grupo de nós com um tipo de instância modificado. Para obter mais informações sobre solicitações de recursos de pods, consulte Resource management for Pods and containers (Gerenciamento de recursos para pods e contêineres) no site do Kubernetes.
Para ver as taints de um nó, execute o seguinte comando kubectl describe node:
kubectl describe node your-node-name
Observação: substitua your-node-name pelo nome do seu nó.
Certifique-se de que seus pods toleram as taints que você adicionou ao nó. Se o nó não precisar das taints, remova-as do nó. Para obter mais informações, consulte Taints and tolerations (Taints e tolerâncias) no site do Kubernetes.
Informações relacionadas
Frequently asked questions (Perguntas frequentes) no site do GitHub
- Tópicos
- Containers
- Idioma
- Português

Conteúdo relevante
- feita há 2 meses
- feita há um mês
AWS OFICIALAtualizada há 9 meses
AWS OFICIALAtualizada há 2 anos