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

4분 분량
0

Amazon Elastic Container Service(Amazon ECS)에서 작업에 CPU를 할당하고 싶은데 어떻게 시작해야 할지 모르겠습니다.

간략한 설명

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

해결 방법

Amazon ECS는 CPU 리소스에 대해 CPU 단위라는 표준 측정 단위를 사용합니다. 예를 들어 1024개의 CPU 유닛은 Linux의 경우 vCPU 1개에 해당하고, 2048개의 CPU 유닛은 2 vCPU와 같습니다. 작업 정의를 정의할 때 1024 대신 vCPU 1개를 사용할 수 있습니다. 작업 정의가 등록되면 ECS는 값을 단위로 변환합니다.

참고: Windows 컨테이너의 경우 작업 수준 CPU 및 메모리 파라미터가 무시됩니다. Windows 컨테이너의 경우 컨테이너 수준 리소스를 지정하는 것이 가장 좋습니다. 자세한 내용을 알아보려면 작업 크기를 참조하세요.

작업 수준 CPU 할당

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

Linux 인스턴스의 경우 작업 수준에서 설정하는 cpu 파라미터는 해당 컨테이너의 작업에 허용된 최대 CPU 리소스도 설정합니다. 이 작업 구성에서 실행되는 컨테이너는 작업 크기로 정의된 cpu 용량만 사용할 수 있습니다.

AWS Fargate

Linux 및 Windows의 경우 요청된 리소스를 작업에 할당하려면 AWS Fargate가 작업 수준에서 cpu 파라미터를 필요로 합니다. AWS Fargate에 사용 가능한 사전 정의된 작업 크기에서 메모리cpu를 선택할 수 있습니다.

Amazon EC2

참고: Amazon EC2 Linux에서 실행되는 작업의 경우 cpu 파라미터는 선택 사항입니다.

Linux에서 cpu 파라미터를 정의하는 경우, 파라미터에는 다음과 같은 제한이 적용됩니다.

  • 컨테이너는 작업 수준에서 정의한 cpu의 양에 따라 액세스가 제한됩니다.
  • 작업 cpu 파라미터에 정의한 값은 컨테이너 인스턴스에 스케줄링된 작업의 CPU 예약이 됩니다.
  • 컨테이너에 할당된 cpu 단위는 Linux CPU 공유를 사용하여 작업 내 공유를 구현합니다. Linux CPU는 CPU 액세스 우선 순위를 결정하는 가중치 기반 메커니즘입니다.

다음 예제에서 cpu 파라미터는 Amazon EC2에서 다음과 같이 정의됩니다.

  • 총 2048개의 CPU 유닛에 대해 ECS 클러스터에 컨테이너 인스턴스로 등록된 m5.large EC2 인스턴스입니다.
  • 작업 수준 정의에 정의된 cpu: 1024가 있는 작업 하나가 인스턴스에서 실행 중입니다.
  • 현재 인스턴스의 EC2 CPUUtilization은 68% 입니다.

위의 예에서는 구성의 풀에 1024개의 CPU 유닛이 남아 있습니다.

현재 CPUUtilization은 컨테이너 인스턴스에서 작업을 예약하는 데 사용할 수 있는 CPU 유닛 수에 영향을 주지 않습니다. 인스턴스 사용률이 50% 를 초과하면 인스턴스 풀에 있는 유닛 중 절반을 새 작업을 시작할 수 있습니다. 파라미터는 CPU 예약 및 제한 역할을 하며, CPU 사용량으로 직접 변환되지는 않습니다.

위의 예제 파라미터를 보면 CPU만 고려하면 몇 가지 구성을 수행할 수 있습니다.

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

컨테이너 수준 CPU 할당

컨테이너 수준 cpu 정의는 스케줄링 시 및 CPU 경합이 없는 런타임 시 고려됩니다.

스케줄링 시

스케줄링 시 다음과 같은 컨테이너 수준 cpu 정의가 고려됩니다.

  • 작업 수준 cpu 정의가 설정되지 않은 경우, 컨테이너에 정의된 총 CPU 단위 수가 CPU 예약이 됩니다.
  • cpu 컨테이너 수준 정의의 총 CPU 단위 수는 작업 수준 할당에 정의된 CPU 단위보다 클 수 없습니다.

CPU 경합이 없는 런타임 시

다음과 같은 컨테이너 수준 cpu 정의는 CPU 경합이 없는 런타임 시 고려됩니다.

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

참고: Windows 컨테이너 인스턴스에서는 CPU 할당량이 절대 할당량으로 적용됩니다. 자세한 내용을 알아보려면 환경을 참조하세요.

Linux 컨테이너 인스턴스의 경우 컨테이너 수준 cpu 정의가 CpuShares 파라미터에 직접 매핑됩니다. 자세한 내용을 알아보려면 Docker 웹 사이트에서 컨테이너 API 생성을 참조하세요.

CPU 경합

여러 프로세스가 cpu 시간을 요청할 때 CPU 경합이 발생합니다. CPU 경합이 발생하면 컨테이너 수준 정의에서 cpu에 정의한 리소스의 양만큼 컨테이너가 병목 현상이 발생합니다.

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

관련 정보

Amazon ECS의 작업에 메모리를 할당하려면 어떻게 해야 하나요?

AWS 공식
AWS 공식업데이트됨 일 년 전