Extraction des journaux d’un nœud géré à l’aide de kubectl et S3 - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Extraction des journaux d’un nœud géré à l’aide de kubectl et S3

Découvrez comment extraire les journaux d’un nœud géré Amazon EKS disposant de l’agent de surveillance des nœuds.

Prérequis

Vérifiez que vous avez les éléments suivants :

  • Un cluster Amazon EKS existant avec l’agent de surveillance des nœuds installé. Pour de plus amples informations, consultez Activer la réparation automatique des nœuds et étudier les problèmes d’intégrité de ces derniers.

  • L’outil en ligne de commande kubectl installé et configuré pour communiquer avec votre cluster.

  • La CLI AWS installée et connectée avec des autorisations suffisantes pour créer des compartiments et des objets S3.

  • Une version récente de Python 3 installée

  • Le kit SDK AWS pour Python 3, Boto 3, installé.

Étape 1 : créer un compartiment S3 de destination (facultatif)

Si vous ne disposez pas encore d’un compartiment S3 pour stocker les journaux, créez-en un. Utilisez la commande suivante dans la CLI AWS. Le compartiment utilise par défaut la liste de contrôle d’accès private. Remplacez bucket-name par le nom unique que vous souhaitez donner à votre compartiment.

aws s3api create-bucket --bucket bucket-name

Étape 2 : créer une URL S3 pré-signée pour HTTP PUT

Amazon EKS renvoie les journaux du nœud par une opération HTTP PUT vers l’URL que vous indiquez. Dans ce tutoriel, nous allons générer une URL HTTP PUT S3 pré-signée.

Les journaux seront renvoyés sous la forme d’une archive gzip, avec l’extension .tar.gz.

Note

Vous devez utiliser l’API AWS ou un kit SDK pour créer cette URL pré-signée de téléversement S3 permettant à EKS de téléverser le fichier journal. Il n’est pas possible de créer une URL pré-signée de téléversement S3 à l’aide de la CLI AWS.

  1. Déterminez où vous souhaitez stocker les journaux dans le compartiment. Par exemple, vous pouvez utiliser 2024-11-12/logs1.tar.gz comme clé.

  2. Enregistrez le code Python suivant dans le fichier presign-upload.py. Remplacez <bucket-name> et <key>. La clé doit se terminer par .tar.gz.

    import boto3; print(boto3.client('s3').generate_presigned_url( ClientMethod='put_object', Params={'Bucket': '<bucket-name>', 'Key': '<key>'}, ExpiresIn=1000 ))
  3. Exécutez le script avec

    python presign-upload.py
  4. Notez le résultat de l’URL. Utilisez cette valeur à l’étape suivante comme http-put-destination.

Pour plus d’informations, consultez la section Génération d’une URL pré-signée pour téléverser un fichier dans la documentation du kit SDK  AWS Boto3 pour Python.

Étape 3 : créer une ressource NodeDiagnostic

Identifiez le nom du nœud à partir duquel vous souhaitez collecter les journaux.

Créez un manifeste NodeDiagnostic qui utilise le nom du nœud comme nom de la ressource et fournissant une destination URL HTTP PUT.

apiVersion: eks.amazonaws.com/v1alpha1 kind: NodeDiagnostic metadata: name: node-name spec: logCapture: destination: http-put-destination

Appliquez le fichier manifeste à votre cluster.

kubectl apply -f nodediagnostic.yaml

Vous pouvez vérifier l’état de la collecte en décrivant la ressource NodeDiagnostic :

  • Un état Success ou SuccessWithErrors indique que la tâche est terminée et que les journaux ont été téléversés vers la destination indiquée (l’état SuccessWithErrors indique que certains journaux peuvent être manquants)

  • Si l’état est Échec, vérifiez que l’URL de téléversement est bien formée et qu’elle n’a pas expiré.

kubectl describe nodediagnostics.eks.amazonaws.com/node-name

Étape 4 : télécharger des journaux depuis S3

Attendez environ une minute avant d’essayer de télécharger les journaux. Utilisez ensuite la CLI S3 pour télécharger les journaux.

# Once NodeDiagnostic shows Success status, download the logs aws s3 cp s3://bucket-name/key ./node-logs.tar.gz

Étape 5 : nettoyer la ressource NodeDiagnostic

  • Les ressources NodeDiagnostic ne sont pas supprimées automatiquement. Vous devez les supprimer manuellement après avoir récupéré les artefacts de vos journaux

# Delete the NodeDiagnostic resource kubectl delete nodediagnostics.eks.amazonaws.com/node-name