Monitorizar cluster Kubernetes en Zabbix 7 LTS
Dispongo de un laboratorio en Proxmox bajo Debian de Kubernetes con tres nodos. Aprovechando que he actualizado Zabbix a la versión 7 LTS y una de las mejoras es que viene más preparado para monitorizar containers y kubernetes.
Monitorear un clúster de Kubernetes es crucial para asegurar su rendimiento y disponibilidad. Zabbix 7 LTS ofrece una integración robusta para monitorear Kubernetes mediante agentes y plantillas específicas. Aquí te mostramos cómo configurarlo paso a paso. Os dejo la plantilla:
PLANTILLA: https://www.zabbix.com/la/integrations/kubernetes
La he cargado desde Recopilación de datos -> Plantillas. En la anterior entrada os enseñaba como automatizar el descubrimiento, yo ya tengo detectados mis hosts del clúster:
Instalación Zabbix agente en clúster Kubernetes
Lo que haremos es instalar el agente de Zabbix en el clúster de Kubernetes, pero sólo en el host que actúa como master:
1 2 3 4 5 |
root@KUBERNETES00:~# kubectl get nodes NAME STATUS ROLES AGE VERSION kubernetes00 Ready control-plane,master 105d v1.28.6+k3s2 kubernetes02 Ready <none> 104d v1.28.6+k3s2 kubernetes01 Ready <none> 104d v1.28.6+k3s2 |
Luego realizáis la instalación del agente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
# Instalar agente sudo apt update sudo apt install zabbix-agent # Configurar agente sudo nano /etc/zabbix/zabbix_agentd.conf # Añadir las siguientes líneas Server=192.168.2.200 ServerActive=192.168.2.200 Hostname=kubernetes00 # Iniciar y habilitar el agente sudo systemctl start zabbix-agent sudo systemctl enable zabbix-agent |
Y le asignamos al equipo en Zabbix -> Recopilación de datos -> Equipos las plantillas cargadas (en especial “Kubernetes nodes by HTTP” o “Kubernetes cluster by HTTP”, en mi caso esta segunda) y los datos para el agente:
Agregamos una macro en la pestaña MACRO:
1 |
{$KUBE.API.URL} -> https://192.168.2.15:6443 |
Configurar Monitoreo de Kubernetes API en Zabbix 7 LTS
- Crear la Service Account:
- Generamos archivo zabbix-service-account.yaml y aplicar con kubectl apply -f zabbix-service-account.yaml.
1 2 3 4 5 |
apiVersion: v1 kind: ServiceAccount metadata: name: zabbix namespace: default |
- Asignar Roles y Permisos:
- Crear y aplicar el Role zabbix-role.yaml con kubectl apply -f zabbix-role.yaml.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: default name: zabbix-role rules: - apiGroups: [""] resources: ["pods", "nodes", "services", "endpoints", "configmaps", "events"] verbs: ["get", "list", "watch"] - apiGroups: ["apps"] resources: ["deployments", "replicasets", "statefulsets", "daemonsets"] verbs: ["get", "list", "watch"] - apiGroups: ["batch"] resources: ["jobs", "cronjobs"] verbs: ["get", "list", "watch"] - apiGroups: ["extensions"] resources: ["ingresses"] verbs: ["get", "list", "watch"] |
-
- Crear y aplicar el RoleBinding zabbix-role-binding.yaml con kubectl apply -f zabbix-role-binding.yaml.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: zabbix-role-binding namespace: default subjects: - kind: ServiceAccount name: zabbix namespace: default roleRef: kind: Role name: zabbix-role apiGroup: rbac.authorization.k8s.io |
- Configurar Zabbix:
- Obtener el token de la Service Account.
- Configurar Zabbix con la URL del API y el token.
1 |
kubectl get serviceaccount zabbix -o jsonpath='{.secrets[0].name}' --namespace default |
-
- Revisar endpoint con las métricas:
1 2 3 |
root@KUBERNETES00:~# kubectl -n default get ep NAME ENDPOINTS AGE kubernetes 192.168.2.15:6443 105d |
-
- Agrega a la MACRO anterior el valor del token en el equipo dado de alta y el nombre del Endpoint:
1 2 3 |
{$KUBE.API.TOKEN} {$KUBE.STATE.ENDPOINT.NAME} |
Con todo esto tendríamos una visión de nuestro clúster Kubernetes bajo Zabbix. Luego podríamos añadir acciones, pero en principio, empezaremos ver gráficas en poco tiempo y luego ajustar.
Te ha gustado la entrada SGUENOS EN TWITTER O INVITANOS A UN CAFE?