Kubernetes is veel gebruikt als een container orkestratie tool voor het inzetten en beheren van microservice applicaties. Maar zelfs de meest sterke systemen krijgen soms fouten. De meest voorkomende en vervelende fout die Kubernetes gebruikers krijgen is ImagePullBackOff en ErrImagePull fouten. Deze fouten laten duidelijk zien dat je cluster moeite heeft met het halen van de container images uit de bron registry.
In deze blog gaan we diep kijken naar deze image fouten, we zien hun aard, begrijpen hun oorzaak, en hoe je ze kan vinden en oplossen, met een debugging simulatie om te helpen bij hun oplossing.
Wat je zult leren
- Een Diepe Duik in ImagePullBackOff en ErrImagePull.
- Hoe ImagePullBackOff en ErrImagePull te detecteren.
- De oorzaken ervan begrijpen.
- Debuggen.
1. Diepe kijk in ImagePullBackOff en ErrImagePull.
ImagePullBackOff en ErrImagePull laten zien dat de cluster niet kan trekken container images uit de registry. Ze lijken dicht bij elkaar, maar ze laten verschillende uitkomsten van de fout zien:
ErrImagePull: Deze fout komt direct wanneer Kubernetes niet kan trekken de container image tijdens de eerste poging of een volgende poging in korte tijd. Er kunnen veel oorzaken zijn die deze fout maken, zoals een typefout in de image naam of tag, een netwerk storing, of een probleem met registry login.
ImagePullBackOff: Deze status komt na de ErrImagePull fout. Wanneer Kubernetes steeds probeert en niet kan trekken de image uit de registry, gaat het in de BackOff status. Dit betekent dat in plaats van steeds proberen te trekken de image, het maakt een wachttijd die steeds langer wordt na elke poging. Dit geeft jou tijd om de fout op te lossen.
2. Hoe ImagePullBackOff en ErrImagePull te detecteren
Het vinden van de ImagePullBackOff en ErrImagePull is heel eenvoudig met basis Kubernetes commando’s; je kan vinden:
1. Kubectl get pod: Met dit commando kan je duidelijk zien de status van de pod, die laat jou de fout zien.
2. Kubectl describe pod: Met het describe commando kan je makkelijk krijgen de details over de fout onder het events deel, zoals hieronder getoond.
3. Begrijpen van de oorzaken
De oorzaken voor ImagePullBackOff en ErrImagePull zijn verdeeld in 3 hoofddelen:
1. Verkeerde Image Namen/Tags
Dit is een van de meest gewone en simpele problemen om op te lossen. Er kan een verkeerde image naam of image tag zijn die stopt de cluster om de image te trekken uit de registry. En in sommige gevallen kan het imago niet bestaan of verwijderd zijn.
2. Registry Authenticatie Problemen
In de meeste gevallen zijn container images die horen bij jouw applicatie of een interne service opgeslagen in de private registry. Dus om de image te trekken heb je de juiste login gegevens nodig voor authenticatie. Dit kan gedaan worden met de ImagePullSecrets parameter.
In veel situaties kunnen er missende secrets zijn die moeten worden gegeven aan de imagePullSecrets parameter. Of je kan verkeerde login gegevens hebben in ImagePullSecrets, die niet de juiste rechten hebben om het image te trekken uit de registry. Of misschien verwijst ImagePullSecrets naar de verkeerde secrets, die niet bestaan in jouw cluster.
3. Netwerk Verbinding Problemen
Zelfs als je de juiste image naam en logingegevens hebt om de image te trekken. Soms maken problemen met netwerk verbinding ook ImagePullBackOff en ErrImagePull. Deze problemen zijn als volgt:
Firewall: Als je een firewall hebt, dan moet je kijken of het blokkeert de uitgaande verbindingen naar het image registry IP adres of poort.
DNS resolutie: Als de host naam resolutie (bijv. docker.io, gcr.io) niet lukt voor de image registry, dan kan de verbinding niet gemaakt worden met de image registry.
Register uitvaltijd/Onbereikbaarheid: Als je een zelf-gehoste registry (bijv. Nexus repository) hebt op EC2 instances, dan kan je downtime zien, of soms is het registry domain zelf niet bereikbaar, wat heel zeldzaam is.
4. Debuggen
In deze sectie gaan we zien hoe te vinden en oplossen de ImagePullBackOff en ErrImagePull.
Voor dit doel gebruiken we een simpel Docker image. Je moet deze image pushen naar een private repository.
Dockerfile
FROM alpine:latest
LABEL maintainer="team@mycompany.com"
CMD ["sleep", "3600"]
YAML
Zodra je de image pusht naar de repository, kan je het YAML bestand hieronder draaien. Zorg dat je jouw eigen image naam geeft.
apiVersion: v1
kind: Pod
metadata:
name: webserver
spec:
containers:
- name: alpine
image: aqulyte/errimagepull:v1
Na het toepassen van het YAML, kijk de status van de pod. Als het een fout laat zien, dan is het tijd om te troubleshooten.
Draai het describe commando om de details van de fout te krijgen.
Zoals getoond in de fout hierboven, kan het niet trekken van het image uit de registry. Omdat we proberen te trekken een image uit een private repository, moeten we login gegevens geven via de ImagePullSecrets parameter.
Draai het commando hieronder om de secrets te maken.
kubectl create secret docker-registry myregistry-secret \
--docker-server=docker.io \
--docker-username=YOUR_DOCKER_USERNAME \
--docker-password=YOUR_DOCKER_PASSWORD \
--docker-email=YOUR_DOCKER_EMAIL
Zodra de secrets zijn gemaakt, bewerk het YAML bestand zoals hieronder:
apiVersion: v1
kind: Pod
metadata:
name: webserver
spec:
containers:
- name: alpine
image: aqulyte/errimagepull:v1
imagePullSecrets:
- name: myregistry-secret
Na het toepassen van het YAML, als je de ImagePullBackOff fout niet krijgt, dan is het goed.
MAAR…
Als de fout blijft.
Dan moet je meer troubleshooten. Voor mij was het een verkeerde project naam en image tag.
Na correctie, hieronder is het juiste YAML, en zet opnieuw in het YAML.
apiVersion: v1
kind: Pod
metadata:
name: webserver
spec:
containers:
- name: alpine
image: aqualyte/errimagepull:latest
imagePullSecrets:
- name: myregistry-secret
Nu is de fout opgelost.
Jouw Pod zal draaien zonder problemen.
Conclusie
ImagePullBackOff en ErrImagePull zijn gewone fouten en zijn makkelijk op te lossen door hun oorzaken te begrijpen, die kunnen gaan van typefouten en login problemen tot netwerk of registry problemen. Door deze fouten helemaal te vermijden, helpen goede praktijken zoals het gebruiken van juiste duidelijke tags, het instellen van ImagePullSecrets, en het volgen van netwerk en registry verbinding om meer betrouwbare en vloeiende deployments te krijgen.
Over mij
Ik ben Shubh Dadhich, een Kubernetes expert met interesse in DevOps, Cloud en Automatisering. Ik werk graag aan het maken van moeilijke problemen tot makkelijke, schaalbare oplossingen, en ik deel informatie via blogs en mentorschap.Ik ben open voor consultatie, training en mentorschap in Kubernetes, DevOps en Cloud. Of je net begint of je vaardigheden wilt verbeteren.
🔗 Verbinden met mij op LinkedIn: Shubh Dadhich
Top comments (0)