Kubernetes — алерт когда CronJob suspended-нут
Кто-то поставил `spec.suspend: true` на CronJob (debug, или спешка релиза) и забыл вернуть. Daily-таска не запускается, отчёты не генерируются — узнаешь только когда finance спросит.
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/cj-suspended
# 0 9 * * * root /opt/cj-suspended.sh
CONTEXT=${KUBE_CONTEXT:-prod}
SUSP=$(kubectl --context "$CONTEXT" get cronjobs -A -o json \
| jq -r '[.items[] | select(.spec.suspend == true) | "\(.metadata.namespace)/\(.metadata.name)"]')
COUNT=$(echo "$SUSP" | jq 'length')
if [ "${COUNT:-0}" -gt 0 ]; then
NAMES=$(echo "$SUSP" | jq -r '.[]' | head -10 | tr '\n' ',')
curl -fsS "$HEARTBEAT_URL" --data-urlencode "cj_suspended=$COUNT,names=$NAMES"
exit 2
fi
echo "OK (no suspended CronJobs)"
То же самое в Enterno.io
Подключите Enterno heartbeat — daily-проверка показывает «список того что не работает» и не даст забыть включить обратно.
Похожие рецепты
Readiness-probe внутри пода есть, но никто не видит, что LB отказался роутить трафик на новый deploy.
CrashLoopBackOff в одном пространстве имён — kubectl показывает restart-count = 47, но никто не видит. Хочется endpoint, который вернёт high когда счётчик прыгает.
etcd в кластере K8s переизбирает лидера каждые 30 сек — kube-apiserver лагает, controller-manager не успевает применять reconcile. Это видно только в etcd-метриках.