Solução de problemas do servidor de métricas em clusters do Kubernetes

Saiba como depurar e resolver problemas comuns relacionados ao metrics-server no seu cluster do Kubernetes, incluindo sintomas, causas e instruções passo a passo.

Nuvem privada virtual Infraestrutura clássica

Os sintomas a seguir podem indicar uma necessidade de ajustar os recursos metrics-server:

  • O metrics-server está reiniciando com frequência.

  • A exclusão de um espaço de nomes faz com que ele fique preso em um estado Terminating e kubectl describe namespace inclui uma condição relatando um erro de descoberta de API de métricas.

  • kubectl top pods, kubectl top nodes, outros comandos kubectl ou aplicativos que usam a API de Kubernetes para registrar erros de Kubernetes como:

    The server is currently unable to handle the request (get pods.metrics.k8s.io)
    
    Discovery failed for some groups, 1 failing: unable to retrieve the complete list of server APIs: metrics.k8s.io/v1beta1: the server is currently unable to handle the request
    
  • HorizontalPodAutoscalers (HPAs) não escala implementações.

  • A execução de kubectl get apiservices v1beta1.metrics.k8s.io resulta em um status como:

    NAME                     SERVICE                      AVAILABLE                      AGE
    v1beta1.metrics.k8s.io   kube-system/metrics-server   False (FailedDiscoveryCheck)   139d
    

O cluster possui um serviço de métricas fornecido pela implementação metrics-server no espaço de nomes kube-system. As solicitações de recursos metrics-server são baseadas no número de nós no cluster e otimizadas para clusters com 30 ou menos pods por nó do trabalhador. Se as solicitações de memória estiverem muito baixas, elas poderão falhar com erros de falta de memória e responder com muita lentidão. Se as solicitações de CPU estiverem muito baixas, possivelmente as análises de vivacidade e prontidão poderão falhar devido à limitação de CPU.

Problemas com o metrics-server também podem causar problemas em outras áreas. As APIs de métricas não estarão disponíveis se o plano de controle não conseguir se comunicar com o servidor de métricas por meio do Konnectivity. Os webhooks de controle de admissão podem impedir o plano de controle de criar pods, incluindo o pod metrics-server.

Siga estas etapas para solucionar problemas.

  1. Verificar se existem pods de servidor de métricas.

    kubectl get pod -n kube-system -l k8s-app=metrics-server
    

    Se nenhum pod for listado, provavelmente há um problema com um webhook admission-control. Consulte Por que as operações de cluster falham devido a um webhook interrompido?.

  2. Verifique se o apiserver pode se conectar ao metrics-server.

    kubectl logs POD -n kube-system -c metrics-server --tail 5
    

    SubstituaPOD pelo nome de pod mostrado anteriormente. O conteúdo de quaisquer logs retornados não importa.

    Se você receber uma mensagem de erro com texto como <workerIP>:10250: getsockopt: connection timed out, consulte Comandos de tempo de limite kubectl.

  3. Se as etapas anteriores não mostrarem um problema, ajuste os recursos para o metrics-server. Consulte Ajustando recursos do provedor de métricas de cluster.