¿Por qué no puedo recopilar métricas de contenedores, pods o nodos mediante el Servidor de métricas en Amazon EKS?
No puedo recopilar métricas de contenedores, pods o nodos con el Servidor de métricas en mi clúster de Amazon Elastic Kubernetes Service (Amazon EKS).
Resolución
Amazon EKS no instala el Servidor de métricas automáticamente. Si acabas de crear tu clúster y no puedes recopilar métricas mediante el Servidor de métricas, confirma que has desplegado la aplicación Servidor de métricas en tu clúster.
Si sigues sin poder recopilar métricas con el Servidor de métricas, lleva a cabo los pasos de las siguientes secciones.
Nota: No se recomienda usar el Servidor de métricas para la supervisión a largo plazo del rendimiento de las aplicaciones y los clústeres. Para obtener información sobre la supervisión a largo plazo, consulta Administración de recursos para pods y contenedores en el sitio web de Kubernetes. La comunidad de Kubernetes mantiene el Servidor de métricas e informa de los problemas en su página de GitHub. Para obtener más información, consulta Issues (Problemas) en la página de GitHub del Servidor de métricas.
Comprobación para saber si se pueden recuperar las métricas de los nodos y pods del clúster
Para comprobar si puedes recuperar las métricas de los nodos y pods de tu clúster, ejecuta los siguientes comandos:
kubectl top nodes kubectl top pods
Nota: Si no recibes ningún error en ninguno de los comandos, completa los pasos de la sección Comprobación de si APIService está disponible y puede gestionar solicitudes.
Si recibiste un error del comando anterior, sigue los pasos de una de las siguientes secciones en función del error que hayas recibido.
Mensaje de error «Error from server (Forbidden)»
Si tienes algún problema con la autorización del control de acceso basado en roles (RBAC), recibirás el mensaje de error «Error from server (Forbidden)».
Para resolverlo, haz lo siguiente:
- Confirma que ServiceAccount se conecta correctamente al despliegue.
- Comprueba que ClusterRole/Role y ClusterRoleBinding/RoleBindings utilicen los permisos de RBAC correctos para el Servidor de métricas. Para obtener más información, consulta Using RBAC authorization (Uso de la autorización RBAC) en el sitio web de Kubernetes.
Si accedes a tu clúster a través de un rol definido en el aws-auth ConfigMap, confirma que has configurado el campo username y la asignación.
Sigue estos pasos:
-
Para describir el ConfigMap aws-auth, ejecuta el siguiente comando:
kubectl describe -n kube-system configmap aws-auth -
Revisa el resultado del comando anterior para confirmar que el campo username está configurado para el rol que accede al clúster.
Resultado de ejemplo: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`Asegúrate de que el nombre de usuario esté especificado en la salida.
Mensaje de error «Error from server (ServiceUnavailable)»
Si el Servidor de métricas no está configurado correctamente, recibirás el mensaje de error «Error from server (ServiceUnavailable)».
Para comprobar si hay algún problema con la configuración de la aplicación de servicio del Servidor de métricas en tu clúster, ejecuta el siguiente comando:
kubectl describe apiservices v1beta1.metrics.k8s.io
Resultado de ejemplo:
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>
Si el servicio del Servidor de métricas está disponible y supera las comprobaciones, el campo Estado se establece en True.
Nota: Si estableces el estado en True y el problema persiste, consulta la sección Comprobación de si APIService está disponible y puede gestionar solicitudes.
Si el estado está establecido en False, busca el código de motivo asociado y el mensaje de condiciones legible por humanos en la salida.
Ejemplo de APIService con error:
... 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
Nota: Si el motivo no es FailedDiscoveryCheck, consulta la sección Otros motivos de error de condiciones de APIServer. Si el mensaje de condiciones del APIServer contiene el error Client.Timeout exceeded while awaiting headers, consulta la sección Solucionar el error «Client.Timeout exceeded while awaiting headers». Si el mensaje de condiciones del APIServer contiene Connection refused, consulta la sección Solucionar el error «Connection refused».
Solución del error «Client.Timeout exceeded while awaiting headers»
Si no configuraste correctamente un grupo de seguridad o una lista de control de acceso de la red (ACL de la red), verás el mensaje de error «Client.Timeout exceeded will waiting headers» en APIService.**** Entonces, no podrás acceder a los pods de metrics-server.
Para solucionar este error, confirma que tus grupos de seguridad cumplen con los requisitos mínimos de tráfico de Amazon EKS.
Solución del error «Connection refused»
Si un contenedor escucha en el puerto incorrecto, recibirás el mensaje de error «Connection refused».
Para solucionar este error, ejecuta el siguiente comando para confirmar que los valores de puertos, imagen y comando son correctos en el despliegue de metrics-server:
kubectl describe deployment metrics-server -n kube-system
Resultado de ejemplo:
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 ...
Nota: Los valores **Comando ** e Imagen varían según cómo se despliegue el Servidor de métricas y dónde guardes las imágenes. Si el comando contiene el parámetro --secure-port, el puerto expuesto por el pod debe coincidir con este parámetro. Si el comando no contiene el parámetro --secure-port, el puerto se establece de forma predeterminada en 443.
Otros motivos de error de condiciones del APIServer
Si recibes alguno de los siguientes códigos en el APIService, actúa en función del mensaje de error asociado: ServiceNotFound, ServiceAccessError, ServicePortError, EndpointsNotFound, EndpointsAccessError o MissingEndpoints.
Para resolver los erroes, sigue los pasos a continuación:
-
Para obtener información sobre el servicio con el error, ejecuta el siguiente comando:
kubectl get service -n kube-systemEn el resultado, confirma que el servicio de Kubernetes tiene el mismo nombre y espacio de nombres que se definen en APIService.Spec.Service. A continuación, confirma que el puerto esté configurado en 443/TCP.
Resultado de ejemplo:NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE metrics-server ClusterIP 172.20.172.133 <none> 443/TCP 65m -
Ejecuta el siguiente comando para ver una lista de todos los puntos de enlace:
kubectl get endpoints metrics-server -n kube-systemEn el resultado, confirma que tienes al menos un punto de conexión para el servicio del metrics-server.
Resultado de ejemplo:NAME ENDPOINTS AGE metrics-server 10.0.35.231:443 76m -
Para confirmar que el despliegue está presente y que las etiquetas coinciden con las del servicio del metrics-server, ejecuta el siguiente comando:
kubectl describe deploy metrics-server -n kube-systemEn el resultado, confirma que el despliegue tiene al menos una réplica.
Resultado de ejemplo: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 ...
Si sigues sin poder recopilar métricas con el Servidor de métricas, consulta la sección Comprobación de si APIService está disponible y puede gestionar solicitudes.
Comprobación de APIService está disponible y puede gestionar solicitudes
Para extraer los registros de tus pods del Servidor de métricas, ejecuta el siguiente comando:
kubectl logs -n namespace -l app=metrics-server
Nota: Sustituye namespace por tu espacio de nombres.
Ejemplos de registros de errores:
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"
Nota: Los registros de errores del Servidor de métricas indican si tienes un problema de configuración en el comando de despliegue del Servidor de métricas o un error en el contenedor del mismo. Si el mensaje de error no es obvio o sospecha que se trata de un error, sigue los pasos de la sección Consulta de GitHub para ver los problemas más comunes.
Consulta de GitHub para ver los problemas más comunes
Si sigues sin poder recopilar métricas de contenedores, pods o nodos, consulta GitHub para ver si hay problemas comunes con el Servidor de métricas. Para obtener más información, consulta Issues (Problemas) en la página de GitHub del Servidor de métricas.
Para comprobar si hay métricas desconocidas en HorizontalPodAutoscaler (HPA) y en las solicitudes de recursos de la aplicación, sigue estos pasos:
-
Para comprobar la configuración de HPA, ejecuta el siguiente comando:
kubectl get hpa -n namespace 2048-deploymentNota: Sustituye namespace y 2048-deployment por los valores de configuración de HPA de tu aplicación.
Puede que veas <unknown> en la columna Objetivos del resultado.
Resultado de ejemplo:NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE 2048-deployment Deployment/2048-deployment <unknown>/80% 1 2 2 10s -
Espera varios minutos y, a continuación, repite el comando del paso 1.
Si aún recibes el error «<unknown>», usa el siguiente comando:kubectl describe hpa -n namespace 2048-deploymentNota: Sustituye namespace por tu espacio de nombres.
A continuación, consulta la sección Eventos del resultado para obtener más información.
Resultado de ejemplo: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 cpuNota: Si la columna Mensaje muestra que falta una solicitud para [x], es probable que tus despliegues o ReplicaSet no declaren las solicitudes de recursos en su especificación. Confirma que todos los contenedores del pod tengan las solicitudes declaradas. Si omites una solicitud, la métrica de HPA devuelve la respuesta <unknown>.
Para obtener más información, consulta Resource management for pods and containers (Administración de recursos para pods y contenedores), Deployments (Despliegues) y ReplicaSet en el sitio web de Kubernetes.
- Temas
- Containers
- Etiquetas
- Amazon Elastic Kubernetes Service
- Idioma
- Español

Contenido relevante
preguntada hace 8 meses
preguntada hace 9 meses
preguntada hace 3 meses
OFICIAL DE AWSActualizada hace 2 años