Skip to content

Amazon ECR — алерт по росту pull-failures

ECR pull начал стабильно фейлить (IRSA expired, network ACL, repo policy mismatch) — поды в kube не могут запуститься, ImagePullBackOff. Но событие kubelet никого не пингует.

Рецепт

bash
#!/usr/bin/env bash
# /etc/cron.d/ecr-pull
# */5 * * * * root /opt/ecr-pull.sh

CONTEXT=${KUBE_CONTEXT:-prod}

# Count ImagePullBackOff pods cluster-wide
COUNT=$(kubectl --context "$CONTEXT" get pods -A -o json \
  | jq '[.items[] |
         select(.status.containerStatuses // []
                | map(.state.waiting.reason // "")
                | any(. == "ImagePullBackOff" or . == "ErrImagePull"))]
        | length')

if [ "${COUNT:-0}" -gt 0 ]; then
  EXAMPLES=$(kubectl --context "$CONTEXT" get pods -A \
    --field-selector status.phase=Pending --no-headers \
    | awk '/ImagePullBackOff|ErrImagePull/ {printf "%s/%s,", $1, $2}' | head -c 250)
  curl -fsS "$HEARTBEAT_URL" --data-urlencode "imgpull_fail=$COUNT,examples=$EXAMPLES"
  exit 2
fi
echo "OK (no ImagePullBackOff)"

То же самое в Enterno.io

Заверните в Enterno heartbeat — «pull-fail для image-X» обычно значит protected-policy / expired credential, узнаете и фиксанёте до того как 30 % deploy-ев лягут.

Настроить API monitor → ← Все рецепты

Похожие рецепты

CloudFront CDN-distribution начал возвращать 5xx 4% времени — клиенты в дальних регионах видят битые страницы. CloudWatch graph есть, dashboard никто не открывает.

DynamoDB начал throttle-ить запросы (горячий ключ или write-capacity мал) — приложение получает ProvisionedThroughputExceededException, но AWS-алерты только на 5-минутном агрегате.