Pirobits
  

Kubernetes metrics-server: tutorial de instalación. HPA y kubectl top.

alberto avatar Alberto Sola · 10/22/2023 · 4 min

Esta semana me apetecía profundizar en kubernetes-metrics-server, creando un pequeño cluster local de kubernetes e instalando metrics-server, para configurar un HPA y visualizar las métricas de utilización de recursos de los pods en el cluster.

Conceptos. Qué es kubernetes-metrics-server

Primero, ¿qué es Kubernetes? Es una plataforma de orquestación de contenedores que nos permite gestionar y escalar aplicaciones de manera eficiente, de forma que garantice la en clústeres formados por nodos.

La monitorización es esencial en cualquier aplicación en producción, y más aún en un cluster de kubernetes en el que intervienen muchas piezas. Aquí es donde entra en juego metrics-server.

Kubernetes metrics server es una herramienta que nos permite recopilar métricas de recursos tanto de nodos como de pods, para tomar decisiones informadas sobre la escalabilidad, por ejemplo configurando HPA (Horizontal Pod Autoescaler), el comando kubectl top o bien sistemas de agregación de métricas, como prometheus.

  1. HPA o Horizontal Pod Autoescaler: permite escalar automáticamente el número de réplicas de los pods (instancias de contenedores) en función de la carga de trabajo. Cuando la demanda aumenta, el HPA crea más réplicas para manejarla, y cuando disminuye, reduce el número de réplicas para optimizar los recursos.
  2. Comando kubectl top: proporciona métricas en tiempo real sobre los recursos utilizados por los pods y nodos del clúster. Puedes utilizarlo para monitorear el consumo de CPU y memoria de tus aplicaciones y sistemas, lo que es útil para la resolución de problemas y la optimización del rendimiento.
  3. Sistemas de agregación de métricas: son herramientas que recopilan, almacenan y presentan datos de rendimiento y métricas de diferentes fuentes, como servidores, aplicaciones, redes, y más. Estos sistemas permiten a los administradores y desarrolladores visualizar y analizar datos en tiempo real o históricos para tomar decisiones informadas sobre la infraestructura y las aplicaciones, así como detectar problemas y optimizar el rendimiento. Ejemplos de sistemas de agregación de métricas incluyen Prometheus, Grafana, y Elasticsearch con Kibana.

Instalación de metrics-server en Kubernetes

El proceso de instalación de metrics-server es sencillo, simplemente necesitas abrir una terminal donde tengas kubectl configurado con el clúster que desees. Ahora simplemente ejecuta el siguiente comando:

kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml

Tras la ejecución, en mi caso el pod de metrics-server no parece arrancar:

$ k -n kube-system get pods

metrics-server-57b5957ff-bzz89           0/1     Running   0              4m5s

Vamos a mirar los eventos:

$ k -n kube-system describe pod metrics-server-57b5957ff-bzz89
[...]

Warning  Unhealthy  99s (x22 over 4m49s)  kubelet
Readiness probe failed: HTTP probe failed with statuscode: 500

Veo que parece ser problema del readinessProbe, vamos a ver los logs del pod:

$ k -n kube-system logs metrics-server-57b5957ff-bzz89

"Failed to scrape node" err="Get \\"<https://192.168.65.4:10250/metrics/resource\\>": x509: cannot validate certificate for 192.168.65.4 because it doesn't contain any IP SANs" node="docker-desktop"

Parece ser problema del HTTPS al ser un entorno local con docker-desktop, por lo que procedo a editar el deployment y permitir que funcione a través de http añadiendo. Mirando la documentación, podemos añadir --kubelet-insecure-tls al deployment que hemos instalado utilizando el comando kubectl edit deploy metrics-server -n kube-system.

En un cluster de producción debería ser capaz de verificar correctamente el certificado HTTPS.

¡Vamos! Ya funciona después de algunos intentos.

metrics-server-84df6d4789-fvrgs          1/1     Running   0              56s

Si hacemos una petición a la API de kubernetes funciona:

$ kubectl get --raw "/apis/metrics.k8s.io/v1beta1/namespaces/kube-system/pods/metrics-server-84df6d4789-fvrgs"                                 12:59:32

{"kind":"PodMetrics","apiVersion":"metrics.k8s.io/v1beta1","metadata":{"name":"metrics-server-84df6d4789-fvrgs","namespace":"kube-system","creationTimestamp":"2023-06-28T10:59:35Z","labels":{"k8s-app":"metrics-server","pod-template-hash":"84df6d4789"}},"timestamp":"2023-06-28T10:59:27Z","window":"15.705s","containers":[{"name":"metrics-server","usage":{"cpu":"7285959n","memory":"16132Ki"}}]}

Por lo que ya funcionaría el comando kubectl top:

$ k -n kube-system top pod metrics-server-84df6d4789-fvrgs
                                                                                   13:01:39
NAME                              CPU(cores)   MEMORY(bytes)
metrics-server-84df6d4789-fvrgs   9m           15Mi

¡Vamos! Ya tenemos funcionando nuestro servidor de métricas en nuestro entorno local, listo para hacer pruebas. Con esto podemos comenzar a utilizar HPA u otros sistemas de agregación de métricas.

Si te parece interesante suscríbete a la newsletter, suscríbete al canal de youtube y ponte en contacto conmigo mediante cualquier red social para comentar tus necesidades, ideas o sugerencias.

Nos vemos el siguiente post 😉

Si te ha resultado útil este artículo agradecería si te suscribes a mi newsletter. Recibirás contenido exclusivo de calidad y también me ayudarás enormemente. Cada suscripción apoya el trabajo que realizo y me permite conocer mejor los temas que te interesan, de forma que puedo mejorar los conocimientos que comparto contigo.


Posts recientes