내용으로 건너뛰기

Amazon ECS 용량 공급자의 스케일링 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

Amazon Elastic Compute Cloud(Amazon EC2) 시작 유형으로 Amazon Elastic Container Service(Amazon ECS) 클러스터를 위한 용량 공급자를 만들었습니다. 하지만 용량 공급자가 예상대로 규모를 조정하지 않습니다.

간략한 설명

다음과 같은 문제로 인해 Amazon EC2 용량 공급자가 자동으로 스케일 인 또는 스케일 아웃되지 않습니다.

  • Amazon ECS 서비스를 용량 공급자와 연결하지 않았습니다.
  • Amazon EC2 Auto Scaling 그룹에 용량 공급자 조정 정책을 연결하지 않았습니다.
  • 목표 용량 백분율을 올바르게 구성하지 않았습니다.
  • 용량 공급자에 관리형 조정을 사용하고 있으며 EC2 Auto Scaling 그룹에는 사용자 지정 조정 정책이 연결되어 있습니다.
  • Amazon EC2 Auto Scaling 그룹이 컨테이너 인스턴스를 시작했지만 클러스터에 조인할 수 없습니다.
  • 컨테이너 인스턴스를 스케일 인 또는 스케일 다운할 수 없습니다.
  • 용량 공급자가 실패 상태로 멈췄습니다.
  • Auto Scaling 그룹이 스케일링 루프에서 멈췄습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

Amazon ECS 서비스를 용량 공급자와 연결했는지 확인

Amazon ECS 서비스를 용량 공급자와 연결했는지 확인하려면 다음 describe-services AWS CLI 명령을 실행합니다.

aws ecs describe-services --cluster example-cluster --services example-service --region example-region --query 'services[].capacityProviderStrategy'

참고: example-cluster을 클러스터 이름으로, example-service를 서비스 이름으로, example-region을 AWS 리전으로 바꾸십시오.

Amazon ECS 서비스를 용량 공급자와 연결한 경우 다음 예와 유사한 출력이 표시됩니다.

[  
  [
    {
      "capacityProvider": "example-capacity-provider",
      "weight": 1,
      "base": 1
    }
  ]
]

capacityProviderStrategy 값이 **[]**가 아닌지 확인하십시오.

서비스에 용량 공급자를 추가하려면 다음 update-service 명령을 실행합니다.

aws ecs update-service --cluster example-cluster --service example-service --region example-region --capacity-provider-strategy capacityProvider=capacity-provide-name,weight=weight-value,base=base-value --force-new-deployment

참고: example-cluster를 클러스터 이름으로, example-service를 서비스 이름으로, example-region을 해당 리전으로, capacity-provider-name을 용량 공급자 이름으로 바꾸십시오. 또한 weight-value를 용량 공급자를 사용하는 총 작업으로 바꾸고 base-value를 용량 공급자가 실행할 최소 작업 수로 바꾸십시오.

Amazon ECS 콘솔을 사용하여 서비스를 업데이트할 수도 있습니다.

Auto Scaling 그룹에 용량 공급자 조정 정책을 연결했는지 확인

용량 공급자를 Auto Scaling 그룹에 연결하면 Amazon ECS가 클러스터 로드를 기반으로 용량을 수정하는 조정 정책을 만듭니다.

조정 정책 문제를 해결하려면 PutScalingPolicy, UpdateAutoScalingGroup, CreateCapacityProviderUpdateCapacityProvider API 호출에 대한 AWS CloudTrail 이벤트를 검토하십시오. 정책을 Auto Scaling 그룹과 연결할 수 있고 용량 공급자가 예상대로 작동하는지 확인하십시오.

Auto Scaling 그룹이 클러스터 연결인지 확인하려면 다음 describe-cluster 명령을 실행합니다.

aws ecs describe-clusters --clusters example-cluster --include ATTACHMENTS --region example-region --query 'clusters[].attachments[]'

참고: example-cluster를 클러스터 이름으로 바꾸고 example-region을 해당 리전으로 바꾸십시오.

출력 예시:

[  
  {
    "id": "100a23456-5f0b-4abc-b998-d6789d111a",
    "type": "as_policy",
    "status": "CREATED",
    "details": [
      {
        "name": "capacityProviderName",
        "value": "example-capacityProvider"
      },
      {
        "name": "scalingPlanName",
        "value": "ECSManagedAutoScalingPlan-bb60c8fa-3ed7-4808-b39c-abcdef2345"
      }
    ]
  }
]

관리형 크기 조정 정책을 사용하는 경우 다음 단계를 수행하여 정책이 Auto Scaling 그룹에 연결되어 있는지 확인하십시오.

  1. Amazon ECS 콘솔을 엽니다.
  2. 탐색 창에서 클러스터를 선택합니다.
  3. 클러스터를 선택합니다.
  4. 인프라 탭을 선택합니다.
  5. 용량 공급자 탭을 선택합니다.
  6. Auto Scaling 그룹을 선택합니다.
    참고: 이 작업을 수행하면 Amazon EC2 콘솔의 Auto Scaling 그룹 페이지로 리디렉션됩니다.
  7. 자동 조정 탭을 선택합니다.
  8. 작업을 선택한 다음, 동적 크기 조정 정책 편집을 선택합니다.
  9. 사용자 지정 지표 JSON 필드에서 정책에 CapacityProviderReservation 지표가 포함되어 있는지 확인합니다.

목표 용량 백분율 구성 확인

용량 공급자의 CapacityProviderReservation Amazon CloudWatch 지표를 확인하여 컨테이너 인스턴스의 사용량을 추적하십시오. Auto Scaling 그룹과 연결된 대상 추적 조정 정책은 실행 중인 인스턴스의 수를 조정하여 CapacityProviderReservation이 목표 용량 값과 일치하도록 합니다. 예를 들어 목표 용량을 100%로 설정하면 Amazon ECS는 모든 인스턴스를 사용하며 작업을 실행하지 않는 인스턴스를 스케일 인합니다.

추가 용량을 설정하려면 100보다 작은 값으로 목표 용량 설정을 업데이트하십시오.

Auto Scaling 그룹에서 시작한 인스턴스가 클러스터에 조인할 수 있는지 확인

인스턴스가 클러스터에 조인할 수 없는 경우 Amazon EC2 인스턴스를 Amazon ECS 클러스터에 조인할 수 없는 이유는 무엇입니까?를 참조하십시오.

컨테이너 인스턴스가 스케일 인 또는 스케일 다운 작업에서 보호되지 않는지 확인

관리형 종료 보호를 사용하는 용량 공급자의 경우 Amazon ECS는 스케일 인 작업 중에 작업이 포함된 Amazon EC2 인스턴스의 종료를 차단합니다.

실행 중인 모든 작업을 중지하고 Auto Scaling 그룹이 EC2 인스턴스를 종료하도록 허용하려면 Amazon ECS 콘솔을 사용하여 인스턴스를 비우십시오. 또는 다음 update-container-instances-state 명령을 실행합니다.

aws ecs update-container-instances-state --cluster example-cluster --container-instances example-container --status DRAINING --region example-region

참고: examples-cluster를 클러스터 이름으로, example-container를 컨테이너 인스턴스로, example-region을 해당 리전으로 바꾸십시오.

비운 후에도 컨테이너 인스턴스에서 작업이 계속 실행되는 경우 컨테이너 인스턴스가 DRAINING으로 설정된 경우 중지하는 데 시간이 오래 걸리는 Amazon ECS 작업의 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

관리형 종료 보호 문제를 추가로 해결하려면 Amazon ECS의 용량 공급자 오류에 대한 관리형 종료 보호 설정 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.

크기 조정 보호가 인스턴스의 스케일 다운 작업을 차단하는 경우 Auto Scaling 활동 기록에 다음과 같은 오류 메시지가 표시됩니다.

"Could not scale to desired capacity because all remaining instances are protected from scale-in."

이 문제를 해결하려면 사용 중인 도구 또는 타사 도구(예: Terraform 또는 GitLab)를 확인하십시오. Auto Scaling 그룹에서 AmazonECSManaged 태그를 제거하지 않도록 하십시오. Amazon ECS에서 크기 조정을 관리하려면 이 태그가 필요합니다. AmazonECSManaged 태그가 누락되었는지 확인하려면 CloudTrail 이벤트 기록에서 SetInstanceProtection 이벤트를 확인하십시오. SetInstanceProtection이 표시되면 Auto Scaling 그룹에 태그를 다시 추가해야 합니다.

용량 공급자의 상태 확인

용량 공급자를 사용할 때는 기존 그룹을 재사용하지 않고 새 Auto Scaling 그룹을 만드는 것이 좋습니다. 기존 그룹과 연결되어 있고 Amazon ECS 클러스터에 등록된 실행 중 상태의 인스턴스는 올바르게 등록되지 않을 수 있습니다.

용량 공급자의 상태를 보려면 describe-capacity-providers 명령을 실행합니다.

aws ecs describe-capacity-providers \
--capacity-providers MyCapacityProvider

용량 공급자 상태가 INACTIVE인 경우 용량 공급자가 삭제된 것입니다.

또한 CloudTrail 이벤트를 검토하여 CreateCapacityProvider API와 관련된 오류가 있는지 확인하십시오.

Auto Scaling 그룹이 스케일링 루프에서 멈추지 않았는지 확인

Amazon ECS 서비스 조정 정책에 지정한 목표 용량이 급증하면 Auto Scaling 그룹이 스케일 아웃하고 인스턴스를 시작합니다. 그러나 갑작스러운 급증 이후 지표 값이 떨어지면 Auto Scaling 그룹은 인스턴스를 스케일 인합니다. 목표 용량이 짧은 기간 내에 자주 변동하는 경우 Auto Scaling 그룹은 스케일링 루프에서 멈춥니다. 이 문제를 방지하려면 워크로드에 맞게 목표 용량 값을 구성하십시오.

관련 정보

Amazon ECS 클러스터 오토 스케일링에 대한 심층 분석

Amazon ECS에서 용량 공급자를 삭제할 때 발생하는 오류를 해결하려면 어떻게 해야 합니까?

AWS Fargate 시작 유형을 위한 Amazon ECS 클러스터

AWS 공식업데이트됨 일 년 전
댓글 없음

관련 콘텐츠