클러스터 배포 문제 해결 - AWS ParallelCluster

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

클러스터 배포 문제 해결

클러스터 생성에 실패하고 스택 생성을 롤백하는 경우 로그 파일을 살펴보고 문제를 진단할 수 있습니다. 실패 메시지는 다음 출력과 같을 수 있습니다.

$ 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" }

에서 AWS CloudFormation 이벤트 보기 CREATE_FAILED

콘솔 또는 AWS ParallelCluster CLI를 사용하여 CREATE_FAILED 오류 CloudFormation 이벤트를 확인하여 근본 원인을 찾을 수 있습니다.

콘솔에서 CloudFormation 이벤트 보기

"CREATE_FAILED"상태 발생의 원인에 대한 자세한 내용을 보려면 CloudFormation 콘솔을 사용할 수 있습니다.

콘솔에서 CloudFormation 오류 메시지를 볼 수 있습니다.
  1. 에 AWS Management Console 로그인하고 https://console.aws.amazon.com/cloudformation 으로 이동합니다.

  2. 이름이 cluster_name인 스택을 선택합니다.

  3. 이벤트 탭을 선택합니다.

  4. 논리적 ID별로 리소스 이벤트 목록을 스크롤하여 생성에 실패한 리소스의 상태를 확인합니다. 하위 작업을 만들지 못한 경우 역방향으로 진행하여 실패한 리소스 이벤트를 찾아보세요.

  5. 예를 들어, 다음 상태 메시지가 표시되면 현재 vCPU 한도를 초과하지 않는 인스턴스 유형을 사용하거나 vCPU 용량을 더 요청해야 합니다.

    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).

CLI를 사용하여 이벤트를 보고 CloudFormation 필터링할 수 있습니다. CREATE_FAILED

클러스터 생성 문제를 진단하려면 CREATE_FAILED 상태를 필터링하여 pcluster get-cluster-stack-events 명령을 사용할 수 있습니다. 자세한 내용은 AWS Command Line Interface 사용 설명서의 AWS CLI 출력 필터링을 참조하십시오.

$ 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" } ]

이전 예제에서는 헤드 노드 설정에 장애가 발생했습니다.

CLI를 사용하여 로그 스트림을 볼 수 있습니다.

이러한 문제를 디버깅하려면 pcluster list-cluster-log-streams으로 node-type를 필터링한 다음 로그 스트림 콘텐츠를 분석하여 헤드 노드에서 이용 가능한 로그 스트림을 나열하는 방법이 있습니다.

$ 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", ... }, ... ] }

초기화 오류를 찾는 데 사용할 수 있는 두 가지 기본 로그 스트림은 다음과 같습니다.

  • cfn-initcfn-init 스크립트의 로그입니다. 먼저 이 로그 스트림을 확인합니다. 이 로그에서 Command chef failed 오류를 확인할 수 있을 것입니다. 오류 메시지와 관련된 자세한 내용은 이 라인 바로 앞에 있는 라인을 참조하세요. 자세한 내용은 cfn-init을 참조하세요.

  • cloud-initcloud-init에 대한 로그입니다. cfn-init에 아무것도 표시되지 않으면 다음으로 이 로그를 확인해 보세요.

pcluster get-cluster-log-events을 사용하여 로그 스트림의 콘텐츠를 검색할 수 있습니다(검색되는 이벤트 수를 제한하는 --limit 5 옵션 참고).

$ 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" } ] }

이전 예제에서 실패는 runpostinstall 실패로 인해 발생했으므로 이 오류는 CustomActionsOnNodeConfigured 구성 파라미터에 사용된 사용자 지정 부트스트랩 스크립트의 내용과 엄격하게 관련되어 있습니다.

rollback-on-failure을 사용하여 실패한 클러스터를 다시 생성합니다.

AWS ParallelCluster 로그 그룹에 클러스터 CloudWatch 로그 스트림을 생성합니다. CloudWatch 콘솔 사용자 지정 대시보드 또는 로그 그룹에서 이러한 로그를 볼 수 있습니다. 자세한 내용은 Amazon CloudWatch Logs와 통합Amazon CloudWatch 대시보드 섹션을 참조하세요. 사용 가능한 로그 스트림이 없는 경우 CustomActions 사용자 지정 부트스트랩 스크립트 또는 AMI 관련 문제로 인해 오류가 발생할 수 있습니다. 이 경우 생성 문제를 진단하려면 false로 설정된 --rollback-on-failure 파라미터를 포함하여 pcluster create-cluster를 사용하여 클러스터를 다시 생성하세요. 그 후 다음과 같이 SSH를 사용하여 클러스터를 확인합니다.

$ 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

헤드 노드에 로그인한 후에는 오류를 찾는 데 사용할 수 있는 세 개의 기본 로그 파일을 찾을 수 있습니다.

  • /var/log/cfn-init.logcfn-init 스크립트의 로그입니다. 먼저 이 로그를 확인하세요. 이 로그에서 Command chef failed 같은 오류가 표시될 수 있습니다. 오류 메시지와 관련된 자세한 내용은 이 라인 바로 앞에 있는 라인을 참조하세요. 자세한 내용은 cfn-init을 참조하세요.

  • /var/log/cloud-init.logcloud-init에 대한 로그입니다. cfn-init.log에 아무것도 표시되지 않으면 다음으로 이 로그를 확인해 보세요.

  • /var/log/cloud-init-output.logcloud-init이 실행한 명령의 출력입니다. 여기에는 cfn-init의 출력이 포함됩니다. 대부분의 경우 이러한 유형의 문제를 해결하기 위해 이 로그를 볼 필요가 없습니다.