Förstå Kubernetes Image Pull-policyer

0
145

Kubernetes image pull policy styr när Kubelet ska hämta en uppdaterad bildversion. Pull-policyer används när en ny Pod startar. Kubelet kommer att vidta lämpliga åtgärder som indikeras av Pods policy.

Standardbeteendet

Du behöver inte ange en policy för bildhämtning. När en pod saknar en policy kommer Kubernetes att dra slutsatser om dina avsikter från bildens tagg. Om du har angett en specifik tagg (som min bild: min släpp), dras bilden bara om taggen inte redan finns på Kubelet-noden. Denna policy kallas IfNotPresent.

När ingen tagg har angetts eller om du använder den senaste taggen kommer bilden alltid att dras. Kubernetes hämtar bildens manifest varje gång en ny Pod startar. Om manifestet indikerar en förändring dras den uppdaterade bilden innan behållarna skapas.

Kubernetes kommer aldrig att ändra imagePullPolicy till följd av en annan åtgärd. Redigering av en Pods bild kommer inte att leda till att Kubernetes utvärderar standardpolicy. Det betyder att om du börjar med min-image: senast men senare uppdaterar Pod till min-image: my-release, kommer policyen för bildhämtning fortfarande att vara IfNotPresent. Du bör manuellt ange en ny policy om en önskas.

Göra Kubelet alltid dra

Du måste tillämpa en image pull policy för att tvinga Kubelet att alltid försöka dra. Ställ imagePullPolicy: Alltid på en pod för att aktivera detta beteende.

spec: containers: – namn: min-container-bild: min-bild: min-release imagePullPolicy: Alltid

Nya bildversioner kommer att tas närhelst en Pod startar och bildens uppenbara sammandrag har ändrats. En lokalt cachad version av bilden kommer fortfarande att återanvändas om smälten inte har ändrats. Detta undviker onödiga nedladdningar via nätverket. Docker-smältningar är oföränderliga referenser som unikt identifierar bilder utan namn eller tagg.

Tvingade drag är användbara när du vill distribuera nya versioner av din bild med samma tagg. Detta kan vara fallet när du taggar bilder med filialnamnet de har byggts från. Utan Alltid-policyn skulle Kubernetes aldrig dra ut dina nya bildreleaser om taggen redan fanns tillgänglig lokalt.

Förbud mot automatiska drag

Alla policyer som tillåter bilddrag kommer att hämta nya versioner av dina lokalt cachade taggar. Använd en bildsmältning som ditt Pods bildfält om du vill att en behållare ska hålla fast med en exakt bildversion varje gång den startar.

Det finns scenarier där du kanske inte vill att Kubernetes ska dra bilder alls. Att ställa in policyn Never kommer att förhindra Kubelets automatiska drag. Denna policy kommer inte att leta efter uppdateringar alls & # 8211; registrets manifestversion hämtas inte.

Du behöver ett alternativt sätt att få bilder till dina noder om du använder Never. Varje bild måste finnas lokalt innan du försöker starta dina Pods. Annars kommer inte Kubernetes att kunna köra Pods containrar.

Detta fungerar som en skyddsmekanism när du använder en fristående bilddragmekanism. Du vill inte att Kubernetes av misstag försöker automatiskt hämta om en dragning misslyckas. Det kan leda till förlust av bilder som redan är cachade lokalt.

Pull-policy och caching

Din valda pull-policy bör inte & # 8217 ; t påverkar prestanda avsevärt. Så länge din bildleverantör stöder lagring av cachning behöver Kubelet bara dra de riktigt nya lagren i varje bild.

Policyen Alltid lägger till ett nätverkssamtal varje gång du startar en ny Pod. Det behöver bara kontrollera bildsmältningen så att det ska vara praktiskt taget omedelbart. Om sammandraget inte matchar den lokalt cachade versionen kommer de nya bildlagren att dras från registret. Den viktigaste prestandakostnaden är den faktiska nätverksöverföringen av dessa lager, följt av deras efterföljande dekompression.

Sammanfattning

Kubernetes stöder flera beteendemodeller för bilddrag. Bilder hanteras av Kubelet och hämtas när en Pod startar. Standardpolicyn drar bilden om taggen inte redan finns lokalt. Om bilden är taggad eller har den senaste som sin tagg används alltid policyn i stället.

Att ställa in imagePullPolicy i dina Pod-specifikationer gör den valda policyn tydlig. Detta hjälper alla bidragsgivare att förstå det valda beteendet, även om de inte känner till Kubernetes standardvärden. Det är särskilt viktigt om du använder de senaste eller omärkta bilderna, där Kubernetes tillämpar speciell hantering som kan vara förvirrande.

Kom ihåg att principerna för bildhämtning alltid är inställda per pod som standard. Om du vill använda en policy för hela klustret måste du använda ett konfigurationsverifieringsverktyg för att skanna dina Pod-manifest. kube-score är ett statiskt analysverktyg för Kubernetes-objektmanifest som innehåller en imagePullPolicy-kontroll i standardregleruppsättningen. Kör kube-score-poäng my-manifest.yaml som en del av en CI-pipeline för att förhindra användning av manifest som saknar en definierad policy.