Capturer des insights système en temps réel à partir d’un cluster AKS
Cet article décrit le processus de collecte des 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 à recueillir des informations précieuses pour effectuer un débogage efficace des problèmes réels.
Démo
Pour commencer, tenez compte de la démonstration rapide suivante. Supposons que vous devez déterminer pourquoi les requêtes DNS d’une application échouent. En utilisant 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.4
IP, mais que le serveur ne répond jamais.
Supposons maintenant que 1.2.3.4
ce n’est pas la configuration du serveur de noms par défaut et que vous pensez qu’un processus suspect modifie la configuration au moment de l’exécution. Dans ces types de cas, Inspektor Gadget dépasse les diagnostics DNS. Il vous permet également de surveiller les processus qui accèdent aux fichiers critiques (tels que /etc/resolv.conf) et ont l’intention de modifier ces fichiers. Pour utiliser cette fonctionnalité de surveillance, filtrez les indicateurs dans la sortie pour afficher l’un des modes d’accès aux fichiers d’écriture (O_WRONLY
pour ouvrir uniquement pour l’écriture ou O_RDWR
pour ouvrir uniquement 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 un framework conçu pour la création, l’empaquetage, le déploiement et l’exécution d’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. Le framework Inspektor Gadget gère l’association des données collectées à l’aide de références de haut niveau, telles que des ressources Kubernetes. Cette intégration garantit qu’une connexion transparente existe 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 d’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, comme 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.
Et ce n’est que 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 approprié pour votre cas d’usage spécifique. Toutefois, si vous trouvez un cas d’usage que les gadgets existants ne couvrent pas actuellement, Inspektor Gadget vous permet d’exécuter vos propres programmes eBPF à l’aide de la commande d’exécution. Étant donné que l’infrastructure Inspektor Gadget gère la génération, l’empaquetage et le déploiement de vos programmes personnalisés, elle simplifie le processus pour 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 présentent le potentiel d’Inspektor Gadget. Mais les fonctionnalités de cet outil s’étendent au-delà de ces scénarios. Cela rend Inspektor Gadget un atout inestimable pour naviguer dans les complexités du débogage et de l’observabilité Kubernetes.
Zone de problème | Symptômes | Dépannage |
---|---|---|
Applications gourmandes en disques | Utilisation élevée de la mémoire ou du processeur ou préparation des nœuds incohérents | Une application peut constamment 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 quels conteneurs génèrent davantage d’E/S de blocs. 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 des applications, 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 :
|
Accès au système de fichiers | L’application se comporte mal ou ne peut pas fonctionner correctement | L’application peut ne pas accéder à des configurations, journaux ou autres fichiers essentiels 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 :
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 d’accès. |
Exécution de code à distance (RCE) | Exécution de code non autorisée telle que le verrouillage de chiffrement évident dans une utilisation élevée du processeur pendant les périodes d’inactivité de l’application | Lorsque les attaquants essaient de faire ce type d’attaque sur un système, ils doivent généralement exécuter le code à l’aide bash de . 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
Déploiement de gadgets inspektor en un clic
En sélectionnant le bouton suivant, un cluster AKS sera créé automatiquement et Inspektor Gadget sera déployé dans le cluster. Une fois le déploiement terminé, vous pouvez explorer toutes les fonctionnalités de Inspektor Gadget dans l’environnement shell fourni.
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 ordinateurExécution du
kubectl gadget
plug-in pour installer Inspektor Gadget dans le clusterAvertissement
De nombreux mécanismes sont disponibles pour déployer et utiliser Inspektor Gadget. Chacun de ces mécanismes est adapté aux cas d’usage et 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 dekubectl gadget
déploiement. Pour plus d’informations sur ce cas d’usage et d’autres cas d’usage, consultez la documentation inspektor Gadget.
Conditions préalables
Outil en ligne de commande Kubernetes kubectl . Si vous disposez d’Azure CLI, vous pouvez exécuter la commande az aks install-cli pour installer kubectl.
Un cluster AKS. Si vous n’avez pas de cluster AKS, créez-en un à l’aide d’Azure CLI ou à l’aide de l’Portail Azure.
Gestionnaire de package krew pour les plug-ins dans kubectl. Vous pouvez suivre le guide de démarrage rapide krew pour installer ce gestionnaire de package.
Partie 1 : Installer le gadget de plug-in kubectl sur votre ordinateur
Nous vous recommandons d’installer krew
le kubectl gadget
plug-in.
Note
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 .
Note
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 la section de 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 tous deux correctement installés :
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é de contact tierce
Microsoft fournit des informations de contact tierces pour vous aider à trouver des informations supplémentaires à ce sujet. Ces informations de contact peuvent changer sans préavis. Microsoft ne garantit pas l’exactitude des informations de contact tierces.
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.