Partager via


Capturer des insights système en temps réel à partir d’un cluster AKS

Cet article décrit le processus de collecte d’insights système en temps réel à partir de votre cluster Microsoft Azure Kubernetes Service (AKS) à l’aide d’Inspektor Gadget. L’article contient des instructions pas à pas pour installer cet outil sur votre environnement AKS. Il explore également des exemples pratiques qui montrent comment Inspektor Gadget vous aide à collecter des informations précieuses pour effectuer un débogage efficace des problèmes réels.

Démonstration

Pour commencer, envisagez la démonstration rapide suivante. Supposons que vous devez déterminer pourquoi les demandes DNS d’une application échouent. À l’aide d’Inspektor Gadget, vous pouvez capturer le trafic DNS dans l’espace de noms Kubernetes dans lequel votre application s’exécute :

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

À partir de ces informations, vous pouvez voir que les requêtes DNS sont dirigées vers le serveur DNS à l’adresse 1.2.3.4IP , mais que le serveur ne répond jamais.

Supposons maintenant que ce 1.2.3.4 n’est pas la configuration de serveur de noms par défaut, et que vous pensez qu’un processus suspect modifie la configuration au moment de l’exécution. Dans ce genre de cas, Inspektor Gadget va au-delà des diagnostics DNS. Il vous permet également de surveiller les processus qui accèdent aux fichiers critiques (tels que /etc/resolv.conf) et qui ont l’intention de modifier ces fichiers. Pour utiliser cette fonctionnalité de surveillance, filtrez les indicateurs dans la sortie afin d’afficher l’un des modes d’accès aux fichiers d’écriture (O_WRONLY pour ouvrir pour l’écriture uniquement, ou O_RDWR pour ouvrir pour la lecture et l’écriture) :

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

Qu’est-ce qu’Inspektor Gadget ?

Inspektor Gadget est une infrastructure conçue pour créer, empaqueter, déployer et exécuter des outils dédiés au débogage et à l’inspection des systèmes Linux et Kubernetes. Ces outils (« gadgets ») sont implémentés en tant que programmes eBPF . Leur objectif principal est de collecter des données de noyau de bas niveau pour fournir des insights sur des scénarios système spécifiques. L’infrastructure Inspektor Gadget gère l’association des données collectées à l’aide de références de haut niveau, telles que les ressources Kubernetes. Cette intégration garantit l’existence d’une connexion transparente entre les insights de bas niveau et leur contexte de haut niveau correspondant. L’intégration simplifie le processus de résolution des problèmes et la collecte des informations pertinentes.

Gadgets

Inspektor Gadget fournit un ensemble d’outils intégrés conçus pour déboguer et observer des situations courantes sur un système. Par exemple, en utilisant ces gadgets, vous pouvez suivre les événements suivants dans votre cluster :

  • Création de processus
  • Accès aux fichiers
  • Activité réseau, telle que les connexions TCP ou la résolution DNS

Les gadgets présentent les informations qu’ils ont collectées à l’aide de différents mécanismes. Par exemple, certains gadgets peuvent vous informer de l’état du système à des moments spécifiques. D’autres gadgets peuvent signaler chaque fois qu’un événement donné se produit, ou ils peuvent fournir des mises à jour périodiques.

Voici quelques exemples. La documentation officielle fournit des descriptions détaillées et des exemples de chaque gadget afin que vous puissiez déterminer le gadget le plus adapté à votre cas d’usage spécifique. Toutefois, si vous trouvez un cas d’usage que les gadgets existants ne couvrent pas actuellement, Inspektor Gadget offre une flexibilité. Vous pouvez exécuter des scripts compatibles avec le langage de suivi eBPF bpftrace en exécutant la commande de script. Vous pouvez également exécuter vos propres programmes eBPF en exécutant la commande run. Étant donné que l’infrastructure Inspektor Gadget gère la création, l’empaquetage et le déploiement de vos programmes personnalisés, elle simplifie le processus selon vos besoins uniques. En outre, il collecte des métadonnées de haut niveau pour enrichir les données que vous collectez dans votre programme.

Cas d'utilisation

Pour compléter la démonstration présentée au début de cet article, nous avons compilé une liste de problèmes et de scénarios pratiques qui montrent comment Inspektor Gadget vous aide à relever les défis de débogage. Les exemples suivants illustrent le potentiel d’Inspektor Gadget. Mais les fonctionnalités de cet outil vont au-delà de ces scénarios. Cela fait d’Inspektor Gadget un atout précieux pour naviguer dans les complexités du débogage et de l’observabilité Kubernetes.

Zone de problème Symptômes Résolution des problèmes
Applications gourmandes en disque Utilisation élevée de la mémoire ou du processeur, ou préparation incohérente des nœuds Une application peut systématiquement s’engager dans des opérations de lecture/écriture sur disque, telles que la journalisation étendue. En utilisant Inspektor Gadget, vous pouvez identifier en temps réel les conteneurs qui génèrent le plus d’E/S de bloc. Ou, plus précisément, vous pouvez trouver le conteneur qui provoque davantage de lectures et d’écritures dans un fichier.
« C’est toujours DNS » Latence élevée de l’application, délais d’attente ou expérience utilisateur final médiocre

En utilisant Inspektor Gadget, vous pouvez suivre toutes les requêtes et réponses DNS dans le cluster. En particulier, Inspektor Gadget fournit les informations suivantes qui vous aident à déterminer si le DNS affecte les performances de votre application :

  • Réussite de la requête
  • Indique si la réponse contient une erreur
  • Serveur de noms utilisé pour la recherche
  • Latence de requête-réponse
Accès au système de fichiers L’application se comporte mal ou ne peut pas fonctionner correctement

L’application peut ne pas pouvoir accéder à des configurations, journaux ou autres fichiers vitaux spécifiques dans le système de fichiers. Dans de tels scénarios, Inspektor Gadget vous permet de suivre tous les fichiers ouverts à l’intérieur des pods pour diagnostiquer les problèmes d’accès. Chaque fois que votre application tente d’ouvrir un fichier, vous pouvez découvrir les informations suivantes :

  • Indicateurs utilisés pour ouvrir le fichier (par exemple, O_RDONLY, O_WRONLY, O_RDWR, et ainsi de suite)
  • Si la tentative d’ouverture de fichier réussit
  • Erreur retournée (si la tentative d’ouverture de fichier échoue)

Par exemple, si la tentative d’ouverture du fichier échoue en raison de l’erreur 2 (ENOENT), l’application tente probablement d’ouvrir un fichier qui n’existe pas. Cela signifie que vous pouvez avoir une faute de frappe dans le code, ou que le fichier est disponible dans un autre chemin.

Exécution de code à distance (RCE) Exécution de code non autorisée telle que le cryptojacking qui est évident dans une utilisation élevée du processeur pendant les périodes d’inactivité de l’application Lorsque des attaquants tentent d’effectuer ce type d’attaque sur un système, ils doivent généralement exécuter le code à l’aide bashde . Inspektor Gadget vous permet de suivre la création de nouveaux processus, en particulier les processus qui impliquent des commandes critiques telles que bash.

Comment installer Inspektor Gadget dans un cluster AKS

One-Click déploiement de gadgets Inspektor

En sélectionnant le bouton suivant, un cluster AKS est automatiquement créé et Inspektor Gadget est déployé dans le cluster. Une fois le déploiement terminé, vous pouvez explorer toutes les fonctionnalités d’Inspektor Gadget dans l’environnement shell fourni.

Déployer Inspektor Gadget dans un cluster AKS

Installez Inspektor Gadget en exécutant le plug-in « kubectl gadget »

Cette section décrit les étapes d’installation d’Inspektor Gadget dans votre cluster AKS en exécutant le kubectl gadget plug-in. L’installation se compose de deux parties :

  • Installation du kubectl gadget plug-in sur votre ordinateur

  • Exécution du kubectl gadget plug-in pour installer Inspektor Gadget dans le cluster

    Avertissement

    De nombreux mécanismes sont disponibles pour déployer et utiliser Inspektor Gadget. Chacun de ces mécanismes est adapté à des cas d’usage et des exigences spécifiques. Vous pouvez utiliser le plug-in kubectl gadget pour appliquer plusieurs de ces mécanismes, mais pas tous. Par exemple, le déploiement d’Inspektor Gadget à l’aide du kubectl gadget plug-in dépend de la disponibilité du serveur d’API Kubernetes. Si vous ne pouvez pas dépendre d’un tel composant, car sa disponibilité peut être parfois compromise, nous vous recommandons d’éviter d’utiliser le mécanisme de kubectl gadgetdéploiement. Pour plus d’informations sur ce cas d’usage et sur d’autres cas d’usage, consultez la documentation d’Inspektor Gadget.

Configuration requise

Partie 1 : Installer le gadget du plug-in kubectl sur votre ordinateur

Nous vous recommandons d’utiliser krew pour installer le kubectl gadget plug-in.

Remarque

Pour installer une version spécifique ou la compiler à partir de la source, consultez Installer kubectl gadget sur GitHub.

kubectl krew install gadget

À présent, vérifiez l’installation en exécutant la version commande :

kubectl gadget version

La version commande vous montre la version du client (kubectl gadget plug-in), mais elle vous indique également qu’elle n’est pas encore installée sur le serveur (le cluster) :

Client version: vX.Y.Z
Server version: not installed

Partie 2 : Installer Inspektor Gadget dans le cluster

La commande suivante déploie le contrôleur DaemonSet .

Remarque

Plusieurs options sont disponibles pour personnaliser le déploiement, comme indiqué dans la liste suivante :

  • Utiliser une image conteneur spécifique
  • Déployer sur des nœuds spécifiques
  • Déployer dans un espace de noms personnalisé

Pour en savoir plus sur ces options, consultez la section Installation dans le cluster de la documentation officielle.

kubectl gadget deploy

Vérifiez l’installation en exécutant à nouveau la version commande :

kubectl gadget version

Cette fois, le client et le serveur sont installés correctement :

Client version: vX.Y.Z
Server version: vX.Y.Z

Exclusion de responsabilité de tiers

Les produits tiers mentionnés dans le présent article sont fabriqués par des sociétés indépendantes de Microsoft. Microsoft exclut toute garantie, implicite ou autre, concernant les performances ou la fiabilité de ces produits.

Exclusion de responsabilité sur les coordonnées externes

Microsoft fournit des informations de contacts externes afin de vous aider à obtenir un support technique sur ce sujet. Ces informations de contact peuvent être modifiées sans préavis. Microsoft ne garantit pas l’exactitude des informations concernant les sociétés externes.

Contactez-nous pour obtenir de l’aide

Pour toute demande ou assistance, créez une demande de support ou posez une question au support de la communauté Azure. Vous pouvez également soumettre des commentaires sur les produits à la communauté de commentaires Azure.