1
resposta

Nodes do cluster Kubernetes EKS com consumo de CPU elevado

Pessoal, boa noite. Tenho alguns clusters Kubernetes(AWS EKS), onde o consumo de CPU dos nodes muitas vezes chega a 98%, 99% e 100%.

Peguei 1 cluster para testar o Karpenter, usei ele no lugar do Cluster AutoScaler, o trabalho dele é ótimo na parte de scaling, mas não ajudou na parte de provisionar nodes quando houvessem muitos nodes com CPU elevada(sim, eu sei que não é o trabalho dele, mas foi uma tentativa).

Alguns dias atrás instalei o Descheduler e comecei a testar ele, ele funciona, mas a forma que ele trabalha(evitando os Pods que estão nos Nodes) não é muito legal, tem alguns workloads que não aceitam muito bem este formato, além do mais, as métricas do Descheduler não são tão precisas, algumas não funcionam, mesmo estando dentro do range esperado.

Antes de partir para a próxima alternativa: Ativar uma triggger que adicione uma Taint PreferNoSchedule nos nodes que ultrapassarem 80% ou 90% de CPU. E quando o consumo de CPU baixar, a trigger acione a remoção do Taint.

Como vocês tem feito para evitar um consumo elevado de CPU nos nodes do Kubernetes(EKS)?

1 resposta

Olá, Fernando

Entendo sua preocupação com o consumo elevado de CPU nos nodes do seu cluster Kubernetes. Aqui estão algumas sugestões que você pode considerar:

  1. Monitoramento e alertas: Utilize ferramentas como Prometheus e Grafana para monitorar o uso de recursos do seu cluster. Você pode configurar alertas para ser notificado quando o uso de CPU estiver alto.

  2. Limites de recursos: Defina limites de recursos para os pods. Isso pode ser feito no nível do pod ou no nível do namespace, usando LimitRanges. Por exemplo, você pode definir um limite de CPU de 500m para um pod. Isso significa que o pod pode usar até 500 milicore de CPU.

  3. Autoscaling: O Kubernetes tem um recurso chamado Horizontal Pod Autoscaler (HPA) que ajusta automaticamente o número de pods em um deployment ou replica set com base no uso de CPU. Você pode configurar o HPA para aumentar o número de pods quando o uso de CPU for alto.

  4. Pod Priority e Preemption: No Kubernetes, você pode definir prioridades para pods. Quando o cluster está com falta de recursos, o Kubernetes pode despejar pods de menor prioridade para dar lugar a pods de maior prioridade.

  5. Node Affinity: Node Affinity é um recurso do Kubernetes que permite que você especifique em quais nodes um pod deve ser agendado. Isso pode ser útil se você tiver nodes com mais recursos de CPU e quiser que determinados pods sejam agendados nesses nodes.

  6. Taints e Tolerations: Como você mencionou, você pode usar taints e tolerations para controlar em quais nodes os pods podem ser agendados. Você pode adicionar um taint a um node que está com alto uso de CPU e adicionar uma toleration ao pod que permite que ele seja agendado nesse node.

Por último, vale a pena mencionar que o gerenciamento de recursos em um cluster Kubernetes pode ser um desafio e pode exigir uma combinação de várias estratégias. Espero que essas sugestões possam te ajudar a encontrar a melhor solução para o seu caso.

Espero ter ajudado e bons estudos!