Amazon ECS의 CPU 할당에 대해 알아야 할 사항은 무엇입니까?

최종 업데이트 날짜: 2022년 4월 15일

Amazon Elastic Container Service(Amazon ECS)의 태스크에 CPU를 할당하는 것과 관련된 정보를 찾고 있습니다.

간략한 설명

태스크 정의를 생성할 때 CPU 리소스에 대한 제한을 정의할 수 있습니다. 이러한 제한은 태스크 수준 및 컨테이너 수준에서 정의할 수 있습니다.

Amazon ECS 클러스터의 전체 성능은 이러한 제한에 따라 영향을 받습니다. Amazon ECS 동작 및 사용 사례에 따라 태스크 수준과 컨테이너 수준에서 CPU 할당 값을 조정해야 합니다. 다음 정보를 사용하여 워크로드 및 애플리케이션 요구 사항을 충족하는 CPU 할당을 결정합니다.

해결 방법

Amazon ECS는 CPU 리소스에 대해 CPU 유닛이라고 하는 표준 측정 단위를 사용합니다. 1,024개의 CPU 유닛은 vCPU 1개에 해당합니다.

예를 들어 2,048개의 CPU 유닛은 vCPU 2개와 같습니다.

참고: 태스크 정의를 정의할 때 1,024 대신 vCPU 1개를 사용할 수도 있습니다. 태스크 정의가 등록되면 ECS는 값을 단위로 변환합니다.

태스크 수준 CPU 할당

Amazon ECS 태스크는 AWS Fargate 또는 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에서 실행할 수 있습니다.

태스크 수준에서 cpu 파라미터를 설정하면 태스크의 컨테이너가 허용하는 최대 CPU 리소스 양도 설정하게 됩니다.

AWS Fargate

AWS Fargate는 요청된 리소스를 태스크에 할당하기 위해 태스크 수준에서 cpu 파라미터가 필요합니다. AWS Fargate에 사용할 수 있는 사전 정의된 태스크 크기에서 메모리cpu를 선택할 수 있습니다. AWS Fargate 개발자 가이드태스크 CPU 및 메모리 섹션에서 다양한 조합에 대해 자세히 알아볼 수 있습니다.

Amazon EC2

Amazon EC2에서 태스크를 실행하는 경우 cpu 파라미터는 선택 사항입니다.

cpu 파라미터를 정의하는 경우 다음 사항을 고려하세요.

  • 컨테이너는 정의된 cpu 양에 따라 액세스가 제한됩니다.
  • cpu 파라미터에 정의된 양은 컨테이너 인스턴스에서 예약할 태스크의 CPU 예약이 됩니다.
    참고: 컨테이너 수준 정의에서도 마찬가지입니다.

예를 들어 다음과 같은 구성으로 Amazon EC2에 정의된 cpu 파라미터는 풀에 1,024개의 CPU 유닛이 남아 있습니다.

  • ECS 클러스터에 총 2,048개의 CPU 유닛에 대한 컨테이너 인스턴스로 등록된 m5.large EC2 인스턴스입니다.
  • 태스크 수준에서 cpu: 1,024가 정의된 태스크 하나가 인스턴스에서 실행 중입니다.
  • 현재 인스턴스 EC2 CPUUtilization은 68%입니다.

현재 CPUUtilization은 컨테이너 인스턴스에서 태스크 스케줄링을 위해 사용할 수 있는 CPU 유닛 수에 영향을 주지 않습니다. 인스턴스가 사용률의 50%를 초과하더라도 풀에 있는 유닛의 절반은 새 태스크를 시작할 수 있습니다. 이는 파라미터가 CPU 예약 및 제한으로만 작동하며 CPU 사용량 자체로 직접 변환되지 않기 때문입니다.

이 예에서는 CPU만 고려할 때 발생할 수 있는 몇 가지 결과가 있습니다.

  • 태스크 수준 또는 컨테이너 수준 정의에 정의된 cpu: 512를 사용하여 두 개의 태스크를 더 예약할 수 있습니다.
  • 태스크 수준에서 cpu: 1,024를 정의하고 각 컨테이너의 컨테이너 수준에서 cpu: 512를 정의하여 두 개의 컨테이너를 사용하여 하나의 태스크를 예약할 수 있습니다.
  • cpu가 정의되지 않은 경우 선택한 네트워크 모드에 대해 ECS가 지원하는 수만큼 태스크를 예약할 수 있습니다. ECS 컨테이너 인스턴스에서 예약을 위해 사용할 수 있는 CPU 유닛은 영향을 받지 않습니다.

컨테이너 수준 CPU 할당

컨테이너 수준 cpu 정의는 다음 시나리오에서 고려됩니다.

예약 시:

  • 태스크 수준 cpu 정의가 설정되지 않은 경우 컨테이너에 정의된 총 CPU 유닛이 CPU 예약이 됩니다.
  • cpu 컨테이너 수준 정의의 총 CPU 유닛 수는 태스크 수준 할당에 정의된 CPU 유닛보다 클 수 없습니다.

런타임 시 CPU 경합이 없습니다.

  • 태스크 수준 cpu 정의가 설정된 경우 컨테이너는 태스크 수준 cpu 정의 값까지 cpu 리소스에만 액세스할 수 있습니다.
  • 태스크 수준 cpu 정의가 설정되지 않은 경우 태스크의 컨테이너는 컨테이너 수준에서 설정된 cpu 정의와 관계없이 인스턴스에서 사용 가능한 모든 CPU 리소스에 액세스할 수 있습니다.
  • Windows 태스크를 사용하고 있고 태스크 수준의 cpu가 지원되지 않는 경우 컨테이너는 항상 컨테이너 수준에서 cpu 정의로 제한됩니다.

CPU 경합은 여러 프로세스가 cpu 시간을 요청할 때 발생합니다. CPU 경합이 발생하면 컨테이너는 컨테이너 수준 정의에서 cpu에 정의된 리소스의 양으로 조절됩니다.

중요: ECS에서 실행 중인 애플리케이션이 컨테이너를 인식하는지 확인하세요. Java 10과 같은 일부 애플리케이션은 컨테이너를 인식하며 CPU 경합 여부에 관계없이 컨테이너 수준 cpu 정의에 정의된 제한만 사용합니다.

컨테이너 수준 cpu 정의는 컨테이너 원격 도커 생성 API의 CPUShares 파라미터에 직접 매핑됩니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?