kubelet — алерт когда node перешла в NotReady
Node ушла в NotReady (kubelet не пингует apiserver, runtime болен) — поды на ней живут как зомби пока taint не выгонит. Kubernetes-events не уйдут в Slack по умолчанию.
Рецепт
#!/usr/bin/env bash
# /etc/cron.d/kubelet-notready
# */2 * * * * root /opt/kubelet-notready.sh
CONTEXT=${KUBE_CONTEXT:-prod}
# Count nodes whose Ready condition isn't True
NOTREADY=$(kubectl --context "$CONTEXT" get nodes -o json \
| jq '[.items[] | select(.status.conditions[] | select(.type=="Ready") | .status != "True")] | length')
if [ "${NOTREADY:-0}" -gt 0 ]; then
NAMES=$(kubectl --context "$CONTEXT" get nodes \
--no-headers | awk '$2!="Ready" {printf "%s,", $1}' | sed 's/,$//')
curl -fsS "$HEARTBEAT_URL" --data "notready=$NOTREADY,nodes=$NAMES"
exit 2
fi
echo "OK (all nodes Ready)"
То же самое в Enterno.io
Заверните в Enterno heartbeat — алерт сразу в Telegram + история «node1 уходила в NotReady 3 раза за неделю», что подскажет про hardware-проблему (а не транзиент).
Похожие рецепты
Readiness-probe внутри пода есть, но никто не видит, что LB отказался роутить трафик на новый deploy.
CrashLoopBackOff в одном пространстве имён — kubectl показывает restart-count = 47, но никто не видит. Хочется endpoint, который вернёт high когда счётчик прыгает.
etcd в кластере K8s переизбирает лидера каждые 30 сек — kube-apiserver лагает, controller-manager не успевает применять reconcile. Это видно только в etcd-метриках.