Comment suivre l'ID d'instance d'un composant master Amazon EKS résilié à l'aide de son NodeName ?
Un incident a mis fin à des composants master dans mon cluster Amazon EKS, et je souhaite faire correspondre les noms des nœuds résiliés à leur identifiant d'instance.
Brève description
Dans Amazon EKS, le nom d'un nœud est enregistré et affiché à l'aide de PrivateDnsName. Ce nom suit un format similaire à ip-172-31-6-187.eu-west-1.compute.internal.
Vous pouvez utiliser le nom d'un nœud pour trouver son ID d'instance. Cependant, la commande par défaut kubectl get nodes ne renvoie pas d'ID d'instance dans sa sortie. Consultez l'exemple de sortie suivant :
NAME STATUS ROLES AGE VERSION ip-192-168-132-83.eu-west-1.compute.internal Ready <none> 37m v1.22.12-eks-ba74326 ip-192-168-96-83.eu-west-1.compute.internal Ready <none> 37m v1.22.12-eks-ba74326
Pour récupérer l'ID d'instance des composants master actifs, ajoutez des colonnes supplémentaires comme indiqué dans la commande suivante :
kubectl get nodes -o custom-columns=Name:.metadata.name,Instance:.spec.providerID
Vous recevez un résultat similaire au suivant :
Name Instance ip-192-168-104-154.eu-west-1.compute.internal aws:///eu-west-1a/i-0cb3f1ceeb038fb6c ip-192-168-157-89.eu-west-1.compute.internal aws:///eu-west-1b/i-02e80d4889b6ccffa
Toutefois, cette commande ne fonctionne pas pour les nœuds qui sont terminés.
Vous pouvez également utiliser TerminateInstances ou TerminateInstanceInAutoScalingGroup comme EventName dans AWS CloudTrail pour renvoyer l'ID de l'instance. Toutefois, ces commandes en elles-mêmes ne renvoient pas le nom d'un nœud Amazon EKS.
Par conséquent, vous devez d'abord exécuter une commande distincte pour récupérer le NodeName (PrivateDNSName) d'un nœud. Utilisez ensuite ce nom pour suivre l'ID d'instance du nœud. Pour trouver l'ID d'instance des composants master précédemment résiliés, effectuez une recherche dans les journaux du plan de contrôle Amazon EKS avec Amazon CloudWatch Logs Insights. Pour ce faire, vous devez activer la journalisation du plan de contrôle avant la terminaison du nœud. Si la journalisation du plan de contrôle n'est pas activée, utilisez CloudTrail.
Résolution
Remarque : si vous recevez des erreurs lors de l'exécution de l'interface de la ligne de commande AWS (AWS CLI), assurez-vous d'utiliser la version la plus récente d'AWS CLI.
Récupérez le NodeName pour vos nœuds
Pour les deux méthodes suivantes, vous devez connaître le NodeName d'un nœud résilié pour récupérer son ID d'instance. Pour récupérer la liste des nœuds Amazon EKS résiliés sur une période donnée, utilisez l'éditeur de requêtes CloudWatch Log Insight :
1. Ouvrez la console CloudWatch.
2. Dans le panneau de navigation, choisissez Logs (Journaux), puis Log Insights (Informations de journaux).
Remarque : Sur la page Logs Insights, l'éditeur de requêtes contient une requête par défaut qui renvoie les 20 événements de journaux les plus récents.
3. Supprimez la requête par défaut. Puis, saisissez la commande suivante :
fields @timestamp, objectRef.name as NodeName | filter @logStream like /^kube-apiserver-audit/ | filter objectRef.resource = "nodes" | filter responseStatus.code = 200 or responseStatus.code = 201 | sort @timestamp desc | filter verb like /delete/
4. Dans la liste déroulante Sélectionner les groupes de journaux, choisissez les groupes de journaux du cluster Amazon EKS que vous souhaitez interroger.
Remarque : Votre groupe de journaux ressemble à /aws/eks/cluster_name/cluster. Dans cet exemple, remplacez cluster_name par votre propre nom de cluster Amazon EKS.
5. Utilisez le sélecteur d'intervalle de temps pour sélectionner la période que vous souhaitez interroger.
6. Choisissez Run (Exécuter) pour afficher les résultats.
Vous recevez un résultat similaire au suivant :
# @timestamp NodeName 1 2023-01-23T08:03:03.062+00:00 ip-192-168-132-83.eu-west-1.compute.internal 2 2023-01-23T19:03:41.848+00:00 ip-192-168-0-141.eu-west-1.compute.internal
Utilisez CloudWatch Logs Insights pour effectuer des recherches dans les journaux du plan de contrôle Amazon EKS
Utilisez CloudWatch Logs Insights pour rechercher dans les données du journal du plan de contrôle Amazon EKS les événements qui ont enregistré le NodeName d'un nœud. Pour consulter ces journaux dans Amazon CloudWatch Logs, vous devez activer la journalisation du plan de contrôle Amazon EKS avant la fermeture du nœud, et elle doit rester activée.
Supposons, par exemple, que vous souhaitiez récupérer l'ID d'instance d'un nœud portant le nom ip-192-168-132-83.eu-west-1.compute.internal. La date de fin de ce nœud était il y a quatre jours. Vous pouvez utiliser l'une des deux requêtes pour récupérer l'ID d'instance à partir du NodeName.
Tout d'abord, procédez comme suit pour exécuter une requête CloudWatch Logs Insights :
1. Ouvrez la console CloudWatch.
2. Dans le panneau de navigation, choisissez Logs (Journaux), puis Log Insights (Informations de journaux).
Remarque : Sur la page Logs Insights, l'éditeur de requêtes contient une requête par défaut qui renvoie les 20 événements de journaux les plus récents.
3. Supprimez la requête par défaut. Entrez ensuite l'une des requêtes suivantes pour récupérer l'ID d'instance à partir du NodeName :
Requête 1
fields @timestamp, objectRef.name as NodeName, responseObject.spec.providerID as providerID | filter @message like 'ip-192-168-132-83.eu-west-1.compute.internal' and @message like 'i-' | sort responseObject.spec.providerID desc | limit 10
Requête 2
fields @timestamp, objectRef.name as NodeName, user.extra.sessionName.0 as ID | filter @message like 'ip-192-168-132-83.eu-west-1.compute.internal' and @message like 'i-' | sort user.extra.sessionName.0 desc | limit 5
4. Dans la liste déroulante Sélectionner les groupes de journaux, choisissez les groupes de journaux du cluster Amazon EKS que vous souhaitez interroger.
Remarque : Votre groupe de journaux ressemble à /aws/eks/cluster_name/cluster. Dans cet exemple, remplacez cluster_name par votre propre nom de cluster Amazon EKS.
5. Utilisez le sélecteur d'intervalle de temps pour sélectionner la période que vous souhaitez interroger.
6. Choisissez Run (Exécuter) pour afficher les résultats.
Vous recevez un résultat basé sur la requête que vous avez exécutée.
La requête 1 renvoie un résultat similaire au suivant :
# @timestamp NodeName providerID 1 2023-01-23T08:03:03.062+00:00 ip-192-168-132-83.eu-west-1.compute.internal aws:///eu-west-1a/i-06c893718d4123396
La requête 2 renvoie un résultat similaire au suivant :
# @timestamp NodeName ID 1 2023-01-22T15:00:32.637+00:00 ip-192-168-11-247.eu-west-1.compute.internal i-06c893718d4123396
Utiliser les appels d'API en tant qu'événements dans CloudTrail
Vous pouvez récupérer l'ID d'instance d'un nœud à partir de son NodeName à l'aide d'une combinaison d'appels d'API dans CloudTrail. Utilisez RunInstances et TerminateInstances comme EventName. Ces appels d'API effectuent les opérations suivantes :
TerminateInstances : permet de récupérer tous les identifiants d'instance depuis l'incident qui les a interrompus. Il contient uniquement l'ID de l'instance.
RunInstances : contient à la fois l'ID de l'instance et le NodeName.
Tout d'abord, utilisez la commande suivante pour voir tous les composants master interrompus pendant la période de l'incident que vous souhaitez auditer. Remplacez les valeurs d'heure de début et d'heure de fin pour définir la période appropriée :
% aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=EventName,AttributeValue=TerminateInstances AttributeKey=ResourceType,AttributeValue=AWS::EC2::Instance \ --start-time "January 27, 2023, 00:00:00" \ --end-time "January 27, 2023, 23:59:00" | jq '.Events [] | .CloudTrailEvent | fromjson | .responseElements | .instancesSet | .items | .[]? | {InstanceID: .instanceId, NodeName: .privateDnsName}'
Vous recevez un résultat similaire au suivant :
{ "InstanceID": "i-0926c5d4216fd934d", "NodeName": null } { "InstanceID": "i-00da28f580e28ff4f", "NodeName": null }
Utilisez la commande suivante pour récupérer le résultat de l'appel d'API RunInstances pendant la période de l'incident que vous souhaitez auditer. Remplacez les valeurs d'heure de début et d'heure de fin pour définir la période appropriée :
% aws cloudtrail lookup-events \ --lookup-attributes AttributeKey=EventName,AttributeValue=RunInstances AttributeKey=ResourceType,AttributeValue=AWS::EC2::Instance \ --start-time "January 27, 2023, 00:00:00" \ --end-time "January 27, 2023, 23:59:00" | jq '.Events [] | .CloudTrailEvent | fromjson | .responseElements | .instancesSet | .items | .[]? | {InstanceID: .instanceId, NodeName: .privateDnsName}'
Remarque : Pour obtenir les informations les plus complètes, définissez l'heure de début comme celle de la création des composants master.
Vous recevez un résultat similaire au suivant :
{ "InstanceID": "i-0926c5d4216fd934d", "NodeName": "ip-192-168-96-83.eu-west-1.compute.internal" } { "InstanceID": "i-00da28f580e28ff4f", "NodeName": "ip-192-168-132-83.eu-west-1.compute.internal" }

Contenus pertinents
- demandé il y a un moislg...
- demandé il y a 2 moislg...
- demandé il y a 2 moislg...
- demandé il y a 4 moislg...
- demandé il y a un moislg...
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 2 mois
- AWS OFFICIELA mis à jour il y a 2 mois