Clustery Kubernetes mohou při pokusu o stažení obrázků kontejneru narazit na několik problémů. Když dojde k chybě, vaše pody zadají ImagePullBackOff
Stát. Zde je návod, jak odladit tuto běžnou, ale záhadnou zprávu, abyste mohli své služby dostat online.
Jak funguje stahování obrázků
Kubernetes potřebuje načíst obrázek, když vytváříte nové nasazení nebo aktualizujete stávající s jiným odkazem na značku. Odpovědnost za stahování obrázků spočívá na procesu Kubelet na každém pracovním uzlu. Každý obrázek, na který odkazuje manifest podu, musí být přístupný všem uzlům v clusteru, aby kterýkoli z nich mohl splnit požadavek na plánování kontejneru.
Stahování může selhat, pokud je cesta k obrázku nesprávná, pokud jste nesprávně ověřeni nebo pokud selže síť. Když k tomu dojde, Kubernetes se „stáhne“ a naplánuje další pokus o stažení. Prodleva před dalším vytažením se exponenciálně prodlužuje pokaždé, když se pokus nezdaří, až do limitu pěti minut.
Pokud váš modul zobrazuje ImagePullBackOff
stavu, Kubernetes měl několik po sobě jdoucích selhání načítání obrazu a nyní čeká, než to zopakuje znovu. Kontejner nebude možné spustit, dokud nebude obrázek k dispozici.
Pokud víte, že problém je způsoben podmínkami sítě nebo jinou přechodnou chybou, můžete modul ponechat v tomto stavu. Kubernetes nakonec dokončí další pokus a úspěšně získá image. Pokud tomu tak není, zde je návod, jak začít s laděním, abyste mohli aktivovat svůj modul.
Podívejte se na základy
V první řadě stojí za to zkontrolovat úplné základy. Odkazuje váš manifest zdroje na platný obrázek, který skutečně existuje? Zkontrolujte cestu registru a značku obrázku, zda neobsahují jednoduché překlepy.
Vnitřní stav Kubernetes můžete zkontrolovat pomocí describe pod
velení v Kubectl. Získáte tak více informací než get pod
a řídicí panel Kubernetes poskytuje.
kubectl describe pod my-pod --namespace my-namespace
Změny v životním cyklu modulu jsou zobrazeny pod nadpisem „Události“. První událost bude Scheduled
; mělo by následovat Pulling
událost pro první pokus o vytažení. Poté se zobrazí Failed
nebo BackOff
událost, pokud tah nemohl být úspěšný. Tyto se budou opakovat později v seznamu, pokud je Kubernetes stále v cyklu stažení a opakování.
Čtení Message
spojené s těmito událostmi často poskytují hlavní příčinu problému. manifest for image:tag not found
zpráva znamená, že obrázek je platný, ale zadali jste neplatnou značku. Pokud vidíte does not exist or no pull access
, zkontrolujte správnost registrů a cest k obrazu. Když si budete jisti, že mají pravdu, bude problém souviset s nesprávným ověřením.
Správa přihlášení k registru
Než budete stahovat soukromé obrázky, musíte být přihlášeni. V Kubernetes je to dvoufázový mechanismus:vytvořte tajný klíč obsahující přihlašovací údaje a poté na něj odkazujte v definicích podu.
Pole Pod se nazývá imagePullSecrets
. Musí uvést tajný klíč Kubernetes, který poskytuje přihlašovací token pro registr. Tento tajný klíč by měl ukládat hodnotu JSON kompatibilní s Dockerem.
apiVersion: v1 kind: Secret type: kubernetes.io/dockerconfigjson metadata: name: image-pull-secret data: .dockerconfigjson: {{ "{"auths": {"registry.example.com": {"username": "demo-user", "password": "my-password"}}}" | b64enc }} apiVersion: v1 kind: Pod metadata: name: my-pod spec: containers: - name: my-container image: registry.example.com/my-image:latest imagePullSecrets: - name: image-pull-secret
Tento manifest ukazuje, jak vytvořit tajný klíč, který vás přihlásí do registry.example.com
jako demo-user
s heslem my-password
. Modul odkazuje na tajemství svým jménem. Procesy Kubelet v uzlech vašeho clusteru budou zahrnovat Docker config.json
úryvek, když stahují obrázky z registru.
Aby fragment kódu byl platnou tajnou hodnotou Kubernetes, musí být kódován Base64. Pomocí b64enc
YAML můžete použít předem zakódovanou hodnotu nebo prostý text. , jak je uvedeno v manifestu výše.
Typ přihlašovacích údajů, které použijete, bude záviset na vašem registru. V mnoha případech password
bude ve skutečnosti osobním přístupovým tokenem nebo klíčem API. Docker Hub vyžaduje přístupový token vygenerovaný v nastavení vašeho účtu, pokud máte ve svém účtu povoleno dvoufaktorové ověřování.
Omezení rychlosti registrace
Pokud jste zkontrolovali adresu URL registru, název značky obrázku a přihlašovací údaje, možná se vám zobrazuje ImagePullBackOff
kvůli limitům registračních sazeb. Docker Hub vás nyní omezuje na 100 vytažení kontejneru každých šest hodin. To se zvýší na 200 stažení za šest hodin, pokud zadáte své přihlašovací údaje. Tohoto limitu lze rychle dosáhnout v aktivním clusteru s mnoha často nasazovanými moduly.
Selhání stahování kvůli omezení rychlosti se projeví stejným způsobem jako problém s autentizací. Budete muset počkat, dokud neuplyne dostatek času, než limit vyprší. Kubernetes by pak měl úspěšně stáhnout obrázek, čímž se vaše pody zvednou.
Pro dlouhodobější zmírnění zvažte spuštění vlastního registru v clusteru nebo proxy pro ukládání obrázků do mezipaměti. To může výrazně snížit frekvenci, kterou navštěvujete servery Docker, a pomůže vám to zůstat v limitech rychlosti.
Přehled
Kubernetes Pods zadají ImagePullBackOff
stav, kdy se uzlu nepodaří stáhnout obrázek. Kubelet se bude periodicky opakovat, takže přechodné chyby nevyžadují žádný ruční zásah.
Když jste si jisti, že ImagePullBackOff
není jen dočasným výkyvem, začněte tím, že se ujistíte, že cesta obrázku podu je platná. Pokud to vyjde, máte podezření na nesprávné přihlašovací údaje nebo na vyčerpání limitu sazby. Pomocí kubectl describe
odhalí sled událostí, které vedly k selhání.
Jako poslední možnost můžete zkusit stáhnout bitovou kopii sami z jiného počítače, abyste se ujistili, že server vzdáleného registru je skutečně aktivní. Pokud můžete stáhnout bitovou kopii, ale váš cluster ne, můžete mít obecnější problémy se sítí, které vašim uzlům brání v přístupu k registru.