Por que não consigo coletar métricas de contêineres, pods ou nós usando o Metrics Server no Amazon EKS?
Não consigo coletar métricas de contêineres, pods ou nós com o Metrics Server no meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS).
Resolução
O Amazon EKS não instala automaticamente o Metrics Server. Se você criou seu cluster recentemente e não consegue coletar métricas usando o Metrics Server, confirme se implantou a aplicação Metrics Server no seu cluster.
Se você ainda não conseguir coletar métricas com o Metrics Server, conclua as etapas nas seções a seguir:
Observação: o Metrics Server não é uma prática recomendada para o monitoramento de longo prazo do desempenho de aplicações e clusters. Para monitoramento de longo prazo, consulte Gerenciamento de recursos em Pods e contêineres, no site do Kubernetes. A comunidade Kubernetes mantém o Metrics Server e relata problemas em sua página do GitHub. Para obter mais informações, consulte Issues (Problemas) na página do Metrics Server no GitHub.
Verifique se é possível recuperar métricas dos nós e pods do seu cluster
Para verificar se é possível recuperar métricas dos nós e pods do seu cluster, execute os seguintes comandos:
kubectl top nodes kubectl top pods
Observação: se você não receber uma mensagem de erro de nenhum dos comandos, consulte a seção Verifique se o APIService está disponível e pode lidar com solicitações.
Se você receber uma mensagem de erro, conclua as etapas em uma das seções a seguir com base no erro recebido:
Mensagem de erro "Error from server (Forbidden)"
Se você tiver um problema com a autorização do controle de acesso baseado em perfil (role based access control, RBAC), receberá uma mensagem de erro "Error from server (Forbidden)".
Para resolver esse erro, realize as seguintes ações:
- Confirme se ServiceAccount está anexada corretamente à implantação.
- Verifique se ClusterRole/Role e ClusterRoleBinding/RoleBindings usam as permissões RBAC corretas no Metrics Server. Para obter mais informações, consulte Using RBAC authorization (Usando autorização RBAC) no site do Kubernetes.
Se você acessar o cluster por meio de um perfil definido no aws-auth ConfigMap, confirme se definiu o campo nome de usuário e o mapeamento.
Conclua as etapas a seguir:
-
Para descrever o aws-auth ConfigMap, execute o comando a seguir:
kubectl describe -n kube-system configmap aws-auth -
Examine a saída do comando anterior para confirmar se o campo nome de usuário está definido no perfil que acessa o cluster.
Exemplo de saída:Name: aws-auth Namespace: kube-system Labels: Annotations: <none> Data === mapRoles: ---- ... - groups: - system:masters rolearn: arn:aws:iam::123456789123:role/kubernetes-devops username: devops:`SessionName`Certifique-se de que nome de usuário está especificado na saída.
Mensagem de erro "Error from server (ServiceUnavailable)"
Se o Metrics Server não estiver configurado corretamente, você receberá a mensagem de erro "Error from server (ServiceUnavailable)".
Para verificar se há um problema com a configuração da aplicação de serviço Metrics Server em seu cluster, execute o comando a seguir:
kubectl describe apiservices v1beta1.metrics.k8s.io
Exemplo de saída:
Name: v1beta1.metrics.k8s.io Namespace: Labels: app=metrics-server ... Status: Conditions: Last Transition Time: 2020-01-09T13:57:23Z Message: all checks passed Reason: Passed Status: True Type: Available Events: <none>
Se o serviço Metrics Server estiver disponível e passar nas verificações, o Status será definido como True.
Observação: se você definir Status como True e o problema persistir, consulte a seção Verifique se o APIService está disponível e pode lidar com solicitações.
Se o Status estiver definido como False, procure o código de Reason associado e Message legível em Conditions na saída.
Exemplo de falha do APIService:
... Status: Conditions: Last Transition Time: 2020-01-09T14:40:28Z Message: no response from https://10.0.35.231:443: Get https://10.0.35.231:443: dial tcp 10.0.35.231:443: connect: connection refused Reason: FailedDiscoveryCheck Status: False Type: Available
Observação: se Reason não for FailedDiscoveryCheck, consulte a seção Outros motivos de falha na condição do APIServer. Se a mensagem em Conditions do APIServer contiver Client.Timeout exceeded while awaiting headers, consulte a seção Resolva o erro "Client.Timeout exceeded while awaiting headers". Se a mensagem em Conditions do APIServer contiver Connection refused, consulte a seção Resolva o erro "Connection refused".
Resolva o erro "Client.Timeout exceeded while awaiting headers"
Se você não configurou corretamente um grupo de segurança ou uma lista de controle de acesso à rede (ACL da rede), receberá a mensagem de erro "Client.Timeout exceeded will awaiting headers" em APIService. Então não é possível acessar os pods do metrics-server.
Para resolver esse erro, confirme se seus grupos de segurança estão em conformidade com os requisitos mínimos de tráfego do Amazon EKS.
Resolva o erro "Connection refused"
Se um contêiner receber na porta errada, você receberá a mensagem de erro "Connection refused".
Para resolver esse erro, execute o comando a seguir para confirmar se os valores de portas, imagem e comando estão corretos na implantação do metrics-server:
kubectl describe deployment metrics-server -n kube-system
Exemplo de saída:
Name: metrics-server Namespace: kube-system CreationTimestamp: Wed, 08 Jan 2020 11:48:45 +0200 Labels: app=metrics-server ... Containers: metrics-server: Image: gcr.io/google_containers/metrics-server-amd64:v0.3.6 Port: 443/TCP Command: - /metrics-server - --logtostderr - --secure-port=443 ...
Observação: os valores de Comando e Imagem variam dependendo de como você implanta o Metrics Server e onde você armazena as imagens. Se o Comando contiver o parâmetro --secure-port, a porta exposta pelo pod deve corresponder a esse parâmetro. Se o Comando não contiver o parâmetro --secure-port, o padrão da porta será 443.
Outros motivos de falha na condição do APIServer
Se você receber qualquer um dos seguintes códigos no APIService, realize uma ação com base na mensagem de erro associada: ServiceNotFound, ServiceAccessError, ServicePortError, EndpointsNotFound, EndpointsAccessError ou MissingEndpoints.
Conclua as seguintes etapas para resolver esses erros:
-
Para obter informações sobre o serviço com o erro, execute o comando a seguir:
kubectl get service -n kube-systemNa saída, confirme se o serviço Kubernetes tem o mesmo nome e namespace definidos em APIService.Spec.Service. Em seguida, confirme se a porta está definida como 443/TCP.
Exemplo de saída:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metrics-server ClusterIP 172.20.172.133 <none> 443/TCP 65m -
Execute o comando a seguir para listar todos os endpoints:
kubectl get endpoints metrics-server -n kube-systemNa saída, confirme se você tem pelo menos um endpoint para o serviço metrics-server.
Exemplo de saída:NAME ENDPOINTS AGE metrics-server 10.0.35.231:443 76m -
Para confirmar se a implantação está presente e se os rótulos correspondem aos do serviço metrics-server, execute o comando a seguir:
kubectl describe deploy metrics-server -n kube-systemNa saída, confirme se a implantação tem pelo menos uma réplica.
Exemplo de saída:Name: metrics-server Namespace: kube-system CreationTimestamp: Wed, 08 Jan 2020 11:48:45 +0200 Labels: app=metrics-server release=metrics-server ... Selector: app=metrics-server,release=metrics-server Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable ... Pod Template: Labels: app=metrics-server release=metrics-server Service Account: metrics-server Containers: metrics-server: Image: gcr.io/google_containers/metrics-server-amd64:v0.3.6 ...
Se ainda assim não for possível coletar métricas com o Metrics Server, consulte a seção Verifique se o APIService está disponível e pode lidar com solicitações.
Verifique se o APIService está disponível e pode lidar com solicitações
Para extrair logs de seus pods do Metrics Server, execute o comando a seguir:
kubectl logs -n namespace -l app=metrics-server
Observação: substitua namespace pelo seu namespace.
Exemplos de logs de erros:
E0610 23:13:28.247604 1 reststorage.go:98] unable to fetch pod metrics for pod default/php-apache-b5f58cc5f-nv8sz: no metrics known for pod "default/php-apache-b5f58cc5f-nv8sz" E0610 23:13:43.260069 1 reststorage.go:98] unable to fetch pod metrics for pod default/php-apache-b5f58cc5f-nv8sz: no metrics known for pod "default/php-apache-b5f58cc5f-nv8sz" E0610 23:16:13.346070 1 reststorage.go:98] unable to fetch pod metrics for pod default/php-apache-b5f58cc5f-cj67b: no metrics known for pod "default/php-apache-b5f58cc5f-cj67b" E0610 23:16:13.346087 1 reststorage.go:98] unable to fetch pod metrics for pod default/php-apache-b5f58cc5f-sqc6l: no metrics known for pod "default/php-apache-b5f58cc5f-sqc6l" E0610 23:16:13.346091 1 reststorage.go:98] unable to fetch pod metrics for pod default/php-apache-b5f58cc5f-4cpwk: no metrics known for pod "default/php-apache-b5f58cc5f-4cpwk"
Observação: os logs de erro do Metrics Server indicam um problema de configuração no comando de implantação do Metrics Server ou um bug no contêiner do Metrics Server. Se a mensagem de erro não for óbvia ou você suspeitar que seja um bug, conclua as etapas na seção Consulte o GitHub para ver problemas comuns.
Consulte o GitHub para ver problemas comuns
Se você ainda não conseguir coletar métricas de contêineres, pods ou nós, consulte o GitHub para ver problemas comuns com o Metrics Server. Para obter mais informações, consulte Issues (Problemas) na página do Metrics Server no GitHub.
Para verificar as métricas desconhecidas do HorizontalPodAutoscaler (HPA) e das solicitações de recursos da aplicação, conclua as seguintes etapas:
-
Para verificar a configuração do HPA, execute o comando a seguir:
kubectl get hpa -n namespace 2048-deploymentObservação: substitua namespace e 2048-deployment pelos valores de configuração do HPA em sua aplicação.
É possível ver <unknown> na coluna Targets da saída.
Exemplo de saída:NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE 2048-deployment Deployment/2048-deployment <unknown>/80% 1 2 2 10s -
Aguarde alguns minutos e repita o comando da etapa 1.
Se você ainda receber o erro "<unknown>" execute o seguinte comando:kubectl describe hpa -n namespace 2048-deploymentObservação: substitua namespace pelo seu namespace.
Em seguida, consulte a seção Events da saída para obter mais informações.
Exemplo de saída:Name: 2048-deployment Namespace: 2048-game ... Metrics: ( current / target ) resource cpu on pods (as a percentage of request): <unknown> / 80% Min replicas: 1 Max replicas: 2 Deployment pods: 2 current / 2 desired Conditions: Type Status Reason Message ---- ------ ------ ------- AbleToScale True SucceededGetScale the HPA controller was able to get the target's current scale ScalingActive False FailedGetResourceMetric the HPA was unable to compute the replica count: missing request for cpu Events: Type Reason Age From Message ---- ------ ---- ---- ------- Warning FailedGetResourceMetric 3m29s (x4333 over 19h) horizontal-pod-autoscaler missing request for cpuObservação: se a coluna Message mostrar missing request for [x], suas Implantações ou ReplicaSet podem não declarar solicitações de recursos em suas especificações. Confirme se todos os contêineres do pod têm as solicitações declaradas. Se você omitir uma solicitação, a métrica no HPA retornará a resposta <unknown>.
Para obter mais informações, consulte Gerenciamento de recursos em Pods e contêineres, Deployments (Implantações) e ReplicaSet no site do Kubernetes.
- Tópicos
- Containers
- Idioma
- Português

Conteúdo relevante
- Resposta aceita
feita há 9 meses
feita há 10 meses