Passa al contenuto principale

Troubleshooting

Cose che mordono su scala, con la ricetta per sbloccarle. I moduli preconfezionati sono già cablati per evitarle — questa pagina è per il freestyle del modulo 6 e qualunque YAML tu incolli da altrove.

ImagePullBackOff con toomanyrequests

Perché succede

Tutte le coppie del workshop condividono lo stesso IP di egress sul management cluster. DockerHub anonimo permette circa 100 image pull ogni 6 ore per IP. Con 10+ coppie che partono con i moduli nella stessa finestra, è facile inciampare in quel limite — e una volta inciampato, ogni coppia vede il fallimento, non solo quella che ha pullato per ultima.

I moduli preconfezionati non pullano più direttamente da docker.io (usano un mirror pubblico — vedi sotto). Ma qualunque cosa incolli nel freestyle del modulo 6, o copi da un tutorial, probabilmente sì.

Come confermare che è il rate limit

kubectl describe pod <pod-name> -n <namespace>

Cerca un evento vicino al fondo dell'output:

Failed to pull image "nginx:alpine": ... 429 Too Many Requests -
Server message: toomanyrequests: You have reached your pull rate limit.

Se vedi questo, la diagnosi è confermata. Qualunque altra cosa (ErrImagePull senza 429, errori di rete, manifest unknown) è un problema diverso.

Come fixare

Sostituisci il riferimento all'immagine con uno di due mirror pubblici. Nessuno richiede autenticazione:

OriginalePrefisso del mirror da usare
nginx:alpine, busybox:1.36, redis, postgres, python, qualunque immagine ufficiale docker.io/library/*public.ecr.aws/docker/library/<image>
hashicorp/http-echo, bitnami/redis, qualunque immagine docker.io/* non-library/mirror.gcr.io/<image>

Esempi:

# before
image: nginx:alpine
image: hashicorp/http-echo:1.0.0

# after
image: public.ecr.aws/docker/library/nginx:alpine
image: mirror.gcr.io/hashicorp/http-echo:1.0.0

Applica lo YAML aggiornato. Il pod pullerà pulito dal mirror. I pod esistenti in ImagePullBackOff si riprendono automaticamente una volta che il Deployment sottostante è patchato — non serve cancellare il pod a mano.

Perché due mirror diversi

public.ecr.aws/docker/library/ è il mirror permanente di AWS delle immagini ufficiali della library DockerHub (nginx, busybox, redis, ecc.). È ben finanziato e senza rate limit, ma copre solo library/.

mirror.gcr.io è la pull-through cache di Google di tutto docker.io, incluse le immagini non-library. Funziona per tutto, ma Google ha storicamente segnalato che vorrebbe ridurla — va bene per un workshop di un giorno, meno ideale come dipendenza di lungo termine.

Per questo workshop, preferisci ECR per qualunque immagine ufficiale, e mirror.gcr.io solo quando ti serve un'immagine non-library.