자습서: Azure Container Apps에서 고가용성 유레카 서버 구성 요소 클러스터 만들기
이 자습서에서는 장애와 높은 수요에도 불구하고 작동을 유지하도록 설계된 유레카 서비스를 만드는 방법을 알아봅니다. 가용성이 뛰어난 유레카 서비스를 빌드하면 수요에 관계없이 클라이언트가 항상 서비스 레지스트리를 사용할 수 있습니다.
유레카의 고가용성 상태를 달성하려면 여러 유레카 서버 인스턴스를 연결하여 클러스터를 형성해야 합니다. 클러스터는 한 유레카 서버에 장애가 발생하더라도 다른 서비스는 요청에 계속 사용할 수 있도록 리소스를 제공합니다.
이 자습서에서는 다음을 수행합니다.
- Spring 구성 요소를 위한 유레카 서버를 만듭니다.
- Spring 구성 요소를 위한 두 개의 유레카 서버를 클러스터로 연결합니다.
- 고가용성 서비스 검색을 위해 두 유레카 서버에 애플리케이션을 연결합니다.
필수 조건
고려 사항
Azure Container Apps에서 관리 Java 구성 요소를 실행할 때 다음 세부 정보에 유의해야 합니다.
Item | 설명 |
---|---|
범위 | 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다. |
크기 조정 | 구성 요소의 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicas 및 maxReplicas 은(는) 모두 1 (으)로 설정됩니다. |
리소스 | 구성 요소에 대한 컨테이너 리소스 할당은 고정되어 있습니다. CPU 코어 수는 0.5이고 메모리 크기는 1Gi입니다. |
가격 책정 | 구성 요소 청구는 사용량 기반 가격 책정에 속합니다. 관리 구성 요소에서 소비한 리소스는 활성/유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다. |
바인딩 | 컨테이너 앱은 바인딩을 통해 구성 요소에 연결됩니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정되면 컨테이너 앱은 환경 변수에서 구성 값을 읽고 구성 요소에 연결할 수 있습니다. |
설정
다음 단계에 따라 유레카 서비스 클러스터를 만듭니다.
애플리케이션 구성 값을 보관하는 변수를 만듭니다.
export LOCATION=eastus export RESOURCE_GROUP=my-services-resource-group export ENVIRONMENT=my-environment export EUREKA_COMPONENT_FIRST=eureka01 export EUREKA_COMPONENT_SECOND=eureka02 export APP_NAME=sample-service-eureka-client export IMAGE="mcr.microsoft.com/javacomponents/samples/sample-service-eureka-client:latest"
Azure CLI를 사용하여 Azure에 로그인합니다.
az login
리소스 그룹을 만듭니다.
az group create --name $RESOURCE_GROUP --location $LOCATION
Container Apps 환경을 만듭니다.
az containerapp env create \ --name $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --location $LOCATION
클러스터 생성
다음으로, 두 개의 유레카 서버 인스턴스를 만들고 이를 클러스터로 연결합니다.
Spring 구성 요소를 위한 유레카 서버 두 개를 만듭니다.
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_FIRST
az containerapp env java-component eureka-server-for-spring create \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_SECOND
구성 요소를 함께 바인딩
유레카 서버가 고가용성 구성으로 작동하려면 함께 연결해야 합니다.
첫 번째 유레카 서버를 두 번째 서버에 연결합니다.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_FIRST \ --bind $EUREKA_COMPONENT_SECOND
두 번째 유레카 서버를 첫 번째 서버에 연결합니다.
az containerapp env java-component eureka-server-for-spring update \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_SECOND \ --bind $EUREKA_COMPONENT_FIRST
애플리케이션 배포 및 바인딩
서버 구성 요소를 연결하면 컨테이너 앱을 만들고 이를 두 개의 유레카 구성 요소에 바인딩할 수 있습니다.
컨테이너 앱을 만듭니다.
az containerapp create \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --environment $ENVIRONMENT \ --image $IMAGE \ --min-replicas 1 \ --max-replicas 1 \ --ingress external \ --target-port 8080
컨테이너 앱을 첫 번째 유레카 서버 구성 요소에 바인딩합니다.
az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $EUREKA_COMPONENT_FIRST
컨테이너 앱을 두 번째 유레카 서버 구성 요소에 연결합니다.
az containerapp update \ --name $APP_NAME \ --resource-group $RESOURCE_GROUP \ --bind $EUREKA_COMPONENT_SECOND
대시보드 보기
Important
대시보드를 보려면 관리 환경 리소스에서 계정에 최소한 Microsoft.App/managedEnvironments/write
역할이 할당되어 있어야 합니다. 리소스에 대한 Owner
또는 Contributor
역할을 명시적으로 할당하거나 단계에 따라 사용자 지정 역할 정의를 만들고 이를 계정에 할당할 수 있습니다.
사용자 지정 역할 정의를 만듭니다.
az role definition create --role-definition '{ "Name": "Java Component Dashboard Access", "IsCustom": true, "Description": "Can access managed Java Component dashboards in managed environments", "Actions": [ "Microsoft.App/managedEnvironments/write" ], "AssignableScopes": ["/subscriptions/<SUBSCRIPTION_ID>"] }'
AssignableScopes
값의<>
대괄호 사이에 있는 자리 표시자를 구독 ID로 바꿔야 합니다.관리 환경 리소스의 계정에 사용자 지정 역할을 할당합니다.
관리 환경의 리소스 ID를 가져옵니다.
export ENVIRONMENT_ID=$(az containerapp env show \ --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \ --query id \ --output tsv)
사용자의 계정에 역할을 할당합니다.
이 명령을 실행하기 전에
<>
대괄호 사이의 자리 표시자를 사용자 또는 서비스 주체 ID로 바꿉니다.az role assignment create \ --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \ --role "Java Component Dashboard Access" \ --scope $ENVIRONMENT_ID
Spring용 유레카 서버 대시보드의 URL을 가져옵니다.
az containerapp env java-component eureka-server-for-spring show \ --environment $ENVIRONMENT \ --resource-group $RESOURCE_GROUP \ --name $EUREKA_COMPONENT_FIRST \ --query properties.ingress.fqdn \ --output tsv
이 명령은 Spring용 유레카 서버 대시보드에 액세스하는 데 사용할 수 있는 URL을 반환합니다. 대시보드를 통해 유레카 서버 설정이 두 개의 복제본으로 구성되어 있는지 확인할 수 있습니다.
리소스 정리
이 자습서에서 만든 리소스는 Azure 청구서에 영향을 줍니다. 이러한 서비스를 장기간 사용하지 않을 예정이면 다음 명령을 실행하여 이 자습서에서 만든 모든 항목을 제거합니다.
az group delete --resource-group $RESOURCE_GROUP