Résolution des problèmes de déploiement de clusters - AWS ParallelCluster

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Résolution des problèmes de déploiement de clusters

Si votre cluster ne parvient pas à être créé et annule la création de la pile, vous pouvez consulter les fichiers journaux pour diagnostiquer le problème. Le message d'échec ressemble probablement au résultat suivant :

$ pcluster create-cluster --cluster-name mycluster --region eu-west-1 \ --cluster-configuration cluster-config.yaml { "cluster": { "clusterName": "mycluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:xxx:stack/mycluster/1bf6e7c0-0f01-11ec-a3b9-024fcc6f3387", "region": "eu-west-1", "version": "3.7.0", "clusterStatus": "CREATE_IN_PROGRESS" } } $ pcluster describe-cluster --cluster-name mycluster --region eu-west-1 { "creationTime": "2021-09-06T11:03:47.696Z", ... "cloudFormationStackStatus": "ROLLBACK_IN_PROGRESS", "clusterName": "mycluster", "computeFleetStatus": "UNKNOWN", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:xxx:stack/mycluster/1bf6e7c0-0f01-11ec-a3b9-024fcc6f3387", "lastUpdatedTime": "2021-09-06T11:03:47.696Z", "region": "eu-west-1", "clusterStatus": "CREATE_FAILED" }

Afficher AWS CloudFormation les événements sur CREATE_FAILED

Vous pouvez utiliser la console ou la AWS ParallelCluster CLI pour afficher les CloudFormation événements relatifs aux CREATE_FAILED erreurs afin d'en trouver la cause première.

Afficher les événements dans la CloudFormation console

Pour obtenir plus d'informations sur la cause de ce "CREATE_FAILED" statut, vous pouvez utiliser la CloudFormation console.

Afficher les messages CloudFormation d'erreur depuis la console.
  1. Connectez-vous au AWS Management Console et accédez à https://console.aws.amazon.com/cloudformation.

  2. Sélectionnez la pile nommée cluster_name.

  3. Choisissez l'onglet Événements.

  4. Vérifiez l'état de la ressource dont la création a échoué en faisant défiler la liste des événements de ressource par ID logique. Si la création d'une sous-tâche a échoué, revenez en arrière pour trouver l'événement de ressource ayant échoué.

  5. Par exemple, si le message d'état suivant s'affiche, vous devez utiliser des types d'instances qui ne dépasseront pas votre limite de vCPU actuelle ou qui ne demanderont pas une capacité de vCPU accrue.

    2022-02-04 16:09:44 UTC-0800 HeadNode CREATE_FAILED You have requested more vCPU capacity than your current vCPU limit of 0 allows for the instance bucket that the specified instance type belongs to. Please visit http://aws.amazon.com/contact-us/ec2-request to request an adjustment to this limit. (Service: AmazonEC2; Status Code: 400; Error Code: VcpuLimitExceeded; Request ID: a9876543-b321-c765-d432-dcba98766789; Proxy: null).

Utilisez la CLI pour afficher et filtrer CloudFormation les événements sur CREATE_FAILED

Pour diagnostiquer le problème de création de clusters, vous pouvez utiliser la pcluster get-cluster-stack-events commande en filtrant par CREATE_FAILED état. Pour plus d'informations, consultez la section Filtrage AWS CLI de la sortie dans le guide de AWS Command Line Interface l'utilisateur.

$ pcluster get-cluster-stack-events --cluster-name mycluster --region eu-west-1 \ --query 'events[?resourceStatus==`CREATE_FAILED`]' [ { "eventId": "3ccdedd0-0f03-11ec-8c06-02c352fe2ef9", "physicalResourceId": "arn:aws:cloudformation:eu-west-1:xxx:stack/mycluster/1bf6e7c0-0f02-11ec-a3b9-024fcc6f3387", "resourceStatus": "CREATE_FAILED", "resourceStatusReason": "The following resource(s) failed to create: [HeadNode]. ", "stackId": "arn:aws:cloudformation:eu-west-1:xxx:stack/mycluster/1bf6e7c0-0f02-11ec-a3b9-024fcc6f3387", "stackName": "mycluster", "logicalResourceId": "mycluster", "resourceType": "AWS::CloudFormation::Stack", "timestamp": "2021-09-06T11:11:51.780Z" }, { "eventId": "HeadNode-CREATE_FAILED-2021-09-06T11:11:50.127Z", "physicalResourceId": "i-04e91cc1f4ea796fe", "resourceStatus": "CREATE_FAILED", "resourceStatusReason": "Received FAILURE signal with UniqueId i-04e91cc1f4ea796fe", "resourceProperties": "{\"LaunchTemplate\":{\"Version\":\"1\",\"LaunchTemplateId\":\"lt-057d2b1e687f05a62\"}}", "stackId": "arn:aws:cloudformation:eu-west-1:xxx:stack/mycluster/1bf6e7c0-0f02-11ec-a3b9-024fcc6f3387", "stackName": "mycluster", "logicalResourceId": "HeadNode", "resourceType": "AWS::EC2::Instance", "timestamp": "2021-09-06T11:11:50.127Z" } ]

Dans l'exemple précédent, l'échec était lié à la configuration du nœud principal.

Utiliser la CLI pour afficher les flux de journaux

Pour résoudre ce type de problème, vous pouvez répertorier les flux de journaux disponibles depuis le nœud principal pcluster list-cluster-log-streams en filtrant node-type puis en analysant le contenu des flux de journaux.

$ pcluster list-cluster-log-streams --cluster-name mycluster --region eu-west-1 \ --filters 'Name=node-type,Values=HeadNode' { "logStreams": [ { "logStreamArn": "arn:aws:logs:eu-west-1:xxx:log-group:/aws/parallelcluster/mycluster-202109061103:log-stream:ip-10-0-0-13.i-04e91cc1f4ea796fe.cfn-init", "logStreamName": "ip-10-0-0-13.i-04e91cc1f4ea796fe.cfn-init", ... }, { "logStreamArn": "arn:aws:logs:eu-west-1:xxx:log-group:/aws/parallelcluster/mycluster-202109061103:log-stream:ip-10-0-0-13.i-04e91cc1f4ea796fe.chef-client", "logStreamName": "ip-10-0-0-13.i-04e91cc1f4ea796fe.chef-client", ... }, { "logStreamArn": "arn:aws:logs:eu-west-1:xxx:log-group:/aws/parallelcluster/mycluster-202109061103:log-stream:ip-10-0-0-13.i-04e91cc1f4ea796fe.cloud-init", "logStreamName": "ip-10-0-0-13.i-04e91cc1f4ea796fe.cloud-init", ... }, ... ] }

Les deux principaux flux de log que vous pouvez utiliser pour détecter les erreurs d'initialisation sont les suivants :

  • cfn-initest le journal du cfn-init script. Vérifiez d'abord ce flux de journal. Vous verrez probablement l'Command chef failederreur dans ce journal. Regardez les lignes juste avant cette ligne pour plus de détails liés au message d'erreur. Pour plus d'informations, consultez cfn-init.

  • cloud-initest le journal de cloud-init. Si rien ne s'y trouvecfn-init, essayez ensuite de consulter ce journal.

Vous pouvez récupérer le contenu du flux de log à l'aide de l'option pcluster get-cluster-log-events (notez l'--limit 5option permettant de limiter le nombre d'événements récupérés) :

$ pcluster get-cluster-log-events --cluster-name mycluster \ --region eu-west-1 --log-stream-name ip-10-0-0-13.i-04e91cc1f4ea796fe.cfn-init \ --limit 5 { "nextToken": "f/36370880979637159565202782352491087067973952362220945409/s", "prevToken": "b/36370880752972385367337528725601470541902663176996585497/s", "events": [ { "message": "2021-09-06 11:11:39,049 [ERROR] Unhandled exception during build: Command runpostinstall failed", "timestamp": "2021-09-06T11:11:39.049Z" }, { "message": "Traceback (most recent call last):\n File \"/opt/aws/bin/cfn-init\", line 176, in <module>\n worklog.build(metadata, configSets)\n File \"/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py\", line 135, in build\n Contractor(metadata).build(configSets, self)\n File \"/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py\", line 561, in build\n self.run_config(config, worklog)\n File \"/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py\", line 573, in run_config\n CloudFormationCarpenter(config, self._auth_config).build(worklog)\n File \"/usr/lib/python3.7/site-packages/cfnbootstrap/construction.py\", line 273, in build\n self._config.commands)\n File \"/usr/lib/python3.7/site-packages/cfnbootstrap/command_tool.py\", line 127, in apply\n raise ToolError(u\"Command %s failed\" % name)", "timestamp": "2021-09-06T11:11:39.049Z" }, { "message": "cfnbootstrap.construction_errors.ToolError: Command runpostinstall failed", "timestamp": "2021-09-06T11:11:39.049Z" }, { "message": "2021-09-06 11:11:49,212 [DEBUG] CloudFormation client initialized with endpoint https://cloudformation.eu-west-1.amazonaws.com", "timestamp": "2021-09-06T11:11:49.212Z" }, { "message": "2021-09-06 11:11:49,213 [DEBUG] Signaling resource HeadNode in stack mycluster with unique ID i-04e91cc1f4ea796fe and status FAILURE", "timestamp": "2021-09-06T11:11:49.213Z" } ] }

Dans l'exemple précédent, l'échec est dû à un runpostinstall échec. Il est donc strictement lié au contenu du script bootstrap personnalisé utilisé dans le paramètre de OnNodeConfigured configuration duCustomActions.

Recréez le cluster défaillant avec rollback-on-failure

AWS ParallelCluster crée des flux de CloudWatch journaux de cluster dans des groupes de journaux. Vous pouvez consulter ces journaux dans les tableaux de bord personnalisés ou les groupes de journaux de la CloudWatch console. Pour plus d’informations, consultez Intégration avec Amazon CloudWatch Logs avec Amazon Logs et Tableau de CloudWatch bord Amazon. Si aucun flux de journal n'est disponible, l'échec peut être dû au script de démarrage CustomActions personnalisé ou à un problème lié à l'AMI. Pour diagnostiquer le problème de création dans ce cas, créez à nouveau le cluster en utilisantpcluster create-cluster, y compris le --rollback-on-failure paramètre défini surfalse. Utilisez ensuite SSH pour afficher le cluster, comme indiqué ci-dessous :

$ pcluster create-cluster --cluster-name mycluster --region eu-west-1 \ --cluster-configuration cluster-config.yaml --rollback-on-failure false { "cluster": { "clusterName": "mycluster", "cloudformationStackStatus": "CREATE_IN_PROGRESS", "cloudformationStackArn": "arn:aws:cloudformation:eu-west-1:xxx:stack/mycluster/1bf6e7c0-0f01-11ec-a3b9-024fcc6f3387", "region": "eu-west-1", "version": "3.7.0", "clusterStatus": "CREATE_IN_PROGRESS" } } $ pcluster ssh --cluster-name mycluster

Une fois connecté au nœud principal, vous devriez trouver trois fichiers journaux principaux que vous pouvez utiliser pour trouver l'erreur.

  • /var/log/cfn-init.logest le journal du cfn-init script. Vérifiez d'abord ce journal. Il est probable que vous rencontriez une erreur comme Command chef failed dans ce journal. Regardez les lignes juste avant cette ligne pour plus de détails liés au message d'erreur. Pour plus d'informations, consultez cfn-init.

  • /var/log/cloud-init.logest le journal de cloud-init. Si rien ne s'y trouvecfn-init.log, essayez ensuite de consulter ce journal.

  • /var/log/cloud-init-output.logest le résultat des commandes exécutées par cloud-init. Cela inclut la sortie decfn-init. Dans la plupart des cas, il n'est pas nécessaire de consulter ce journal pour résoudre ce type de problème.