다음을 통해 공유


자습서: Azure Container Apps에서 고가용성 유레카 서버 구성 요소 클러스터 만들기

이 자습서에서는 장애와 높은 수요에도 불구하고 작동을 유지하도록 설계된 유레카 서비스를 만드는 방법을 알아봅니다. 가용성이 뛰어난 유레카 서비스를 빌드하면 수요에 관계없이 클라이언트가 항상 서비스 레지스트리를 사용할 수 있습니다.

유레카의 고가용성 상태를 달성하려면 여러 유레카 서버 인스턴스를 연결하여 클러스터를 형성해야 합니다. 클러스터는 한 유레카 서버에 장애가 발생하더라도 다른 서비스는 요청에 계속 사용할 수 있도록 리소스를 제공합니다.

이 자습서에서는 다음을 수행합니다.

  • Spring 구성 요소를 위한 유레카 서버를 만듭니다.
  • Spring 구성 요소를 위한 두 개의 유레카 서버를 클러스터로 연결합니다.
  • 고가용성 서비스 검색을 위해 두 유레카 서버에 애플리케이션을 연결합니다.

필수 조건

고려 사항

Azure Container Apps에서 관리 Java 구성 요소를 실행할 때 다음 세부 정보에 유의해야 합니다.

Item 설명
범위 구성 요소는 연결된 컨테이너 앱과 동일한 환경에서 실행됩니다.
크기 조정 구성 요소의 크기를 조정할 수 없습니다. 크기 조정 속성 minReplicasmaxReplicas은(는) 모두 1(으)로 설정됩니다.
리소스 구성 요소에 대한 컨테이너 리소스 할당은 고정되어 있습니다. CPU 코어 수는 0.5이고 메모리 크기는 1Gi입니다.
가격 책정 구성 요소 청구는 사용량 기반 가격 책정에 속합니다. 관리 구성 요소에서 소비한 리소스는 활성/유휴 요금으로 청구됩니다. 더 이상 사용하지 않는 구성 요소를 삭제하여 청구를 중지할 수 있습니다.
바인딩 컨테이너 앱은 바인딩을 통해 구성 요소에 연결됩니다. 바인딩은 컨테이너 앱 환경 변수에 구성을 삽입합니다. 바인딩이 설정되면 컨테이너 앱은 환경 변수에서 구성 값을 읽고 구성 요소에 연결할 수 있습니다.

설정

다음 단계에 따라 유레카 서비스 클러스터를 만듭니다.

  1. 애플리케이션 구성 값을 보관하는 변수를 만듭니다.

    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"
    
  2. Azure CLI를 사용하여 Azure에 로그인합니다.

    az login
    
  3. 리소스 그룹을 만듭니다.

    az group create --name $RESOURCE_GROUP --location $LOCATION
    
  4. Container Apps 환경을 만듭니다.

    az containerapp env create \
        --name $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --location $LOCATION
    

클러스터 생성

다음으로, 두 개의 유레카 서버 인스턴스를 만들고 이를 클러스터로 연결합니다.

  1. 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
    

구성 요소를 함께 바인딩

유레카 서버가 고가용성 구성으로 작동하려면 함께 연결해야 합니다.

  1. 첫 번째 유레카 서버를 두 번째 서버에 연결합니다.

    az containerapp env java-component eureka-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_FIRST \
        --bind $EUREKA_COMPONENT_SECOND
    
  2. 두 번째 유레카 서버를 첫 번째 서버에 연결합니다.

    az containerapp env java-component eureka-server-for-spring update \
        --environment $ENVIRONMENT \
        --resource-group $RESOURCE_GROUP \
        --name $EUREKA_COMPONENT_SECOND \
        --bind $EUREKA_COMPONENT_FIRST
    

애플리케이션 배포 및 바인딩

서버 구성 요소를 연결하면 컨테이너 앱을 만들고 이를 두 개의 유레카 구성 요소에 바인딩할 수 있습니다.

  1. 컨테이너 앱을 만듭니다.

    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
    
  2. 컨테이너 앱을 첫 번째 유레카 서버 구성 요소에 바인딩합니다.

    az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --bind $EUREKA_COMPONENT_FIRST 
    
  3. 컨테이너 앱을 두 번째 유레카 서버 구성 요소에 연결합니다.

    az containerapp update \
        --name $APP_NAME \
        --resource-group $RESOURCE_GROUP \
        --bind $EUREKA_COMPONENT_SECOND
    

대시보드 보기

Important

대시보드를 보려면 관리 환경 리소스에서 계정에 최소한 Microsoft.App/managedEnvironments/write 역할이 할당되어 있어야 합니다. 리소스에 대한 Owner 또는 Contributor 역할을 명시적으로 할당하거나 단계에 따라 사용자 지정 역할 정의를 만들고 이를 계정에 할당할 수 있습니다.

  1. 사용자 지정 역할 정의를 만듭니다.

    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로 바꿔야 합니다.

  2. 관리 환경 리소스의 계정에 사용자 지정 역할을 할당합니다.

    관리 환경의 리소스 ID를 가져옵니다.

    export ENVIRONMENT_ID=$(az containerapp env show \
        --name $ENVIRONMENT --resource-group $RESOURCE_GROUP \
        --query id \
        --output tsv)
    
  3. 사용자의 계정에 역할을 할당합니다.

    이 명령을 실행하기 전에 <> 대괄호 사이의 자리 표시자를 사용자 또는 서비스 주체 ID로 바꿉니다.

    az role assignment create \
        --assignee <USER_OR_SERVICE_PRINCIPAL_ID> \
        --role "Java Component Dashboard Access" \
        --scope $ENVIRONMENT_ID
    
  4. 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을 반환합니다. 대시보드를 통해 유레카 서버 설정이 두 개의 복제본으로 구성되어 있는지 확인할 수 있습니다.

    Spring 대시보드를 위한 고가용성 유레카 서버의 스크린샷.

리소스 정리

이 자습서에서 만든 리소스는 Azure 청구서에 영향을 줍니다. 이러한 서비스를 장기간 사용하지 않을 예정이면 다음 명령을 실행하여 이 자습서에서 만든 모든 항목을 제거합니다.

az group delete --resource-group $RESOURCE_GROUP