Зачем Nerve для Kubernetes
Типичный мониторинг-стек для K8s — это Prometheus + Alertmanager + Grafana + PagerDuty. Nerve решает более узкую задачу: отправить зашифрованный push на телефон, когда под упал, из одной строки в shell или CronJob.
DSN, который вы храните в кластере, умеет только отправлять сигналы в один pipe. Если он утечёт — старые алерты не будут раскрыты.
Отслеживание failed-подов через kubectl
kubectl get events --field-selector reason=Failed --watch-only \
-o custom-columns=MSG:.message --no-headers \
| while read -r line; do echo "$line" | nerve send; done
CronJob: проверка подов каждые 5 минут
apiVersion: batch/v1
kind: CronJob
metadata:
name: nerve-pod-check
spec:
schedule: "*/5 * * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: check
image: bitnami/kubectl:latest
env:
- name: NERVE_DSN
valueFrom:
secretKeyRef:
name: nerve-credentials
key: dsn
command:
- /bin/sh
- -c
- |
CRASHED=$(kubectl get pods --all-namespaces \
--field-selector=status.phase=Failed -o name)
if [ -n "$CRASHED" ]; then
echo "crashed pods: $CRASHED" | nerve send --severity critical
fi
restartPolicy: Never
DSN как Kubernetes Secret
kubectl create secret generic nerve-credentials \
--from-literal=dsn="nerve://TOKEN:[email protected]"
OOMKill-алерты
OOMKilled-контейнеры часто рестартятся тихо. Поймайте их до каскадного падения.
kubectl get events --field-selector reason=OOMKilling --watch-only \
-o custom-columns=MSG:.message --no-headers \
| while read -r line; do echo "OOMKill: $line" | nerve send --severity critical; done
FAQ
Nerve заменяет PagerDuty для Kubernetes?
Нет. Nerve — это не платформа управления инцидентами, а лёгкий зашифрованный push-канал для уведомлений о падении подов, OOMKill и failed deployment.
Как отправить K8s-алерт в Nerve?
Используйте kubectl или CronJob для отслеживания failed-подов и передайте вывод в nerve send. DSN хранится как Kubernetes Secret.
Алерты зашифрованы?
Да. Payload шифруется до отправки на relay. Sender DSN не может читать историю и выполнять команды.