Amazon ECS 클러스터 자동 크기 조정 - Amazon Elastic Container Service

Amazon ECS 클러스터 자동 크기 조정

중요

2022년 5월 27일부터 Amazon ECS는 클러스터 Auto Scaling을 용이하게 하는 리소스를 관리하는 방법을 변경했습니다. 자세한 내용은 Amazon ECS가 클러스터 Auto Scaling 리소스를 생성하는 방식에 대한 업데이트 단원을 참조하세요.

Amazon ECS는 클러스터에 등록된 Amazon EC2 인스턴스의 스케일을 관리할 수 있습니다. 이를 Amazon ECS 클러스터 Auto Scaling이라고 합니다. 이 작업은 관리형 스케일링이 켜진 Amazon ECS Auto Scaling 그룹 용량 공급자를 사용하여 수행됩니다. 관리형 스케일링이 켜진 Auto Scaling 그룹 용량 공급자를 사용하면 Amazon ECS가 두 개의 사용자 지정 CloudWatch 지표와 Auto Scaling 그룹에 연결하는 대상 추적 조정 정책을 생성합니다. 그러면 Amazon ECS는 태스크가 클러스터에 가하는 부하를 기반으로 Auto Scaling 그룹의 스케일 인 및 스케일 아웃 작업을 관리합니다. Auto Scaling 그룹 용량 공급자에 대한 자세한 내용은 Auto Scaling 그룹 용량 공급자 섹션을 참조하세요.

참고

Amazon ECS 클러스터 Auto Scaling은 Auto Scaling 그룹 용량 공급자를 사용할 때만 지원됩니다. AWS Fargate에 호스팅되는 Amazon ECS 워크로드의 경우, AWS Fargate 용량 공급자 섹션을 참조하세요.

클러스터 Auto Scaling 작동 방식

다음은 Amazon ECS 클러스터 Auto Scaling을 사용 설정하는 데 사용되는 기본 워크플로입니다. 자세한 정보는 클러스터 Auto Scaling 켜기을 참조하십시오.

  1. Auto Scaling 그룹 생성

  2. 해당 Auto Scaling 그룹을 사용하는 용량 제공자 생성

  3. 용량 공급자에 대해 관리형 조정 켜기

  4. 용량 공급자와 클러스터 연결

클러스터와 연결된 각 Auto Scaling 그룹 용량 공급자에 대해 Amazon ECS는 다음 리소스를 생성하고 관리합니다.

  • 지표 값이 낮은 CloudWatch 경보

  • 지표 값이 높은 CloudWatch 경보

  • 대상 추적 조정 정책입니다.

    참고

    Amazon ECS에서 대상 추적 조정 정책을 생성하여 Auto Scaling 그룹에 연결합니다. 대상 추적 조정 정책을 업데이트하려면 용량 공급자가 조정 정책을 직접 업데이트하지 않고 조정 설정을 관리해야 합니다.

관리형 조정을 해제하거나 클러스터에서 용량 공급자 연결을 해제하면 Amazon ECS가 CloudWatch 지표와 대상 추적 조정 정책 리소스를 제거합니다.

다음 지표는 수행할 작업을 결정하는 데 도움이 됩니다.

  • CapacityProviderReservation - 특정 용량 공급자에 대해 사용 중인 클러스터 컨테이너 인스턴스의 백분율입니다. Amazon ECS는 이 지표를 생성합니다.

  • DesiredCapacity - Auto Scaling 그룹에 대한 용량의 양입니다.

Amazon ECS는 클러스터와 연결된 각 용량 공급자에 대해 클러스터 Auto Scaling 프로세스를 시작합니다. Amazon ECS는 매 분마다 Auto Scaling 그룹을 확장 또는 축소해야 하는지 여부를 결정하는 정보를 수집합니다. 시작된 작업을 사용 가능한 인스턴스에 배치할 수 없는 경우 Auto Scaling 그룹은 새 인스턴스를 시작하여 확장됩니다. 작업이 없는 실행 중인 인스턴스가 있는 경우 Auto Scaling 그룹은 실행 중인 작업이 없는 인스턴스를 종료하여 축소됩니다.

Amazon ECS은 CapacityProviderReservation 지표를 시작한 다음 지표를 AWS/ECS/ManagedScaling 네임스페이스의 CloudWatch에 게시합니다. CapacityProviderReservation 지표를 사용하면 다음 작업 중 하나가 발생합니다.

  • CapacityProviderReservation 값이 100%와 같음 - 모든 컨테이너 인스턴스가 하나 이상의 데몬이 아닌 작업을 실행하고 있기 때문에 Auto Scaling 그룹이 축소 또는 확대할 필요가 없습니다.

  • CapacityProviderReservation 값이 100% 보다 큼 - 시작된 작업에 사용할 수 있는 인스턴스가 없습니다. CapacityProviderReservation 지표는 CloudWatch 경보를 생성합니다. 이 경보는 Auto Scaling 그룹에 대한 DesiredCapacity 값을 업데이트합니다. Auto Scaling 그룹은 이 값을 사용하여 EC2 인스턴스를 시작한 다음 클러스터에 등록합니다.

  • CapacityProviderReservation값이 100% 보다 작음 - 데몬이 아닌 작업을 실행하지 않는 컨테이너 인스턴스가 하나 이상 있습니다. CapacityProviderReservation 지표는 CloudWatch 경보를 생성합니다. 이 경보는 Auto Scaling 그룹에 대한 DesiredCapacity 값을 업데이트합니다. Auto Scaling 그룹은 이 값을 사용하여 EC2 컨테이너 인스턴스를 종료한 다음 클러스터에서 등록을 취소합니다.

클러스터 Auto Scaling 고려 사항

클러스터 Auto Scaling을 사용할 때는 다음 사항을 고려해야 합니다.

  • 용량 공급자와 연결된 Auto Scaling 그룹에 권장하는 용량은 Amazon ECS에서 관리하는 조정 정책 외에 다른 조정 정책으로 변경하거나 관리해서는 안 됩니다.

  • Amazon ECS는 사용자를 대신하여 다른 AWS Auto Scaling를 호출하는 데 필요한 권한에 대해 AWSServiceRoleForECS 서비스 연결 IAM 역할을 사용합니다. Amazon ECS 서비스 연결 IAM 역할을 사용하고 생성하는 방법에 대한 자세한 내용은 Amazon ECS용 서비스 연결 역할를 참조하세요.

  • Auto Scaling 그룹으로 용량 공급자를 사용하는 경우 용량 공급자를 생성하는 IAM 사용자는 Amazon ECS가 용량 공급자와 연결할 때 Auto Scaling 그룹에 태그를 추가하기 때문에 autoscaling:CreateOrUpdateTags 권한이 필요합니다.

    중요

    사용하는 도구가 Auto Scaling 그룹에서 AmazonECSManaged 태그를 제거하지 않는지 확인합니다. 이 태그가 제거되면 Amazon ECS가 클러스터를 조정할 때 태그를 관리할 수 없습니다.

  • 클러스터 Auto Scaling은 그룹에 대해 최소 용량(MinimumCapacity) 또는 최대 용량(MaximumCapacity)을 수정하지 않습니다. 그룹을 확장하려면 최대 용량(MaximumCapacity)이 0보다 커야 합니다.

  • 오토 스케일링(관리형 조정)이 켜져 있을 때 한 번에 하나의 클러스터에만 용량 공급자를 연결할 수 있습니다. 용량 공급자가 관리형 크기 조정을 해제한 경우 이를 여러 클러스터와 연결할 수 있습니다.

  • 관리형 조정이 꺼져 있으면 용량 공급자가 스케일 인 또는 스케일 아웃 작업을 수행하지 않습니다. 이 경우 용량 공급자 전략을 사용하여 용량 공급자 간에 태스크의 균형을 조정할 수 있습니다.

  • Amazon ECS는 현재 시간에 기존 용량으로 배치 전략 및 배치 제약을 사용합니다. 배치 전략은 가용 영역 또는 Amazon ECS 인스턴스 전체에 작업을 분산할 수 있습니다. 이는 결국 모든 작업이 모든 인스턴스를 분산시켜 실행 중인 각 작업이 자체 전용 인스턴스에서 시작됩니다. 이 동작을 방지하려면 spread 전략과 함께 binpack 전략을 사용하면 안 됩니다. 자세한 정보는 Amazon ECS 작업 배치 전략을 참조하십시오.

새 콘솔 사용 시 다음 사항을 고려해야 합니다.

  • Amazon ECS 관리형 크기 조정 기능은 기본적으로 설정되어 있습니다. 자세한 정보는 관리형 확장 동작을 참조하십시오.

  • 관리형 종료는 기본적으로 해제되어 있습니다.

  • Auto Scaling 인스턴스 축소 보호는 기본적으로 해제되어 있습니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서인스턴스 축소 보호 사용을 참조하세요.

  • 용량 공급자와 함께 사용되는 Auto Scaling 그룹에는 인스턴스 가중치 설정이 있을 수 없습니다. Amazon ECS 용량 공급자와 함께 사용 시 인스턴스 가중치가 지원되지 않습니다.

관리형 종료 방지

Auto Scaling 인스턴스 확장 보호는 종료할 수 있는 EC2 인스턴스를 제어합니다. 축소 기능이 설정된 인스턴스는 축소 프로세스 중에 종료할 수 없습니다. 관리형 종료 보호는 Amazon ECS가 데몬이 아닌 Amazon ECS 태스크를 실행하고 있지 않은 EC2 인스턴스만 종료한다는 것을 의미합니다. 관리형 종료 보호를 사용하는 경우 Amazon ECS는 먼저 Auto Scaling 그룹의 EC2 인스턴스에 대해 축소 보호 옵션을 사용 설정한 다음 인스턴스에 작업을 배치합니다. 인스턴스에서 모든 데몬이 아닌 작업이 중지되면 Amazon ECS는 축소 프로세스를 시작하고 EC2 인스턴스에 대한 축소 보호를 해제합니다. 그러면 Auto Scaling 그룹에서 인스턴스를 종료할 수 있습니다.

관리형 종료 보호 고려 사항

관리형 종료 방지를 새 콘솔에서 사용할 때는 다음을 고려하세요.

  • Auto Scaling 그룹은 관리형 인스턴스 보호와 관리형 크기 조정을 사용하기 위해 자동으로 구성됩니다.

  • Auto Scaling 인스턴스 축소 보호는 기본적으로 해제되어 있습니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서인스턴스 축소 보호 사용을 참조하세요.

관리형 확장 동작

관리형 크기 조정을 사용하는 Auto Scaling 그룹 용량 공급자가 있는 경우 Amazon ECS에서는 클러스터에 추가할 인스턴스의 최적 개수에 하한을 추정하고 이 값을 사용하여 요청할 인스턴스 수를 결정합니다. 관리형 확장에 대한 자세한 설명은 아래와 같습니다.

  1. 각 그룹에 똑같은 리소스 요구 사항이 적용되도록 모든 프로비저닝 태스크를 그룹화합니다.

  2. 그룹에서 여러 인스턴스 유형을 사용하는 경우 오토 스케일링의 인스턴스는 vCPU, 메모리, 탄력적 네트워크 인터페이스(ENI), 포트, GPU 등의 파라미터를 기준으로 정렬됩니다. 각 파라미터의 가장 작은 인스턴스 유형과 가장 큰 인스턴스 유형이 선택됩니다.

  3. 각 작업 그룹에 대해 Amazon ECS는 배치되지 않은 작업을 실행하는 데 필요한 인스턴스 개수를 계산합니다. 이 계산은 binpack 전략을 사용하는데, 태스크의 vCPU, 메모리, 탄력적 네트워크 인터페이스(ENI), 포트, GPU 요구 사항과 Amazon EC2 인스턴스의 리소스 가용성을 고려합니다. 가장 큰 인스턴스 유형의 값은 계산된 최대 인스턴스 개수로 처리됩니다. 가장 작은 인스턴스 유형에 대한 값은 보호로 사용됩니다. 가장 작은 인스턴스 유형이 태스크의 인스턴스를 하나 이상 실행할 수 없는 경우 계산에서 태스크를 호환되지 않는 것으로 간주하고 스케일 아웃 계산에서 태스크가 제외됩니다. 모든 태스크가 가장 작은 인스턴스 유형과 호환되지 않으면 클러스터 오토 스케일링이 중지되고 CapacityProviderReservation 값은 100%로 유지됩니다.

  4. Amazon ECS는 계산된 최대 인스턴스 개수가 최소 스케일링 단계 크기보다 작거나 maximumScalingStepSize 또는 계산된 최대 인스턴스 개수 중 더 작은 값인 경우 minimumScalingStepSize와 관련하여 CapacityProviderReservation 지표를 CloudWatch에 게시합니다.

  5. CloudWatch 경보는 용량 공급자에 대한 CapacityProviderReservation 지표(Amazon ECS에서 게시)를 사용하며, 값이 targetCapacity 값보다 큰 경우에만 Auto Scaling 그룹의 DesiredCapacity을(를) 높입니다. targetCapacity 값은 클러스터 오토 스케일링 활성화 단계에서 CloudWatch 경보로 전송되는 용량 공급자 설정입니다.

    Auto Scaling 그룹을 생성하거나 그룹을 생성한 후 이를 수정할 때 targetCapacity을(를) 설정할 수 있습니다. 기본값은 100%입니다.

  6. Auto Scaling 그룹은 추가 EC2 인스턴스를 시작합니다. 확장 작업의 오버프로비저닝을 방지하기 위해, Auto Scaling은 최근에 시작된 EC2 인스턴스 용량이 새 인스턴스를 시작하기 전에 안정화되었는지 확인합니다. 오토 스케일링은 모든 기존 인스턴스가 instanceWarmupPeriod(이제 인스턴스 시작 시간을 뺀 시간)를 통과했는지 확인합니다. instanceWarmupPeriod 내에 인스턴스가 있는 경우 그 시간까지 스케일 아웃이 차단됩니다.

    새로 시작된 인스턴스의 기본 워밍업 시간은 300초입니다.

이 로직의 작동 원리에 대한 자세한 내용은 Amazon ECS 클러스터 자동 크기 조정에 대한 자세한 설명을 참조하세요.

확장 고려 사항

확장 프로세스에 대해 다음 사항을 고려하세요.

  1. 여러 배치 제약이 있지만 distinctInstance 작업 배치 제약만 사용하는 것을 권장합니다. 이는 샘플링된 인스턴스와 호환되지 않는 배치 제약 조건을 사용하기 때문에 확장 프로세스가 중지되지 않습니다.

  2. 관리형 확장은 Auto Scaling 그룹에서 동일하거나 유사한 인스턴스 유형을 사용해야 가장 효과적입니다. 자세한 정보는 관리형 확장 동작을 참조하십시오.

  3. 확장 프로세스가 필요하고 사용 가능한 컨테이너 인스턴스가 없고, 컨테이너 인스턴스를 사용할 수 있게 되면 Amazon ECS는 항상 200%(인스턴스 2개)로 확장합니다.

  4. instanceWarmupPeriod은(는) 두 번째 확장 단계가 instanceWarmupPeriod 시간이 만료될 때까지 기다려야 하기 때문에 전체 크기 조정 제한에 영향을 줄 수 있습니다. 이 시간을 줄여야 하는 경우 EC2 인스턴스가 Amazon ECS 에이전트(오버 프로비저닝 방지)를 시작하고 시작할 수 있을 만큼 값이 충분히 커야 합니다.

  5. 클러스터 Auto Scaling은 용량 공급자 Auto Scaling 그룹에서 Launch Configuration, Launch Templates 및 여러 인스턴스 유형을 지원합니다. 또한 여러 인스턴스 유형 없이 속성 기반 인스턴스 유형 선택을 사용할 수도 있습니다.

  6. Auto Scaling 그룹과 온디맨드 인스턴스, 여러 인스턴스 유형 또는 스팟 인스턴스를 사용할 경우 우선순위 목록에서 용량이 큰 인스턴스 유형을 높은 순위에 올리고 가중치를 지정하지 않습니다. 현재는 가중치 지정을 지원하지 않습니다. 자세한 내용은 AWS Auto Scaling 사용 설명서여러 인스턴스 유형을 제공하는 Auto Scaling 그룹을 참조하세요.

  7. 그러면 Amazon ECS가 계산된 인스턴스 최댓값이 최소 확장 단계 크기보다 작을 경우 minimumScalingStepSize를 시작하고, 그렇지 않으면 maximumScalingStepSize 또는 계산된 인스턴스 개수의 최댓값 중 작은 개수를 시작합니다.

  8. Amazon ECS 서비스인 경우 또는 run-task API가 작업을 시작하고 용량 공급자 컨테이너 인스턴스에 작업을 시작하기에 충분한 리소스가 없는 경우 Amazon ECS는 각 클러스터에 대해 이 상태의 작업 수를 제한하고 이 제한을 초과하여 작업이 실행되지 않도록 합니다. 자세한 정보는 Amazon ECS 서비스 할당량을 참조하십시오.

관리형 축소 동작

Amazon ECS는 클러스터 내의 각 용량 공급자에 대한 컨테이너 인스턴스를 모니터링합니다. 하나 이상의 컨테이너 인스턴스에 실행 중인 작업이 하나 이상 없으면 비어 있는 것으로 간주되어 Amazon ECS가 축소 프로세스를 시작합니다. 다음은 관리형 축소 동작에 대해 자세히 설명합니다.

  1. Amazon ECS는 빈 컨테이너 인스턴스의 수를 계산합니다. 실행 중인 데몬 작업이 없는 경우 컨테이너 인스턴스는 비어 있는 것으로 간주됩니다.

  2. Amazon ECS는 CapcityProviderReservation 값을 100(빈 컨테이너 인스턴스의 수)으로 설정합니다. 예를 들어 빈 컨테이너 인스턴스 수가 2인 경우 값은 98%로 설정됩니다. Amazon ECS는 CloudWatch에 지표를 게시합니다.

  3. CapacityProviderReservation 지표는 CloudWatch 경보를 생성합니다. 이 경보는 Auto Scaling 그룹에 대한 DesiredCapacity 값을 업데이트합니다. 다음 작업 중 하나가 발행합니다.

    • 용량 제공자 관리형 종료를 사용하지 않는 경우 Auto Scaling 그룹은 Auto Scaling 그룹 수를 종료하고 이는 DesiredCapacity에 도달할 EC2 인스턴스 수를 종료합니다. 그런 다음 컨테이너 인스턴스가 클러스터에서 등록 취소됩니다.

    • 모든 컨테이너 인스턴스가 용량 공급자 관리형 종료 보호를 사용하는 경우 Amazon ECS는 데몬이 아닌 작업이 실행되고 있지 않은 컨테이너 인스턴스에 대한 축소 보호를 제거합니다. 그러면 Auto Scaling 그룹에서 EC2 인스턴스를 종료할 수 있습니다. 그런 다음 컨테이너 인스턴스가 클러스터에서 등록 취소됩니다.

축소 고려 사항

축소 프로세스에 대해 다음 사항을 고려하세요.

  • Amazon ECS 컨테이너 인스턴스는 실행 중인 데몬이 아닌 작업이 없을 때 축소에 사용할 수 있는 것으로 간주됩니다.

  • CloudWatch 축소 경보에는 Auto Scaling 그룹의 축소 프로세스가 시작되기 전에 15데이터 포인트(15분)가 필요합니다. Amazon ECS가 등록된 컨테이너 인스턴스의 수를 줄여야 할 때까지 축소 프로세스가 시작된 후, Auto Scaling 그룹은 DesireCapacity 값을 인스턴스 1개보다 크고 매분 10% 미만으로 설정합니다.

  • 축소 프로세스가 진행 중인 동안 Amazon ECS가 확장을 요청하는 경우(CapcityProviderReservation은(는) 100보다 큼) 축소 프로세스가 중지되고 필요한 경우 처음부터 시작됩니다.

대상 추적 고려 사항

관리형 확장이 켜져 있는 용량 공급자를 생성하거나 업데이트할 때, targetCapacity 값을 지정하면 Auto Scaling 그룹이 더 많은 인스턴스를 시작할 때까지 기다리지 않고 향후 작업을 더 빠르게 시작할 수 있습니다. Amazon ECS는 목표 용량 값을 사용하여 서비스가 클러스터 Auto Scaling을 용이하게 하기 위해 생성하는 CloudWatch 지표를 관리합니다. Amazon ECS에서 CloudWatch 지표를 관리하므로 Auto Scaling 그룹이 안정 상태로 처리돼서 크기 조정 작업이 필요하지 않습니다. 값은 0~100%가 될 수 있습니다. 예를 들어, Amazon ECS 작업에서 사용하는 용량 외에 10%의 여유 용량을 유지하도록 Amazon ECS를 구성하려면 대상 용량 값을 90%로 설정합니다.

용량 공급자에 대한 targetCapacity를 설정할 때는 다음 사항을 고려해야 합니다.

  • 100% 미만의 targetCapacity 값은 클러스터에 있어야 하는 사용 가능한 용량(Amazon EC2 인스턴스)의 양을 나타냅니다. 여유 용량은 실행 중인 작업이 없음을 의미합니다.

  • 추가 binpack이(가) 없는 가용 영역과 같은 배치 제약 조건은 Amazon ECS가 최종적으로 인스턴스당 하나의 작업을 실행하도록 강제하며, 이는 원하는 동작이 아닐 수 있습니다. 이 동작을 방지하려면 spread 전략과 함께 binpack 전략을 사용하면 안 됩니다.

Amazon ECS가 클러스터 Auto Scaling 리소스를 생성하는 방식에 대한 업데이트

2022년 5월 27일부터 Amazon ECS는 클러스터 Auto Scaling을 용이하게 하는 리소스를 관리하는 방법을 변경했습니다. Auto Scaling 그룹 용량 공급자에서 관리형 조정이 사용 설정된 경우 Amazon ECS는 경험을 단순화하기 위해 더 이상 AWS Auto Scaling 조정 계획이 필요하지 않습니다. 이 변경 사항은 클러스터 Auto Scaling 워크플로에 기능적으로 영향을 주지 않으며 가격이나 성능에 영향을 미치지 않습니다.

2022년 5월 27일 이전에 생성되었으며 AWS Auto Scaling 조정 계획을 사용 중인 용량 제공자는 이전과 같이 계속 작동합니다.

다음과 같은 고려 사항을 검토합니다.

  • 용량 공급자와 연결된 ECS-managed AWS Auto Scaling 조정 계획이나 조정 정책 리소스를 업데이트하거나 삭제하지 않는 것이 좋습니다.

  • Auto Scaling 콘솔과 첨부 파일이 있는 describe-clusters를 통해 클러스터에 대한 조정 계획 리소스에 액세스할 수 있습니다. 자세한 내용은 API 설명서 DescribeClusters를 참조하세요.

  • 클러스터 용량 제공자 역할을 하는 Auto Scaling 그룹에 조정 정책이 없어야 합니다.

  • 계정당 Auto Scaling 플랜의 수는 제한되어 있습니다. 자세한 내용은 Amazon EC2 Auto Scaling 사용 설명서크기 조정 플랜에 대한 할당량을 참조하세요.

2022년 5월 27일부터 Amazon ECS는 더 이상 새로 생성된 용량 공급자를 위한 AWS Auto Scaling 조정 계획을 생성하지 않습니다. 대신 Amazon ECS는 Auto Scaling 그룹에 연결된 대상 추적 조정 정책을 사용하여 목표 용량 사양에 따라 동적 조정을 수행합니다. 자세한 정보는 Auto Scaling 그룹 용량 공급자을 참조하십시오.

이제 이 간소화된 환경을 통해 새 용량 공급자를 생성할 때 사용할 조정 정책과 기존 Auto Scaling 그룹을 활용할 수 있습니다. ECS 관리형 조정 정책(또는 계획) 리소스는 수정하지 않는 것이 좋습니다. 그러나 새 용량 공급자 리소스를 생성할 때 AWS Auto Scaling 조정 계획을 수정한 툴링을 사용자 정의한 경우 다음 중 하나를 수행합니다.

  • (권장) 용량 공급자를 업데이트하여 Amazon ECS 관리형 조정 설정을 수정합니다. 자세한 내용은 UpdateCapacityProvider를 참조하세요.

  • Auto Scaling 그룹과 연결된 조정 정책을 업데이트하여 사용된 대상 추적 구성을 수정합니다. 자세한 내용은 PutScalingPolicy를 참조하세요.