Realtime systeeminzichten van een AKS-cluster vastleggen
In dit artikel wordt het proces voor het verzamelen van realtime systeeminzichten van uw AKS-cluster (Microsoft Azure Kubernetes Service) besproken 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 waardevolle informatie te verzamelen om effectieve foutopsporing van echte problemen uit te voeren.
Demo
Bekijk eerst de volgende snelle demo. Stel dat u moet achterhalen 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 ip-adres 1.2.3.4
, maar de server reageert nooit.
Stel dat dit 1.2.3.4
niet de standaardnaamserverconfiguratie 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. Hiermee kunt u ook processen 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 schrijfmodi voor bestandstoegang 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 toegewezen aan foutopsporing en het inspecteren van Linux- en Kubernetes-systemen. Deze hulpprogramma's (gadgets) worden geïmplementeerd als eBPF-programma's . Hun primaire doel is om kernelgegevens op laag niveau te verzamelen 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 de verzameling relevante informatie.
Gadgets
Inspektor Gadget biedt een set ingebouwde hulpprogramma's die zijn ontworpen om fouten op te sporen en veelvoorkomende situaties in een systeem te observeren. Met dergelijke gadgets kunt u bijvoorbeeld de volgende gebeurtenissen in uw cluster traceren:
- Proces maken
- Bestandstoegang
- Netwerkactiviteit, zoals TCP-verbindingen of DNS-omzetting
De gadgets geven de informatie weer die ze hebben verzameld met behulp van verschillende mechanismen. Sommige gadgets kunnen u bijvoorbeeld op specifieke momenten informeren over de systeemstatus. Andere gadgets kunnen rapporteren telkens 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 elk gadget, zodat u de meest geschikte gadget voor uw specifieke use case kunt bepalen. Als u echter een use-case vindt die momenteel niet door de bestaande gadgets wordt behandeld, kunt u inSpektor Gadget uw eigen eBPF-programma's uitvoeren met behulp van de run-opdracht. Omdat het Inspektor Gadget-framework het bouwen, verpakken en implementeren van uw aangepaste programma's afhandelt, stroomlijnt het het proces voor uw unieke vereisten. Daarnaast worden metagegevens op hoog niveau verzameld om de gegevens te verrijken die u in uw programma verzamelt.
Gebruiksgevallen
Ter 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 aanpakken van problemen met foutopsporing. 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 een waardevolle asset 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 gebruik maken van lees-/schrijfbewerkingen voor schijven, zoals uitgebreide logboekregistratie. Met behulp van Inspektor Gadget kunt u in realtime identificeren welke containers meer blok-I/O genereren. U kunt ook de container vinden die meer lees- en schrijfbewerkingen in een bestand veroorzaakt. |
"Het is altijd DNS" | Hoge toepassingslatentie, time-outs of slechte eindgebruikerservaring | Met behulp van Inspektor Gadget kunt u alle DNS-query's en antwoorden in het cluster traceren. Inspektor Gadget bevat met name de volgende informatie waarmee u kunt bepalen of de DNS van invloed is op de prestaties van uw toepassing:
|
Toegang tot bestandssysteem | Toepassing misdraagt of niet goed functioneert | De toepassing heeft mogelijk geen toegang tot specifieke configuraties, logboeken of andere essentiële 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 ontdekken:
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. |
Uitvoering van externe code (RCE) | Niet-geautoriseerde code-uitvoering, zoals cryptojacking die duidelijk is in hoog CPU-gebruik tijdens niet-actieve perioden van toepassingen | Wanneer aanvallers dit soort aanvallen proberen uit te voeren op een systeem, moeten ze meestal de code uitvoeren met behulp van bash . Met Inspektor Gadget kunt u het maken van nieuwe processen traceren, met name processen waarbij kritieke opdrachten zoals bash . |
Inspektor Gadget installeren in een AKS-cluster
Inspektor Gadget-implementatie met één klik
Door de volgende knop te selecteren, 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 use cases en vereisten. U kunt de kubectl gadget-invoegtoepassing 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 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 opdrachtregelprogramma Kubernetes kubectl . 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 azure Portal.
De krew package manager voor plug-ins in kubectl. U kunt de quickstartgids voor Krew volgen om dit pakketbeheer te installeren.
Deel 1: Installeer de kubectl plug-in gadget op uw computer
U wordt aangeraden krew
de kubectl gadget
invoegtoepassing te installeren.
Notitie
Zie Kubectl-gadget installeren op GitHub om een specifieke release te installeren of deze 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 op de server (het cluster) is geïnstalleerd:
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.
Notitie
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 worden de client en de server beide correct 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.
Vrijwaring van contactpersonen van derden
Microsoft biedt contactgegevens van derden om u te helpen aanvullende informatie over dit onderwerp te vinden. Deze contactgegevens kunnen zonder kennisgeving worden gewijzigd. Microsoft garandeert niet de nauwkeurigheid van contactgegevens van derden.
Contact met ons opnemen voor ondersteuning
Als u vragen hebt of hulp nodig hebt, maakt u een ondersteuningsaanvraag of stelt u ondersteuning voor de Azure-community. U kunt ook productfeedback verzenden naar de Azure-feedbackcommunity.