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
- Monitorizar un servidor MySQL con Zabbix 6
- Como actualizar Zabbix desde la versión 5 a la versión 6
- Instalar y configurar el agente de Zabbix 6 en Windows
- Instalación agente Zabbix 6 en equipos Linux
- Como instalar y configurar Zabbix 6
- Como monitorizar sitios webs con Zabbix 6
- Como monitorizar un fichero de Log de Linux con Zabbix 6
- Como monitorizar un servidor VMware ESXi con Zabbix 6
- Como monitorizar un servicio de Windows con Zabbix 6
Me dedico a la Administración de Sistemas y he creado este blog para compartir mis conocimientos con toda la comunidad y así aportar mi granito de arena y ayudar a todo el que lo necesite.
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
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.