Monitorizar un Clúster de Kubernetes con Zabbix 6

En esta entrada voy a enseñaros a monitorizar un clúster de Kubernetes con Zabbix 6.

Requisitos

Para poder seguir este tutorial es necesario cumplir con los requisitos mínimos:

  • Kubernetes cluster 1.18 o superior
  • Helm 3.0 o superior
  • Zabbix Server 6.0 o superior
  • kube-state-metrics 2.13.2 o superior
  • Ubuntu Server

Despliegue de Zabbix en Kubernetes

El primer paso será conectarnos a nuestro master de Kubernetes y añadir el siguiente repositorio.

helm repo add zabbix-chart-6.0  https://cdn.zabbix.com/zabbix/integrations/kubernetes-helm/6.0

Exportamos los valores por defecto de chart en el siguiente fichero yaml.

helm show values zabbix-chart-6.0/zabbix-helm-chrt > $HOME/zabbix_values.yaml

Creamos un namespace al cual llamaremos zabbix.

kubectl create namespace zabbix

Desplegamos zabbix en nuestro cluster de Kubernetes.

helm install zabbix zabbix-chart-6.0/zabbix-helm-chrt --dependency-update -f $HOME/zabbix_values.yaml -n zabbix

Comprobamos que se han creado todos los pods y que no hay errores.

kubectl get pods -n zabbix

Todo correcto 🙂

NAME                                         READY   STATUS    RESTARTS        AGE
zabbix-agent-6rk9s                           1/1     Running   6 (5h32m ago)   5h35m
zabbix-agent-bnw9x                           1/1     Running   6 (5h32m ago)   5h35m
zabbix-agent-z54mz                           1/1     Running   0               5h35m
zabbix-kube-state-metrics-5bd6454bf6-zdsvq   1/1     Running   0               5h35m
zabbix-proxy-6d87d5fccc-66n9c                1/1     Running   0               5h35m

Configuración en Zabbix

En primer lugar nos vamos a ir, en el menú de la izquierda, a Configuration-Hosts y vamos a añadir un nuevo host.

En la pestaña host vamos a poner el nombre de nuestro host, le vamos a asignar la plantilla «Kubernetes nodes by HTTP» y por último lo añadiremos al grupo de host que deseemos.

En la pestaña Macros tendremos que añadir lo siguiente:

El primer parámetro será {$KUBE.API.ENDPOINT.URL} en donde especificaremos la url de acceso a nuestro API Server de Kubernetes. Para obtener este valor debéis iros a vuestro nodo master de kubernetes y ejecutar el siguiente comando:

kubectl config view

Obtendréis una información parecida a esta. El valor que nos interesa es la url que encontráis en el parámetro server debajo de la etiqueta cluster (en mi caso aparece server: https://192.168.8.150:6443). Tendréis que poner esa url pero añadiendo al final /api.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://192.168.8.150:6443
  name: kubernetes
contexts:
- context:
    cluster: kubernetes
    user: kubernetes-admin
  name: kubernetes-admin@kubernetes
current-context: kubernetes-admin@kubernetes
kind: Config
preferences: {}
users:
- name: kubernetes-admin
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED

El segundo parámetro a añadir será {$KUBE.API.TOKEN}. Para obtener este token debéis volver al nodo maestro de kubernetes y ejecutar el siguiente comando:

kubectl get secret zabbix-service-account -n zabbix -o jsonpath={.data.token} | base64 -d

El tercer parámetro es {$KUBE.STATE.ENDPOINT.NAME}. El valor por defecto es zabbix-kube-state-metrics pero os recomiendo lo comprobéis por si lo habéis cambiado, para verificarlo ejecutar en el nodo master el siguiente comando:

kubectl -n zabbix get ep

Al final debería quedaros algo como lo siguiente:

Pulsamos en añadir.

Ahora vamos a añadir un segundo host y en la pestaña host vamos a poner el nombre de nuestro host, le vamos a asignar la plantilla «Kubernetes cluster state by HTTP» y por último el grupo de host que queramos.

En la pestaña Macros tendremos que añadir lo siguiente:

El parámetro {$KUBE.API.URL} es la misma url que habéis utilizado en la configuración del host anterior pero sin añadir al final /api

Y los parámetros {$KUBE.API.TOKEN} y {$KUBE.STATE.ENDPOINT.NAME} son los mismos valores que obtuvimos y utilizamos en la creación del anterior host.

Debería quedaros algo así.

Y listo, ya sólo nos quedará esperar unos minutos para que Zabbix empiece a obtener toda la información relativa a nuestro cluster de Kubernetes y de esta forma tener todo nuestro entorno perfectamente monitorizado.

Como siempre espero que os haya sido de utilidad.

Entradas relacionadas

2 comentarios en «Monitorizar un Clúster de Kubernetes con Zabbix 6»

  1. Cuando creo el pod me sale el estatus:

    CrashLoopBackOff

    Revisando los logs me este error:

    zabbix_agent2 [76865]: ERROR: cannot start server listener: Listen failed: listen tcp 0.0.0.0:10050: bind: address already in use

    Responder
    • Hola Oscar,

      Eso es porque el puerto 10050 está en uso en el servidor (me imagino que tendrás instalado el agente de zabbix en el propio servidor) y por tanto el clúster de Kubernetes no puede utilizarlo. Para solucionarlo tiene 2 opciones o modificar el yaml de despliegue de Zabbix para especificar otro puerto o cambiar el puerto al agente Zabbix que tienes instalado en el servidor y posteriormente recuerda hacer el cambio también en la interfaz web de Zabbix para especificarle el nuevo puerto y no te falle la monitorización.

      Saludos.

      Responder

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.