Como soluciono problemas ao configurar o Cluster Autoscaler em um cluster do Amazon EKS?
Quero solucionar problemas ao iniciar o Cluster Autoscaler no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).
Resolução
Observação: se você receber mensagens de erro ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.
Os comandos na resolução a seguir não usam a sinalização --region porque usam a região padrão da AWS. Para verificar sua região padrão, execute o seguinte comando configure da AWS CLI:
aws configure
Para alterar a região, use a sinalização --region.
Pré-requisitos: Instale ou atualize o eksctl para a versão mais recente. Para obter instruções, consulte Opções de instalação para Eksctl no site do eksctl.
Execute as seguintes ações de solução de problemas com base no problema que você encontrar. Para solucionar problemas de sonda, consulte Como solucionar problemas de sonda de disponibilidade e prontidão com meus clusters do Amazon EKS?
O pod Cluster Autoscaler está em um estado “CrashLoopBackOff”
Para solucionar o problema do estado “CrashLoopBackOff”, conclua as seguintes etapas:
-
Para verificar o status do pod do Cluster Autoscaler, execute o seguinte comando:
kubectl get pods -n kube-system | grep cluster-autoscalerExemplo de saída:
NAME READY STATUS RESTARTS AGE cluster-autoscaler-abcd-abcd 0/1 CrashLoopBackOff 3 (20s ago) 99s -
Para obter detalhes sobre por que o pod está preso no estado “CrashLoopBackOff”, execute o seguinte comando:
kubectl describe pod cluster-autoscaler-abcd-abcde -n kube-systemObservação: substitua cluster-autoscaler-abcd-abcde pelo nome do pod do Cluster Autoscaler.
Na saída, verifique o valor de Reason. Se você encontrar um problema OOMKilled, use o comando kubectl edit para aumentar os valores de limites e solicitações para recursos de memória na implantação do Cluster Autoscaler. Para obter mais informações sobre kubectl edit, consulte kubectl edit no site do Kubernetes. Para ver os valores de memória padrão no Cluster Autoscaler, consulte cluster-autoscaler-autodiscover.yaml no site do GitHub.
Exemplo de saída:Name: cluster-autoscaler-abcd-abcde Namespace: kube-system State: Waiting Reason: CrashLoopBackOff Last State: Terminated Reason: OOMKilled Exit Code: 137 ... -
Para verificar se há problemas nos logs do pod do Cluster Autoscaler, execute o seguinte comando:
kubectl logs -f -n kube-system -l app=cluster-autoscalerSe os logs apresentarem problemas de permissão do AWS Identity and Access Management (AWS IAM), prossiga para O pod do Cluster Autoscaler apresenta problemas de permissões do IAM. Exemplo de saída:
Failed to create AWS Manager: cannot autodiscover ASGs: AccessDenied: User: abc is not authorized to perform: autoscaling: DescribeTags because no identity-based policy allows the autoscaling:DescribeTags action status code: 403, request id: abcdexyzSe os logs apresentarem problemas de rede, como tempo limite de E/S, prossiga para O pod do Cluster Autoscaler apresenta problemas de rede. Exemplo de saída:
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
O pod do Cluster Autoscaler apresenta problemas de permissões do IAM
Verifique se você associou um provedor OIDC ao cluster
Certifique-se de ter criado um provedor do OpenID Connect (OIDC) para seu cluster.
Verifique se você anotou a conta de serviço do Cluster Autoscaler com o perfil do IAM
Para verificar as anotações da sua conta de serviço da AWS, execute o seguinte comando:
kubectl get serviceaccount cluster-autoscaler -n kube-system -o yaml
Verifique as anotações para garantir que a saída liste o seu perfil de conta de serviço do Cluster Autoscaler. Exemplo de saída:
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/cluster_auto_scaler_iam_role name: cluster-autoscaler namespace: kube-system
Para solucionar problemas com o seu perfil de conta de serviço, consulte Como solucionar problemas de um provedor de OIDC e IRSA no Amazon EKS?
Verifique a política do IAM
Certifique-se de anexar a política do IAM correta ao perfil da conta de serviço do Cluster Autoscaler. Para ver um exemplo de política e uma lista de permissões necessárias, consulte IAM policy (Política do IAM) no site do GitHub.
Verifique se você configurou corretamente a relação de confiança
Verifique se você configurou corretamente a relação de confiança. Exemplo de relação de confiança:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::example_awsaccountid:oidc-provider/oidc.eks.example_region.amazonaws.com/id/example_oidcid" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.example_region.amazonaws.com/id/example_oidcid:aud": "sts.amazonaws.com", "oidc.eks.example_region.amazonaws.com/id/example_oidcid:sub": "system:serviceaccount:kube-system:cluster-autoscaler" } } } ] }
Observação: substitua example_awsaccountid pelo ID da sua conta da AWS, example_region pela sua região e example_oidcid pelo seu ID do OIDC.
Sempre que você alterar o perfil ou a política da conta de serviço, execute o seguinte comando para reiniciar o pod do Cluster Autoscaler:
kubectl rollout restart deployment cluster-autoscaler -n kube-system
O pod do Cluster Autoscaler apresenta problemas de rede
Certifique-se de ter configurado o cluster do Amazon EKS com a configuração de rede necessária. Verifique se a sub-rede do nó de processamento tem uma tabela de rotas que pode rotear o tráfego para os seguintes endpoints:
- ec2.amazonaws.com para Amazon Elastic Compute Cloud (Amazon EC2)
- autoscaling.region.amazonaws.com para Amazon EC2 Auto Scaling
- sts.region.amazonaws.com para AWS Security Token Service (AWS STS)
Observação: substitua region pela sua região.
Se o cluster do Amazon EKS for privado, você deve criar um endpoint da Amazon Virtual Private Cloud (Amazon VPC) para os endpoints anteriores.
Observação: cada grupo de segurança do endpoint da VPC deve permitir o grupo de segurança do nó de processamento do Amazon EKS. Os grupos de segurança também devem permitir tráfego de entrada para o bloco CIDR da VPC do Amazon EKS na porta 443.
Verifique se a lista de controle de acesso à rede (ACL da rede) da sub-rede e os grupos de segurança do nó de processamento não bloqueiam o tráfego que se comunica com esses endpoints.
O Cluster Autoscaler não reduz nem aumenta a escala horizontalmente dos nós
Verifique os logs do pod do Cluster Autoscaler para visualizar as regras de programação
Para verificar o status dos seus pods, execute o seguinte comando:
kubectl logs -f -n kube-system -l app=cluster-autoscaler
Para verificar se o pod com status Pendente contém regras de programação, como a regra de afinidade, execute o seguinte comando:
kubectl describe pod example_podname -n example_namespace
Observação: substitua example_podname pelo nome do pod e example_namespace pelo seu namespace.
Na saída, consulte a seção eventos para obter mais informações sobre por que o pod está no status Pendente. Exemplo de saída:
$ kubectl describe pod cluster-autoscaler-abcde-abcd -n kube-system Name: cluster-autoscaler-5b6b675456-npf8p ... Status: Pending ... Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedScheduling 12s (x4 over 2m) default-scheduler 0/4 nodes are available: 1 node(s) didn't match node selector, 3 node(s) didn't match pod affinity rules.
Observação: o Cluster Autoscaler respeita o nodeSelector e requiredDuringSchedulingIgnoredDuringExecution em nodeAffinity. Certifique-se de rotular seus grupos de nós com esses valores. Para rotular seus grupos de nós, execute o seguinte comando:
kubectl get nodes --show-labels
Se o Cluster Autoscaler não conseguir programar um pod com nodeSelector ou requiredDuringSchedulingIgnoredDuringExecution, ele usará somente grupos de nós que atendam aos requisitos de expansão. Para programar um pod em um nó, é necessário modificar as regras de programação definidas nos pods ou nos nós. Para obter mais informações, consulte Affinity and anti-affinity (Afinidade e antiafinidade) no site do Kubernetes.
Verifique a marcação do grupo do Amazon EC2 Auto Scaling para o Cluster Autoscaler
Para que o Cluster Autoscaler descubra um grupo do Auto Scaling, você deve marcar o grupo do Amazon EC2 Auto Scaling do grupo de nós com as seguintes tags.
Na tag 1, configure os seguintes valores:
- Em key, insira k8s.io/cluster-autoscaler/example-cluster.
- Em value, insira owned.
Observação: substitua example-cluster pelo nome do seu cluster.
Na tag 2, configure os seguintes valores:
- Em key, insira k8s.io/cluster-autoscaler/enabled.
- Em value, insira true.
Verifique a configuração do manifesto de implantação
Para abrir o manifesto de implantação, execute o seguinte comando:
kubectl -n kube-system edit deployment.apps/cluster-autoscaler
Na saída, em node-group-auto-discover, certifique-se de que o manifesto lista o nome correto do cluster ou do grupo de nós. Exemplo de saída:
containers:- 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/example-cluster --balance-similar-node-groups --skip-nodes-with-system-pods=false
Certifique-se de não exceder se número máximo de nós
Para verificar o número atual de nós, execute o seguinte comando describe-nodegroup:
aws eks describe-nodegroup --cluster-name example-cluster --nodegroup-name example-nodegroup
Observação: substitua example-cluster pelo nome do seu cluster e example-nodegroup pelo nome do seu grupo de nós.
Se você atingiu o número mínimo ou máximo de nós, execute o seguinte comando update-nodegroup-config para modificar os valores:
aws eks update-nodegroup-config \ --cluster-name cluster-name \ --nodegroup-name nodegroup-name \ --scaling-config minSize=minvalue,maxSize=maxvalue,desiredSize=desiredvalue \
Observação: substitua cluster-name pelo nome do seu cluster e nodegroup-name pelo nome do seu grupo de nós. Além disso, substitua minvalue pelo número mínimo de nós, maxvalue pelo número máximo de nós e desiredvalue pelo valor desejado de nós.
Certifique-se de que seus nós conseguem ingressar no cluster
Verifique se as novas instâncias que o grupo do Amazon EC2 Auto Scaling inicia podem ingressar no cluster do Amazon EKS. Se não conseguirem, consulte Como posso fazer os meus nós de processamento ingressarem no meu cluster do Amazon EKS?
Certifique-se de que você está usando o tipo correto de instância de nó
Para verificar se o Cluster Autoscaler pode atender à solicitação de recurso do pod com os tipos de instância do nó atual, execute o seguinte comando:
kubectl -n example_namespace get pod example_podname -o yaml | grep resources -A6
Observação: substitua example-cluster pelo nome do seu cluster e example-podname pelo nome do seu pod.
Exemplo de saída:
containers: - image: registry.k8s.io/autoscaling/cluster-autoscaler:v1.32.1 name: cluster-autoscaler resources: limits: cpu: 100m memory: 600Mi requests: cpu: 100m memory: 600Mi
Na saída, verifique os valores de limites e solicitações. Certifique-se de que os valores de cpu e memória sejam altos o suficiente para que o nó mantenha o pod. Para consultar os requisitos do seu pod, execute o seguinte comando:
kubectl describe pod podname -n namespace,
Observação: substitua podname pelo nome do seu pod e namespace pelo seu namespace.
Se os requisitos do pod forem maiores do que as capacidades do nó, use o comando kubectl edit para aumentar os valores de limites e solicitações para recursos de memória na implantação do Cluster Autoscaler. Ou crie um novo grupo de nós com um tipo diferente de instância que atenda aos requisitos de recursos do pod. Para obter mais informações sobre kubectl edit, consulte kubectl edit no site do Kubernetes.
Verifique a configuração de taint do nó no grupo de nós
Para verificar se você configurou taints para o nó e se o pod pode tolerar os taints, execute o seguinte comando:
kubectl describe node example_nodename | grep taint -A2
Observação: substitua example_nodename pelo nome do seu nó.
Se você configurou taints, remova os taints definidos no nó. Para ver as etapas, consulte Seu pod está no estado Pendente em Como soluciono problemas de status do pod no Amazon EKS? Se o Pod não tolerar taints, defina a tolerância no pod. Para obter mais informações, consulte Taints and tolerations (Taints e tolerâncias) no site do Kubernetes.
Certifique-se de que o nó não esteja com a redução de escala vertical desativada
Para verificar o status de scale-down-disable em seu nó, execute o seguinte comando:
kubectl describe node example_nodename | grep scale-down-disable
Observação: substitua example_nodename pelo nome do seu nó.
Exemplo de saída:
cluster-autoscaler.kubernetes.io/scale-down-disabled: true
Se scale-down-disable estiver definido como true, execute o seguinte comando para remover a anotação do nó e permitir que ele reduza a escala verticalmente:
kubectl annotate node example_nodename cluster-autoscaler.kubernetes.io/scale-down-disabled-
Observação: substitua example_nodename pelo nome do seu nó.
Para obter mais etapas de solução de problemas do Cluster Autoscaler, consulte Frequently Asked Questions (Perguntas frequentes) no site do GitHub.
- Tópicos
- Containers
- Idioma
- Português

Conteúdo relevante
feita há um ano
feita há 2 anos