Felsöka minnesmättnad i AKS-kluster
I den här artikeln beskrivs metoder för att felsöka problem med minnesmättnad. Minnesmättnad inträffar om minst ett program eller en process behöver mer minne än vad en containervärd kan tillhandahålla, eller om värden tömmer sitt tillgängliga minne.
Förutsättningar
- Kubernetes kubectl-kommandoradsverktyget . Om du vill installera kubectl med hjälp av Azure CLI kör du kommandot az aks install-cli .
Symptom
I följande tabell beskrivs vanliga symtom på minnesmättnad.
Symptom | Beskrivning |
---|---|
Oplanerade poddar | Det går inte att schemalägga ytterligare poddar om noden ligger nära den angivna minnesgränsen. |
Poddavhysning | Om en nod får slut på minne kan kubelet ta bort poddar. Även om kontrollplanet försöker schemalägga om de borttagna poddarna på andra noder som har resurser, finns det ingen garanti för att andra noder har tillräckligt med minne för att köra dessa poddar. |
Noden är inte klar | Minnesmättnad kan orsaka kubelet och containerd sluta svara, vilket så småningom orsakar problem med nodberedskap. |
Out-of-memory (OOM) kill | Ett OOM-problem uppstår om poddavhysningen inte kan förhindra ett nodproblem. |
Checklista för felsökning
För att minska minnesmättnad använder du effektiva övervakningsverktyg och tillämpar metodtips.
Steg 1: Identifiera noder som har minnesmättnad
Använd någon av följande metoder för att identifiera noder som har minnesmättnad:
I en webbläsare använder du funktionen Container Insights i AKS i Azure Portal.
I en konsol använder du kubernetes kommandoradsverktyg (kubectl).
Container Insights är en funktion i AKS som övervakar prestanda för containerarbetsbelastningar. Mer information finns i Aktivera containerinsikter för AKS-kluster (Azure Kubernetes Service).
På Azure Portal söker du efter och väljer Kubernetes-tjänster.
I listan över Kubernetes-tjänster väljer du namnet på klustret.
Leta reda på rubriken Övervakning i navigeringsfönstret i klustret och välj sedan Insikter.
Ange lämpligt tidsintervallvärde .
Välj fliken Noder .
I listan Mått väljer du Minnesarbetsuppsättning (beräknad från Allokerbar).
I väljaren percentiler anger du exemplet till Max och väljer sedan kolumnetiketten Max % två gånger. Den här åtgärden sorterar tabellnoderna efter den maximala procentandelen minne som används, från högsta till lägsta.
Eftersom den första noden har den högsta minnesanvändningen väljer du den noden för att undersöka minnesanvändningen för de poddar som körs på noden.
Kommentar
Procentandelen processor- eller minnesanvändning för poddar baseras på cpu-begäran som angetts för containern. Den representerar inte procentandelen cpu- eller minnesanvändning för noden. Så titta på den faktiska cpu- eller minnesanvändningen i stället för procentandelen cpu- eller minnesanvändning för poddar.
Nu när du har identifierat poddarna som använder högt minne kan du identifiera de program som körs på podden.
Steg 2: Granska metodtips för att undvika minnesmättnad
Läs följande tabell för att lära dig hur du implementerar metodtips för att undvika minnesmättnad.
Bästa metod | Beskrivning |
---|---|
Använda minnesbegäranden och gränser | Kubernetes innehåller alternativ för att ange den minsta minnesstorleken (begäran) och den maximala minnesstorleken (gränsen) för en container. Genom att konfigurera gränser för poddar kan du undvika minnesbelastning på noden. Kontrollera att aggregeringsgränserna för alla poddar som körs inte överskrider nodens tillgängliga minne. Den här situationen kallas för överkommentering. Kubernetes-schemaläggaren allokerar resurser baserat på angivna begäranden och gränser via tjänstkvalitet (QoS). Utan lämpliga gränser kan schemaläggaren schemalägga för många poddar på en enda nod. Detta kan så småningom få noden att gå ner. Även om kubelet tar bort poddar prioriteras poddar där minnesanvändningen överskrider deras definierade begäranden. Vi rekommenderar att du ställer in minnesbegäran nära den faktiska användningen. |
Aktivera den vågräta autoskalningsenheten för poddar | Genom att skala klustret kan du balansera begäranden mellan många poddar för att förhindra minnesmättnad. Den här tekniken kan minska fotavtrycket för minnesanvändning på den specifika noden. |
Använda taggar för tillhörighetsskydd | För scenarier där minnet är obundet avsiktligt kan du använda nodväljare och taggar för tillhörighet eller antitillhörighet som kan isolera arbetsbelastningen till specifika noder. Genom att använda taggar för antitillhörighet kan du förhindra att andra arbetsbelastningar schemalägger poddar på dessa noder. Detta minskar problemet med minnesmättnad. |
Välj högre virtuella SKU-datorer | Virtuella datorer (VM) som har mer RAM-minne är bättre lämpade för att hantera hög minnesanvändning. Om du vill använda det här alternativet så måste du skapa en ny nodpool, spärra noderna (så att de inte kan schemaläggas), samt tömma den befintliga nodpoolen. |
Isolera system- och användararbetsbelastningar | Vi rekommenderar att du kör dina program på en användarnodpool. Den här konfigurationen ser till att du kan isolera Kubernetes-specifika poddar till systemnodpoolen och upprätthålla klusterprestanda. |
Mer information
Ansvarsfriskrivning för information från tredje part
De produkter från andra tillverkare som diskuteras i denna artikel tillverkas oberoende av Microsoft. Produkternas funktion eller tillförlitlighet kan därför inte garanteras.
Ansvarsfriskrivning för tredje part
Microsoft tillhandahåller kontaktinformation från tredje part som hjälper dig att hitta ytterligare information om det här ämnet. Denna kontaktinformation kan ändras utan föregående meddelande. Microsoft garanterar inte att kontaktinformation från tredje part är korrekt.
Kontakta oss för att få hjälp
Om du har frågor eller behöver hjälp skapar du en supportförfrågan eller frågar Azure community support. Du kan också skicka produktfeedback till Azure-feedbackcommunityn.