자습서: 컨테이너 앱 크기 조정

Azure Container Apps는 일련의 선언적 크기 조정 규칙을 통해 자동 수평 크기 조정을 관리합니다. 컨테이너 앱이 스케일 아웃되면 컨테이너 앱의 새 인스턴스가 주문형으로 만들어집니다. 이러한 인스턴스를 복제본이라고 합니다.

이 자습서에서는 컨테이너 앱에 HTTP 크기 조정 규칙을 추가하고 애플리케이션 크기가 어떻게 조정되는지 관찰합니다.

필수 조건

요구 사항 지침
Azure 계정 Azure 계정이 없으면 무료 계정을 만들 수 있습니다.

계속하려면 Azure 구독에 대한 기여자 권한이 필요합니다. 자세한 내용은 Azure Portal을 사용하여 Azure 역할 할당을 참조하세요.
GitHub 계정 평가판을 가져올 수 있습니다.
Azure CLI Azure CLI를 설치합니다.

설정

CLI에서 Azure에 로그인하려면 다음 명령을 실행하고 프롬프트에 따라 인증 프로세스를 완료합니다.

az login

최신 버전의 CLI를 실행하고 있는지 확인하려면 업그레이드 명령을 실행합니다.

az upgrade

그런 다음 CLI용 Azure Container Apps 확장을 설치하거나 업데이트합니다.

Azure CLI에서 명령을 실행하거나 Azure PowerShell의 모듈에서 Az.App cmdlet을 실행할 az containerapp 때 누락된 매개 변수에 대한 오류가 발생하는 경우 최신 버전의 Azure Container Apps 확장이 설치되어 있어야 합니다.

az extension add --name containerapp --upgrade

참고 항목

2024년 5월부터 Azure CLI 확장은 기본적으로 미리 보기 기능을 더 이상 사용하도록 설정하지 않습니다. Container Apps 미리 보기 기능에 액세스하려면 .를 사용하여 Container Apps 확장을 --allow-preview true설치합니다.

az extension add --name containerapp --upgrade --allow-preview true

이제 현재 확장 또는 모듈이 설치되었으므로 Microsoft.AppMicrosoft.OperationalInsights 네임스페이스를 등록합니다.

참고 항목

Azure Container Apps 리소스가 Microsoft.Web 네임스페이스에서 Microsoft.App 네임스페이스로 마이그레이션되었습니다. 자세한 내용은 2022년 3월 Microsoft.Web에서 Microsoft.App으로 네임스페이스 마이그레이션을 참조하세요.

az provider register --namespace Microsoft.App
az provider register --namespace Microsoft.OperationalInsights

컨테이너 앱 만들기 및 배포

containerapp up 명령을 사용하여 컨테이너 앱을 만들고 배포합니다. 이 명령은 다음을 만듭니다.

  • Resource group
  • Container Apps 환경
  • Log Analytics 작업 영역

이러한 리소스가 이미 존재하는 경우 명령은 새 리소스를 만드는 대신 기존 리소스를 사용합니다.

마지막으로 이 명령은 공용 컨테이너 이미지를 사용하여 컨테이너 앱을 만들고 배포합니다.

az containerapp up \
  --name my-container-app \
  --resource-group my-container-apps \
  --location centralus \
  --environment 'my-container-apps' \
  --image mcr.microsoft.com/k8se/quickstart:latest \
  --target-port 8080 \
  --ingress external \
  --query properties.configuration.ingress.fqdn \

참고 항목

--image 매개 변수 값이 소문자인지 확인합니다.

--ingressexternal로 설정하면 컨테이너 앱에서 퍼블릭 요청을 사용할 수 있습니다.

up 명령은 컨테이너 앱의 FQDN(정규화된 도메인 이름)을 반환합니다. 이 FQDN을 텍스트 파일에 복사합니다. 이 정보는 요청 보내기 섹션에서 사용됩니다. FQDN은 다음 예와 같습니다.

https://my-container-app.icydune-96848328.centralus.azurecontainerapps.io

비율 크기 조정 규칙 추가

az containerapp update 명령을 실행하여 컨테이너 앱에 HTTP 크기 조정 규칙을 추가합니다.

az containerapp update \
	--name my-container-app \
	--resource-group my-container-apps \
    --scale-rule-name my-http-scale-rule \
    --scale-rule-http-concurrency 1

이 명령은 이름이 my-http-scale-rule이고 동시성 설정이 1인 HTTP 크기 조정 규칙을 컨테이너 앱에 추가합니다. 앱이 둘 이상의 동시 HTTP 요청을 수신하는 경우 런타임은 요청을 처리하기 위해 앱의 복제본을 만듭니다.

update 명령은 요청이 성공했는지 확인하기 위해 새 구성을 JSON 응답으로 반환합니다.

로그 출력 시작

Container Apps 런타임에서 생성된 로그를 보면 애플리케이션 크기 조정의 효과를 관찰할 수 있습니다. 로그 항목 수신을 시작하려면 az containerapp logs show 명령을 사용합니다.

az containerapp logs show \
	--name my-container-app \
	--resource-group my-container-apps \
	--type=system \
	--follow=true

show 명령은 컨테이너 앱의 시스템 로그 항목을 실시간으로 반환합니다. 다음 예와 같은 응답을 기대할 수 있습니다.

{
	"TimeStamp":"2023-08-01T16:49:03.02752",
	"Log":"Connecting to the container 'my-container-app'..."
}
{
	"TimeStamp":"2023-08-01T16:49:03.04437",
	"Log":"Successfully Connected to container:
	'my-container-app' [Revision: 'my-container-app--9uj51l6',
	Replica: 'my-container-app--9uj51l6-5f96557ffb-5khg9']"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9480811+00:00",
	"Log":"Microsoft.Hosting.Lifetime[14]"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9481264+00:00",
	"Log":"Now listening on: http://[::]:8080"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9490917+00:00",
	"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9491036+00:00",
	"Log":"Application started. Press Ctrl+C to shut down."
}
{
	"TimeStamp":"2023-08-01T16:47:31.949723+00:00",
	"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9497292+00:00",
	"Log":"Hosting environment: Production"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9497325+00:00",
	"Log":"Microsoft.Hosting.Lifetime[0]"
}
{
	"TimeStamp":"2023-08-01T16:47:31.9497367+00:00",
	"Log":"Content root path: /app/"
}

자세한 내용은 az containerapp logs를 참조하세요.

요청 보내기

새로운 bash 셸을 엽니다. 다음 명령을 실행하여 <YOUR_CONTAINER_APP_FQDN>컨테이너 앱 만들기 및 배포 섹션에서 저장한 컨테이너 앱의 정규화된 도메인 이름으로 바꿉니다.

seq 1 50 | xargs -Iname -P10 curl "<YOUR_CONTAINER_APP_FQDN>"

이러한 명령은 각각 10개 요청의 동시 일괄 처리로 컨테이너 앱에 50개 요청을 보냅니다.

명령 또는 인수 설명
seq 1 50 1부터 50까지의 숫자 시퀀스를 생성합니다.
| 파이프 연산자는 시퀀스를 xargs 명령으로 보냅니다.
xargs 지정된 URL로 curl을 실행합니다.
-Iname seq 출력에 대한 자리 표시자 역할을 합니다. 이 인수는 반환 값이 curl 명령으로 전송되는 것을 방지합니다.
curl 지정된 URL을 호출합니다.
-P10 한 번에 최대 10개의 프로세스를 실행하도록 xargs에 지시합니다.

자세한 내용은 다음 설명서를 참조하세요.

az containerapp logs show 명령을 실행한 첫 번째 셸에서 이제 출력에는 다음과 같은 하나 이상의 로그 항목이 포함됩니다.

{
	"TimeStamp":"2023-08-01 18:09:52 +0000 UTC",
	"Type":"Normal",
	"ContainerAppName":"my-container-app",
	"RevisionName":"my-container-app--9uj51l6",
	"ReplicaName":"my-container-app--9uj51l6-5f96557ffb-f795d",
	"Msg":"Replica 'my-container-app--9uj51l6-5f96557ffb-f795d' has been scheduled to run on a node.",
	"Reason":"AssigningReplica",
	"EventSource":"ContainerAppController",
	"Count":0
}

Azure Portal에서 크기 조정 보기(선택 사항)

  1. Azure Portal에 로그인합니다.
  2. 상단의 검색 창에 my-container-app을 입력합니다.
  3. 검색 결과의 리소스에서 my-container-app을 선택합니다.
  4. 왼쪽 탐색 모음에서 애플리케이션의 크기를 조정하고 크기 조정 및 복제본을 선택합니다.
  5. 크기 조정 및 복제본 페이지에서 복제본을 선택합니다.
  6. 이제 컨테이너 앱에 둘 이상의 복제본이 실행되고 있습니다.

컨테이너 앱 복제본의 스크린샷.

새 복제본을 보려면 새로 고침을 선택해야 할 수도 있습니다.

  1. 왼쪽 탐색 모음에서 모니터링을 확장하고 통계를 선택합니다.

  2. 메트릭 페이지에서 메트릭요청으로 설정합니다.

  3. 분할 적용을 선택합니다.

  4. 드롭다운을 확장하고 복제본을 선택합니다.

  5. 분할 편집을 마치려면 파란색 확인 표시 아이콘을 선택합니다.

  6. 그래프는 컨테이너 앱에서 받은 요청을 복제본으로 분할하여 보여 줍니다.

    복제본별로 분할된 요청을 보여 주는 컨테이너 앱 메트릭 그래프

  7. 기본적으로 그래프 척도는 15분 세분성으로 24시간 동안 지속되도록 설정됩니다. 규모를 선택하고 1분 세분성의 시간 세분성으로 지난 30분으로 변경합니다. 적용 버튼을 선택합니다.

  8. 그래프에서 선택하고 끌어 컨테이너 앱에서 받은 요청의 최근 증가를 강조 표시합니다.

크기가 30분이고 시간 세분성이 1분인 복제본별로 분할된 요청을 보여 주는 컨테이너 앱 메트릭 그래프의 스크린샷.

다음 컨테이너 앱에서 수신한 요청이 복제본 간에 어떻게 분할되는지 확대된 보기를 보여 주는 스크린샷.

복제본별로 분할된 요청을 확대된 보기로 보여 주는 컨테이너 앱 메트릭 그래프의 스크린샷.

리소스 정리

이 애플리케이션을 계속 사용하지 않으려면 다음 명령을 실행하여 이 자습서에서 만든 모든 리소스와 함께 리소스 그룹을 삭제합니다.

주의

다음 명령은 지정된 리소스 그룹과 그 안에 포함된 모든 리소스를 삭제합니다. 지정된 리소스 그룹에 이 자습서의 범위에 속하지 않는 리소스가 포함된 경우 해당 리소스도 삭제됩니다.

az group delete --name my-container-apps

문제가 있나요? Azure Container Apps 리포지토리에서 문제를 열어 GitHub에 알려주세요.

다음 단계