Samla in systeminsikter i realtid från ett AKS-kluster
I den här artikeln beskrivs processen för att samla in systeminsikter i realtid från ditt AkS-kluster (Microsoft Azure Kubernetes Service) med hjälp av Inspektor Gadget. Artikeln innehåller stegvisa instruktioner för hur du installerar det här verktyget i AKS-miljön. Den utforskar även praktiska exempel som visar hur Inspektor Gadget hjälper dig att samla in värdefull information för att utföra effektiv felsökning av verkliga problem.
Demo
Börja med att titta på följande snabbdemo. Anta att du måste ta reda på varför DNS-begäranden från ett program misslyckas. Genom att använda Inspektor Gadget kan du avbilda DNS-trafiken i Kubernetes-namnområdet där programmet körs:
kubectl gadget trace dns --namespace my-ns --output columns=+nameserver
K8S.NODE K8S.NAMESPACE K8S.POD PID TID COMM QR TYPE QTYPE NAME RCODE NUMANSWERS NAMESERVER
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING A www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING AAAA www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING A www.example.com. 0 1.2.3.4
aks-agentpool-97833681-vmss000001 my-ns my-app 1349264 1349264 nslookup Q OUTGOING AAAA www.example.com. 0 1.2.3.4
Med den här informationen kan du se att DNS-begäranden dirigeras till DNS-servern på IP-adressen 1.2.3.4
, men servern svarar aldrig.
Anta nu att det 1.2.3.4
inte är standardnamnserverkonfigurationen och du misstänker att en misstänkt process ändrar konfigurationen vid körning. I den här typen av fall går Inspektor Gadget utöver DNS-diagnostik. Du kan också övervaka processer som har åtkomst till kritiska filer (till exempel /etc/resolve.conf) och har för avsikt att ändra dessa filer. Om du vill använda den här övervakningsfunktionen filtrerar du flaggorna i utdata för att visa något av skrivlägena för filåtkomst (O_WRONLY
för att endast öppna för skrivning eller O_RDWR
för att öppna för läsning och skrivning):
kubectl gadget trace open --namespace my-ns \
--filter path:/etc/resolv.conf,flags:'~(O_WRONLY|O_RDWR)' \
--output columns=+flags
K8S.NODE K8S.NAMESPACE K8S.POD K8S.CONTAINER PID COMM FD ERR PATH FLAGS
aks-agentpool-97833681-vmss000001 my-ns my-app my-app 1365052 vi 3 0 /etc/resolv.conf O_WRONLY|O_CREAT
Vad är Inspektor Gadget?
Inspektor Gadget är ett ramverk som är utformat för att skapa, paketera, distribuera och köra verktyg som är dedikerade till felsökning och inspektion av Linux- och Kubernetes-system. Dessa verktyg ("prylar") implementeras som eBPF-program . Deras främsta mål är att samla in kerneldata på låg nivå för att ge insikter om specifika systemscenarier. Ramverket Inspektor Gadget hanterar associationen av insamlade data med hjälp av referenser på hög nivå, till exempel Kubernetes-resurser. Den här integreringen ser till att det finns en sömlös anslutning mellan lågnivåinsikter och deras motsvarande högnivåkontext. Integreringen effektiviserar felsökningsprocessen och insamlingen av relevant information.
Prylar
Inspektor Gadget innehåller en uppsättning inbyggda verktyg som är utformade för att felsöka och observera vanliga situationer i ett system. Genom att till exempel använda sådana prylar kan du spåra följande händelser i klustret:
- Skapa process
- Åtkomst till filer
- Nätverksaktivitet, till exempel TCP-anslutningar eller DNS-matchning
Gadgetarna visar den information som de samlade in med hjälp av olika mekanismer. Vissa prylar kan till exempel informera dig om systemstatusen vid specifika tidpunkter. Andra prylar kan rapportera varje gång en viss händelse inträffar, eller så kan de tillhandahålla regelbundna uppdateringar.
Det här är bara några exempel. Den officiella dokumentationen innehåller detaljerade beskrivningar och exempel på varje gadget så att du kan fastställa den lämpligaste gadgeten för ditt specifika användningsfall. Men om du hittar ett användningsfall som de befintliga prylarna för närvarande inte täcker kan du med Inspektor Gadget köra dina egna eBPF-program med hjälp av körningskommandot. Eftersom Inspektor Gadget-ramverket hanterar bygget, paketeringen och distributionen av dina anpassade program effektiviserar det processen för dina unika krav. Dessutom samlar den in metadata på hög nivå för att utöka de data som du samlar in i ditt program.
Användningsfall
För att komplettera demonstrationen som presenteras i början av den här artikeln kompilerade vi en lista över problem och praktiska scenarier som visar hur Inspektor Gadget hjälper dig att hantera felsökningsutmaningar. I följande exempel visas potentialen hos Inspektor Gadget. Men funktionerna i det här verktyget sträcker sig bortom dessa scenarier. Detta gör Inspektor Gadget till en ovärderlig tillgång för att navigera i komplexiteten i Kubernetes felsökning och observerbarhet.
Problemområde | Symptom | Felsökning |
---|---|---|
Diskintensiva program | Hög minnes- eller CPU-användning eller inkonsekvent nodberedskap | Ett program kan konsekvent engagera sig i diskläsnings-/skrivåtgärder, till exempel omfattande loggning. Genom att använda Inspektor Gadget kan du identifiera i realtid vilka containrar som genererar mer block-I/O. Eller mer specifikt kan du hitta containern som orsakar fler läsningar och skrivningar i en fil. |
"Det är alltid DNS" | Hög programfördröjning, tidsgränser eller dålig slutanvändarupplevelse | Genom att använda Inspektor Gadget kan du spåra alla DNS-frågor och svar i klustret. I synnerhet innehåller Inspektor Gadget följande information som hjälper dig att avgöra om DNS påverkar programmets prestanda:
|
Filsystemåtkomst | Programmet fungerar felaktigt eller kan inte fungera korrekt | Programmet kanske inte kan komma åt specifika konfigurationer, loggar eller andra viktiga filer i filsystemet. I sådana scenarier kan du med Inspektor Gadget spåra alla öppnade filer i poddar för att diagnostisera åtkomstproblem. När programmet försöker öppna en fil kan du identifiera följande information:
Om försöket att öppna filen till exempel misslyckas på grund av fel 2 (ENOENT) försöker programmet förmodligen öppna en fil som inte finns. Det innebär att du kan ha ett skrivfel i koden eller att filen är tillgänglig i en annan sökväg. |
Fjärrkörning av kod (RCE) | Otillåten kodkörning, till exempel kryptokapning , som är uppenbar vid hög CPU-användning under inaktiva programperioder | När angripare försöker utföra den här typen av angrepp på ett system måste de vanligtvis köra koden med hjälp bash av . Med Inspektor Gadget kan du spåra skapandet av nya processer, särskilt processer som omfattar kritiska kommandon som bash . |
Så här installerar du Inspektor Gadget i ett AKS-kluster
Distribution med en klickande inspektor-gadget
Genom att välja följande knapp skapas ett AKS-kluster automatiskt och Inspektor Gadget distribueras i klustret. När distributionen är klar kan du utforska alla funktioner i Inspektor Gadget i den angivna gränssnittsmiljön.
Installera Inspektor Gadget genom att köra plugin-programmet "kubectl gadget"
I det här avsnittet beskrivs stegen för att installera Inspektor Gadget i AKS-klustret genom att köra kubectl gadget
plugin-programmet. Installationen består av två delar:
kubectl gadget
Installera plugin-programmet på datornkubectl gadget
Köra plugin-programmet för att installera Inspektor Gadget i klustretVarning
Det finns många mekanismer för att distribuera och använda Inspektor Gadget. Var och en av dessa mekanismer är skräddarsydd för specifika användningsfall och krav. Du kan använda plugin-programmet kubectl gadget för att tillämpa flera av dessa mekanismer, men inte alla. Distribution av Inspektor Gadget med hjälp
kubectl gadget
av plugin-programmet beror till exempel på tillgängligheten för Kubernetes API-servern. Om du inte kan vara beroende av en sådan komponent eftersom dess tillgänglighet ibland kan komprometteras rekommenderar vi att du undviker att använda distributionsmekanismenkubectl gadget
. Mer information om detta och andra användningsfall finns i dokumentationen om Inspektor Gadget.
Förutsättningar
Kubernetes kubectl-kommandoradsverktyget . Om du har Azure CLI kan du köra kommandot az aks install-cli för att installera kubectl.
Ett AKS-kluster. Om du inte har något AKS-kluster skapar du ett med hjälp av Azure CLI eller med hjälp av Azure Portal.
Krew-pakethanteraren för plugin-program i kubectl. Du kan följa snabbstartsguiden för krew för att installera den här pakethanteraren.
Del 1: Installera kubectl-plugin-gadgeten på datorn
Vi rekommenderar att du använder krew
för att installera kubectl gadget
plugin-programmet.
Kommentar
Information om hur du installerar en specifik version eller kompilerar den från källan finns i Installera kubectl-gadget på GitHub.
kubectl krew install gadget
Kontrollera nu installationen genom att version
köra kommandot:
kubectl gadget version
Kommandot version
visar versionen av klienten (kubectl gadget
plugin-programmet), men den visar även att den inte är installerad än på servern (klustret):
Client version: vX.Y.Z
Server version: not installed
Del 2: Installera Inspektor Gadget i klustret
Följande kommando distribuerar DaemonSet-kontrollanten.
Kommentar
Det finns flera alternativ för att anpassa distributionen, enligt följande lista:
- Använda en specifik containeravbildning
- Distribuera till specifika noder
- Distribuera till ett anpassat namnområde
Mer information om de här alternativen finns i avsnittet Installera i klustret i den officiella dokumentationen.
kubectl gadget deploy
Kontrollera installationen genom att version
köra kommandot igen:
kubectl gadget version
Den här gången visas både klienten och servern korrekt installerade:
Client version: vX.Y.Z
Server version: vX.Y.Z
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.