Delen via


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:

  • Query geslaagd
  • Of het antwoord een fout bevat
  • De naamserver die wordt gebruikt voor de zoekactie
  • De latentie van het queryantwoord
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:

  • De vlaggen die worden gebruikt om het bestand te openen (bijvoorbeeld O_RDONLY, O_WRONLY, O_RDWR enzovoort)
  • Of de poging tot openen van bestanden slaagt
  • De geretourneerde fout (als de poging om het bestand te openen mislukt)

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.

Inspektor Gadget implementeren in een AKS-cluster

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 computer

  • kubectl gadget De invoegtoepassing uitvoeren om Inspektor Gadget in het cluster te installeren

    Waarschuwing

    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 het kubectl gadgetimplementatiemechanisme te vermijden. Zie de Documentatie voor Inspektor Gadget voor meer informatie over deze en andere use cases.

Vereisten

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.