GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak ladit chyby Kubernetes „ImagePullBackOff“.

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.


Docker
  1. Jak používat Terraform Kubernetes Provider

  2. Jak upravit obrázky Docker

  3. Jak odstranit službu v Kubernetes

  1. Jak ladit Bash skript?

  2. Jak použít Dockerfile k vytvoření Docker Image

  3. Jak potvrdit změny v obrazu Dockeru

  1. Jak provést nasazení Canary na Kubernetes

  2. Jak otočit obrázek v Gs?

  3. Jak aktualizovat obrázek FOG