Realtime systeem insights van een AKS-cluster vastleggen
In dit artikel wordt het proces besproken van het verzamelen van realtime systeem insights van uw Microsoft Azure Kubernetes Service (AKS)-cluster met behulp van Inspektor Gadget. Het artikel bevat stapsgewijze instructies voor het installeren van dit hulpprogramma in uw AKS-omgeving. Het verkent ook praktische voorbeelden die laten zien hoe Inspektor Gadget u helpt bij het verzamelen van waardevolle informatie voor het effectief opsporen van problemen in de praktijk.
Demo
Bekijk eerst de volgende snelle demo. Stel dat u moet uitzoeken waarom de DNS-aanvragen van een toepassing mislukken. Met behulp van Inspektor Gadget kunt u het DNS-verkeer vastleggen in de Kubernetes-naamruimte waarin uw toepassing wordt uitgevoerd:
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
Op basis van deze informatie kunt u zien dat de DNS-aanvragen worden omgeleid naar de DNS-server op het IP-adres 1.2.3.4
, maar dat de server nooit reageert.
Stel dat dit 1.2.3.4
niet de standaardconfiguratie van de naamserver is en u vermoedt dat een verdacht proces de configuratie tijdens runtime wijzigt. In dit soort gevallen gaat Inspektor Gadget verder dan DNS-diagnostische gegevens. Het stelt u ook in staat om processen te bewaken die toegang hebben tot kritieke bestanden (zoals /etc/resolv.conf) en de bedoeling hebben om deze bestanden te wijzigen. Als u deze bewakingsfunctie wilt gebruiken, filtert u de vlaggen in de uitvoer om een van de toegangsmodi voor het schrijven van bestanden weer te geven (O_WRONLY
om alleen te openen voor schrijven of O_RDWR
om te openen voor lezen en schrijven):
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
Wat is Inspektor Gadget?
Inspektor Gadget is een framework dat is ontworpen voor het bouwen, verpakken, implementeren en uitvoeren van hulpprogramma's die zijn bedoeld voor het opsporen en inspecteren van Linux- en Kubernetes-systemen. Deze hulpprogramma's (gadgets) worden geïmplementeerd als eBPF-programma's . Hun primaire doel is het verzamelen van kernelgegevens op laag niveau om inzicht te krijgen in specifieke systeemscenario's. Het Inspektor Gadget-framework beheert de koppeling van de verzamelde gegevens met behulp van verwijzingen op hoog niveau, zoals Kubernetes-resources. Deze integratie zorgt ervoor dat er een naadloze verbinding bestaat tussen inzichten op laag niveau en de bijbehorende context op hoog niveau. De integratie stroomlijnt het probleemoplossingsproces en het verzamelen van relevante informatie.
Gadgets
Inspektor Gadget biedt een set ingebouwde hulpprogramma's die zijn ontworpen om fouten op te sporen en veelvoorkomende situaties op een systeem te observeren. Door dergelijke gadgets te gebruiken, kunt u bijvoorbeeld de volgende gebeurtenissen in uw cluster traceren:
- Proces maken
- Bestandstoegang
- Netwerkactiviteit, zoals TCP-verbindingen of DNS-omzetting
De gadgets bevatten de informatie die ze hebben verzameld met behulp van verschillende mechanismen. Sommige gadgets kunnen u bijvoorbeeld op specifieke tijdstippen informeren over de systeemstatus. Andere gadgets kunnen elke keer worden weergegeven wanneer een bepaalde gebeurtenis plaatsvindt, of ze kunnen periodieke updates bieden.
Dit zijn slechts enkele voorbeelden. De officiële documentatie bevat gedetailleerde beschrijvingen en voorbeelden van elke gadget, zodat u de meest geschikte gadget voor uw specifieke gebruiksscenario kunt bepalen. Als u echter een use-case vindt die momenteel niet door de bestaande gadgets wordt behandeld, biedt Inspektor Gadget flexibiliteit. U kunt scripts uitvoeren die compatibel zijn met de eBPF-traceringstaal bpftrace door de scriptopdracht uit te voeren. U kunt ook uw eigen eBPF-programma's uitvoeren door de opdracht uitvoeren. Omdat het Inspektor Gadget-framework het bouwen, verpakken en implementeren van uw aangepaste programma's afhandelt, stroomlijnt het het proces voor uw unieke vereisten. Het verzamelt ook metagegevens op hoog niveau om de gegevens te verrijken die u in uw programma verzamelt.
Gebruiksvoorbeelden
Als aanvulling op de demo die aan het begin van dit artikel wordt gepresenteerd, hebben we een lijst met problemen en praktische scenario's samengesteld die laten zien hoe Inspektor Gadget u helpt bij het oplossen van fouten. In de volgende voorbeelden ziet u het potentieel van Inspektor Gadget. Maar de mogelijkheden van dit hulpprogramma gaan verder dan deze scenario's. Dit maakt Inspektor Gadget van onschatbare waarde voor het navigeren door de complexiteit van Kubernetes-foutopsporing en waarneembaarheid.
Probleemgebied | Symptomen | Probleemoplossing |
---|---|---|
Schijfintensieve toepassingen | Hoog geheugen- of CPU-gebruik of inconsistente knooppuntgereedheid | Een toepassing kan consistent schijflees-/schrijfbewerkingen uitvoeren, zoals uitgebreide logboekregistratie. Met behulp van Inspektor Gadget kunt u in realtime bepalen welke containers meer blok-I/O genereren. Of, meer specifiek, kunt u de container vinden die meer lees- en schrijfbewerkingen in een bestand veroorzaakt. |
"Het is altijd DNS" | Hoge toepassingslatentie, time-outs of slechte ervaring voor eindgebruikers | Met behulp van Inspektor Gadget kunt u alle DNS-query's en antwoorden in het cluster traceren. Inspektor Gadget biedt met name de volgende informatie waarmee u kunt bepalen of de DNS de prestaties van uw toepassing beïnvloedt:
|
Bestandssysteemtoegang | Toepassing misdraagt of werkt niet goed | De toepassing heeft mogelijk geen toegang tot specifieke configuraties, logboeken of andere belangrijke bestanden in het bestandssysteem. In dergelijke scenario's kunt u met Inspektor Gadget alle geopende bestanden in pods traceren om toegangsproblemen vast te stellen. Wanneer uw toepassing probeert een bestand te openen, kunt u de volgende informatie detecteren:
Als de poging om het bestand te openen bijvoorbeeld mislukt vanwege fout 2 (ENOENT), probeert de toepassing waarschijnlijk een bestand te openen dat niet bestaat. Dit betekent dat u mogelijk een typefout in de code hebt of dat het bestand beschikbaar is in een ander pad. |
Externe uitvoering van code (RCE) | Niet-geautoriseerde code-uitvoering, zoals cryptojacking , dat duidelijk is bij hoog CPU-gebruik tijdens niet-actieve perioden van toepassingen | Wanneer aanvallers dit soort aanvallen op een systeem proberen uit te voeren, moeten ze de code meestal uitvoeren met behulp van bash . Met Inspektor Gadget kunt u het maken van nieuwe processen traceren, met name processen waarbij kritieke opdrachten zijn betrokken, zoals bash . |
Inspektor Gadget installeren in een AKS-cluster
One-Click Inspektor Gadget-implementatie
Als u de volgende knop selecteert, wordt automatisch een AKS-cluster gemaakt en wordt Inspektor Gadget geïmplementeerd in het cluster. Nadat de implementatie is voltooid, kunt u alle functies van Inspektor Gadget verkennen in de opgegeven shell-omgeving.
Installeer Inspektor Gadget door de invoegtoepassing 'kubectl gadget' uit te voeren
In deze sectie worden de stappen beschreven voor het installeren van Inspektor Gadget in uw AKS-cluster door de kubectl gadget
invoegtoepassing uit te voeren. De installatie bestaat uit twee delen:
kubectl gadget
De invoegtoepassing installeren op uw computerkubectl gadget
De invoegtoepassing uitvoeren om Inspektor Gadget in het cluster te installerenWaarschuwing
Er zijn veel mechanismen beschikbaar voor het implementeren en gebruiken van Inspektor Gadget. Elk van deze mechanismen is afgestemd op specifieke gebruiksscenario's en vereisten. U kunt de invoegtoepassing kubectl-gadget gebruiken om verschillende van deze mechanismen toe te passen, maar niet allemaal. Het implementeren van Inspektor Gadget met behulp van de
kubectl gadget
invoegtoepassing is bijvoorbeeld afhankelijk van de beschikbaarheid van de Kubernetes-API-server. Als u niet afhankelijk kunt zijn van een dergelijk onderdeel omdat de beschikbaarheid ervan af en toe kan worden aangetast, raden we u aan hetkubectl gadget
implementatiemechanisme te vermijden. Zie de Documentatie voor Inspektor Gadget voor meer informatie over deze en andere use cases.
Vereisten
Het kubectl-opdrachtregelprogramma kubernetes . Als u Azure CLI hebt, kunt u de opdracht az aks install-cli uitvoeren om kubectl te installeren.
Een AKS-cluster. Als u geen AKS-cluster hebt, maakt u er een met behulp van Azure CLI of met behulp van de Azure Portal.
Het krew-pakketbeheer voor invoegtoepassingen in kubectl. U kunt de quickstartgids krew volgen om dit pakketbeheer te installeren.
Deel 1: Installeer het gadget kubectl-invoegtoepassing op uw computer
U wordt aangeraden krew
de kubectl gadget
invoegtoepassing te installeren.
Opmerking
Zie Kubectl-gadget installeren op GitHub om een specifieke release te installeren of te compileren vanuit de bron.
kubectl krew install gadget
Controleer nu de installatie door de opdracht uit te version
voeren:
kubectl gadget version
De version
opdracht toont u de versie van de client (kubectl gadget
invoegtoepassing), maar geeft ook aan dat deze nog niet is geïnstalleerd op de server (het cluster):
Client version: vX.Y.Z
Server version: not installed
Deel 2: Inspektor Gadget installeren in het cluster
Met de volgende opdracht wordt de DaemonSet-controller geïmplementeerd.
Opmerking
Er zijn verschillende opties beschikbaar om de implementatie aan te passen, zoals wordt weergegeven in de volgende lijst:
- Een specifieke containerinstallatiekopieën gebruiken
- Implementeren op specifieke knooppunten
- Implementeren in een aangepaste naamruimte
Zie de sectie Installeren in het cluster van de officiële documentatie voor meer informatie over deze opties.
kubectl gadget deploy
Controleer de installatie door de version
opdracht opnieuw uit te voeren:
kubectl gadget version
Deze keer wordt weergegeven dat de client en de server beide correct zijn geïnstalleerd:
Client version: vX.Y.Z
Server version: vX.Y.Z
Disclaimerinformatie van derden
De producten van derden die in dit artikel worden vermeld, worden vervaardigd door bedrijven die onafhankelijk zijn van Microsoft. Microsoft verleent dan ook geen enkele garantie, impliciet noch anderszins, omtrent de prestaties of de betrouwbaarheid van deze producten.
Disclaimerinformatie van derden
Microsoft verstrekt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactinformatie kan zonder voorafgaande kennisgeving worden gewijzigd. Microsoft garandeert de juistheid van contactgegevens van derden niet.
Contacteer ons voor hulp
Als u vragen hebt of hulp nodig hebt, maak een ondersteuningsaanvraag of vraag de Azure-communityondersteuning. U kunt ook productfeedback verzenden naar de Feedback-community van Azure.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor