Kubernetes Metrics: entendiendo el rendimiento real de nuestra clúster
En cualquier clúster de Kubernetes, la capacidad para observar qué ocurre realmente dentro de los nodos y los pods es esencial para tomar decisiones informadas. Kubernetes, por sí mismo, proporciona información estructural sobre los objetos del clúster, como qué está desplegado, en qué estado se encuentra, cuántas réplicas existen, etc., pero no ofrece de forma nativa datos sobre el uso de recursos como CPU, memoria o consumo del sistema por parte de los contenedores.
Ahí es donde entra en juego Kubernetes Metrics, un conjunto de componentes que permiten recopilar, exponer y consultar métricas fundamentales para entender el comportamiento del clúster.
Gracias a estos datos es posible desde ajustar límites y peticiones de recursos hasta detectar picos de carga, planificar capacidad, configurar autoescalado con Horizontal Pod Autoscaler o simplemente diagnosticar un rendimiento deficiente en algún servicio. En entornos de producción o incluso en escenarios de desarrollo donde queremos afinar despliegues, disponer de métricas fiables se vuelve imprescindible.

Logo de Kubernetes
Instalar Kubernetes Metrics en nuestro clúster
Vamos a ver como desplegar este conjunto de herramientas en nuestro clúster.
Descargar el fichero de configuración y despliegue
Vamos a utilizar el fichero de despliegue ofrecido directamente por el propio proyecto, así:
wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml
De esta manera ya tendremos el fichero YAML a nuestra disposición.
Además, esto nos permitirá poder modificarlo de forma fácil.
Modificar como se conecta con los nodos
Por defecto se conecta con los nodos por IP, pero eso a mi no me interesa, le vamos a decir que lo haga por nombre DNS, esta línea tiene que quedar así:
- --kubelet-preferred-address-types=Hostname,InternalIP,ExternalIP
Deshabilitar la consulta TLS
Para deshabilitar la consulta TLS, debemos añadir esta línea:
- --kubelet-insecure-tls
Desplegamos
Una vez hemos realizado los cambios en el fichero, deberia quedar así:
(...) spec: containers: - args: - --cert-dir=/tmp - --secure-port=10250 - --kubelet-preferred-address-types=Hostname,InternalIP,ExternalIP - --kubelet-use-node-status-port - --metric-resolution=15s - --kubelet-insecure-tls image: registry.k8s.io/metrics-server/metrics-server:v0.8.0 imagePullPolicy: IfNotPresent (...)
Ahora ya podemos hacer el despliegue.
kubectl apply -f components.ymlSi todo ha ido bien, deberíamos ver algo similar a lo siguiente:
davidochobits@testkubernetes:~/deploy/devops/metrics-server$ kubectl apply -f components.yaml serviceaccount/metrics-server created clusterrole.rbac.authorization.k8s.io/system:aggregated-metrics-reader created clusterrole.rbac.authorization.k8s.io/system:metrics-server created rolebinding.rbac.authorization.k8s.io/metrics-server-auth-reader created clusterrolebinding.rbac.authorization.k8s.io/metrics-server:system:auth-delegator created clusterrolebinding.rbac.authorization.k8s.io/system:metrics-server created service/metrics-server created deployment.apps/metrics-server created apiservice.apiregistration.k8s.io/v1beta1.metrics.k8s.io created
Ejemplos de uso de Kubernetes Metrics
Ver el consumo de CPU y memoria de los pods
Esto nos permite identificar si un contenedor está usando más recursos de los esperados o si está infradimensionado.
kubectl top pod -n nombre-namespaceMonitorizar el uso de recursos de los nodos
Ayuda a detectar saturación, desequilibrios de carga o posibles problemas de capacidad.
kubectl top node
Ajustar requests y limits de los deployments
Con el histórico de las métricas puedes redefinir:
- requests demasiado altos: desaprovechan nodos
- requests demasiado bajos: riesgo de throttling o OOMKills
Habilitar autoscaling con el Horizontal Pod Autoscaler (HPA)
El HPA usa métricas de CPU, memoria u otras para escalar automáticamente un Deployment.
kubectl autoscale deployment mi-app --cpu-percent=80 --min=2 --max=10
A modo de resumen
Hemos visto como las métricas de Kubernetes permiten detectar rápidamente picos de carga o comportamientos anómalos, ayudan a planificar capacidad a medio y largo plazo, facilitan la identificación de problemas como memory leaks o un consumo inusual de recursos, y permiten evaluar de forma objetiva el impacto de nuevas versiones comparando su eficiencia con despliegues anteriores.


Comentarios Recientes