🚨 Alertas
Una alerta avisa al equipo cuando algo se sale de lo normal (un pod reiniciándose sin parar, un node caído), antes de que el usuario lo note.
Kubernetes por sí solo no envía alertas. Para eso se usa Prometheus (que evalúa las reglas) junto con Alertmanager (que envía el mensaje por correo, Slack u otro canal).
Las alertas se configuran con kubectl y archivos YAML. El Panel Nuvion no tiene una pantalla para este recurso.
🚀 Antes de comenzar
- Tener el acceso al clúster configurado.
🚀 1. Verificar si Prometheus está instalado
kubectl get pods -A | grep -i -E "prometheus|alertmanager"
kubectl get crd | grep monitoring.coreos.com
- Si aparecen pods de Prometheus y Alertmanager y el CRD
prometheusrules.monitoring.coreos.com, siga al paso 2. - Si no aparece nada, el monitoreo aún no está instalado. Use la verificación rápida (última sección) o hable con soporte.
🚀 2. Crear las reglas de alerta
Cree el archivo alertas-basicos.yaml. Cambie NAMESPACE-DO-PROMETHEUS y
NOME-DO-RELEASE por los valores de su entorno:
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: alertas-basicos
namespace: NAMESPACE-DO-PROMETHEUS
labels:
release: NOME-DO-RELEASE
spec:
groups:
- name: kubernetes-basico
rules:
- alert: PodReiniciandoMuito
expr: increase(kube_pod_container_status_restarts_total[15m]) > 3
for: 5m
labels:
severity: warning
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} se reinició más de 3 veces en 15 minutos"
- alert: PodEmCrashLoop
expr: kube_pod_container_status_waiting_reason{reason="CrashLoopBackOff"} == 1
for: 5m
labels:
severity: critical
annotations:
summary: "Pod {{ $labels.namespace }}/{{ $labels.pod }} en CrashLoopBackOff"
- alert: NodeNaoPronto
expr: kube_node_status_condition{condition="Ready",status="true"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "Node {{ $labels.node }} fuera del estado Ready"
kubectl apply -f alertas-basicos.yaml
kubectl get prometheusrule -A
La regla for: 5m evita falsas alarmas: el problema debe durar 5 minutos
antes de dispararse.
🚀 3. Definir a dónde van las alertas
En Alertmanager, configure un destino (receiver). Ejemplo con correo:
route:
receiver: equipe
receivers:
- name: equipe
email_configs:
- to: "[email protected]"
from: "[email protected]"
smarthost: "smtp.ejemplo.com:587"
auth_username: "[email protected]"
auth_password: "USE-UN-SECRET-PARA-LA-CONTRASEÑA"
No escriba la contraseña directamente en el archivo. Guárdela en un Secret y haga referencia a él.
🚀 4. Probar la alerta
Provoque un error que dispare la regla PodEmCrashLoop:
kubectl run pod-crash --image=busybox -- sh -c 'exit 1'
Para ver las alertas en Prometheus, abra un túnel hasta él:
kubectl port-forward -n NAMESPACE-DO-PROMETHEUS svc/NOME-DO-SERVICE-PROMETHEUS 9090:9090
Abra http://localhost:9090/alerts en el navegador. Después de cerca de 5 minutos, la
alerta aparece como Firing y el mensaje llega al destino configurado.
⚡ Verificación rápida (sin Prometheus)
Mientras el monitoreo no esté instalado, use estos comandos para revisar la salud del clúster:
kubectl get nodes
kubectl get pods -A --field-selector=status.phase!=Running,status.phase!=Succeeded
kubectl get events -A --field-selector type=Warning
Esto no sustituye una alerta automática, pues solo muestra la situación en el momento en que lo ejecuta.
✅ Cómo saber si funcionó
La alerta de prueba aparece como Firing en /alerts y la notificación llega al destino.
❗ Problemas comunes
| Síntoma | Causa | Solución |
|---|---|---|
no matches for kind "PrometheusRule" | Prometheus Operator no está instalado | Vea el paso 1 |
| La regla no aparece en Prometheus | La etiqueta release no coincide | Use el mismo release de su Prometheus |
| La alerta se dispara pero no llega nada | Receiver mal configurado | Revise el paso 3 y los logs de Alertmanager |
| La consulta no devuelve datos | Falta kube-state-metrics | Verifique si hay un pod kube-state-metrics en kubectl get pods -A |
🧹 Limpieza
kubectl delete pod pod-crash
kubectl delete prometheusrule alertas-basicos -n NAMESPACE-DO-PROMETHEUS
🧠 ¿Dudas?
¡Hable con nuestro equipo de soporte técnico de SaveinCloud!