Service Fabric 관리형 클러스터의 자동 크기 조정 소개

자동 조정은 뛰어난 탄력성을 제공하며 보조 노드 형식에 대한 수요에 따라 노드를 추가 또는 축소할 수 있습니다. 자동화되고 탄력적인 이 동작은 워크로드를 처리하는 노드 수를 모니터링하고 최적화하여 관리 오버헤드 및 잠재적 비즈니스 영향을 줄입니다. 워크로드에 대한 규칙을 구성하고 나머지는 자동 크기 조정에서 처리하도록 합니다. 정의된 임계값이 충족되면 자동 크기 조정 규칙에 따라 노드 형식의 용량을 조정하는 작업을 수행합니다. 언제든지 자동 조정을 활성화, 비활성화 또는 구성할 수 있습니다. 이 문서에서는 예제 배포, 자동 조정을 사용하도록 설정하거나 사용하지 않도록 설정하는 방법 및 예제 자동 조정 정책을 구성하는 방법을 제공합니다.

요구 사항 및 지원되는 메트릭:

  • Service Fabric 관리형 클러스터 리소스 apiVersion은 2022-01-01 이상이어야 합니다.
  • 클러스터 SKU는 표준이어야 합니다.
  • 클러스터의 보조 노드 형식에서만 구성할 수 있습니다.
  • 노드 형식에 대해 자동 크기 조정을 사용하도록 설정한 후 리소스를 재배포할 때 vmInstanceCount 속성을 -1로 구성합니다.
  • Azure Monitor 게시 메트릭만 지원됩니다.

참고 항목

Hyper-V 역할이 사용하도록 설정된 Windows OS 이미지를 사용하는 경우, 즉. VM이 중첩된 가상화에 대해 구성되고 VM 내의 동적 메모리 드라이버가 중지된 상태에 있기 때문에 사용 가능한 메모리 메트릭을 사용할 수 없습니다.

자동 크기 조정이 유용한 일반적인 시나리오는 특정 서비스의 로드가 시간에 따라 변하는 경우입니다. 예를 들어, 게이트웨이와 같은 서비스는 들어오는 요청을 처리하는 데 필요한 리소스의 양에 따라 크기 조정할 수 있습니다. 이러한 크기 조정 규칙의 모양에 대한 예를 살펴보고 이 문서의 뒤부분에서 사용해 보겠습니다.

  • 내 게이트웨이의 모든 인스턴스가 평균 70%를 초과해 사용하는 경우 인스턴스를 두 개 더 추가하여 게이트웨이 서비스를 확장합니다. 30분마다 이 작업을 실행하지만 총 인스턴스 수가 20개를 넘지 않도록 합니다.
  • 게이트웨이의 모든 인스턴스가 평균적으로 40% 미만의 코어를 사용하는 경우 하나의 인스턴스를 제거하여 서비스 크기를 조정합니다. 30분마다 이 작업을 수행하지만 총 인스턴스 수가 3개 미만이어서는 안됩니다.

자동 크기 조정 배포 예제

이 예제에서는 다음을 진행합니다.

  • 기본적으로 NT1NT2의 두 가지 노드 형식을 사용하여 표준 SKU Service Fabric 관리형 클러스터를 만듭니다.
  • 보조 노드 형식 NT2에 자동 크기 조정 규칙을 추가합니다.

참고 항목

노드 형식의 자동 크기 조정은 관리형 클러스터 VMSS CPU 호스트 메트릭에 따라 수행됩니다. VMSS 리소스는 템플릿에서 자동으로 확인됩니다.

다음에서는 자동 크기 조정이 구성된 클러스터를 단계적으로 설치합니다.

  1. 지역에서 리소스 그룹 만들기

    Login-AzAccount
    Select-AzSubscription -SubscriptionId $subscriptionid
    New-AzResourceGroup -Name $myresourcegroup -Location $location
    
  2. 클러스터 리소스 만들기

    이 샘플 표준 SKU Service Fabric 관리형 클러스터 샘플을 다운로드합니다. 이 명령을 실행하여 클러스터 리소스를 배포합니다.

    $parameters = @{ 
    clusterName = $clusterName
    adminPassword = $VmAdminPassword
    clientCertificateThumbprint = $clientCertificateThumbprint
    } 
    New-AzResourceGroupDeployment -Name "deploy_cluster" -ResourceGroupName $resourceGroupName -TemplateFile .\azuredeploy.json -TemplateParameterObject $parameters -Verbose
    
  3. 보조 노드 형식에서 자동 크기 조정 규칙 구성 및 활성화

    다음 명령을 사용하여 자동 크기 조정을 구성하는 데 사용할 관리형 클러스터 자동 크기 조정 샘플 템플릿을 다운로드합니다.

    $parameters = @{ 
    clusterName = $clusterName
    }
    New-AzResourceGroupDeployment -Name "deploy_autoscale" -ResourceGroupName $resourceGroupName -TemplateFile .\sfmc-deploy-autoscale.json -TemplateParameterObject $parameters -Verbose 
    

참고 항목

이 배포가 완료되면 향후 클러스터 리소스 배포는 자동 크기 조정 규칙이 설정된 보조 노드 형식에서 vmInstanceCount 속성을 -1로 설정해야 합니다. 이렇게 하면 클러스터 배포가 자동 크기 조정과 충돌하지 않습니다.

보조 노드 형식에서 자동 크기 조정을 사용하도록 설정하거나 사용하지 않도록 설정

Service Fabric 관리형 클러스터에서 배포한 노드 형식은 기본적으로 자동 크기 조정을 사용하도록 설정하지 않습니다. 구성 및 사용 가능한 노드 형식에 따라 자동 크기 조정을 언제든지 활성화 또는 비활성화할 수 있습니다.

이 기능을 사용하도록 설정하려면 아래와 같이 ARM 템플릿의 Microsoft.Insights/autoscaleSettings 형식 아래에 enabled 속성을 구성합니다.

    "resources": [
            {
            "type": "Microsoft.Insights/autoscaleSettings",
            "apiVersion": "2015-04-01",
            "name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
            "location": "[resourceGroup().location]",
            "properties": {
                "name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
                "targetResourceUri": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',  resourceGroup().name, '/providers/Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'), '/nodetypes/', parameters('nodeType2Name'))]",
                "enabled": true,
            ...

자동 크기 조정을 사용하지 않도록 설정하려면 값을 false로 설정합니다.

자동 크기 조정 규칙 삭제

노드 형식에 대한 자동 크기 조정 정책 설정을 삭제하려면 다음 PowerShell 명령을 실행하면 됩니다.

Remove-AzResource -ResourceId "/subscriptions/$subscriptionId/resourceGroups/$resourceGroup/providers/microsoft.insights/autoscalesettings/$name" -Force

자동 크기 조정에 대한 정책 설정

Service Fabric 관리형 클러스터는 기본적으로 자동 크기 조정에 대한 정책을 구성하지 않습니다. 기본 리소스에서 발생하는 크기 조정 작업에 대해 자동 크기 조정 정책을 구성해야 합니다.

다음 예제에서는 nodeType2Name에 대해 3개 이상의 노드로 정책을 설정하지만 최대 20개 노드까지 확장할 수 있습니다. 평균 CPU 사용량이 지난 30분 동안 1분 단위로 70%인 경우 크기 조정이 트리거됩니다. 평균 CPU 사용량이 지난 30분 동안 1분 단위로 40% 미만인 경우 크기 조정이 트리거됩니다.

    "resources": [
            {
            "type": "Microsoft.Insights/autoscaleSettings",
            "apiVersion": "2015-04-01",
            "name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
            "location": "[resourceGroup().location]",
            "properties": {
                "name": "[concat(parameters('clusterName'), '-', parameters('nodeType2Name'))]",
                "targetResourceUri": "[concat('/subscriptions/', subscription().subscriptionId, '/resourceGroups/',  resourceGroup().name, '/providers/Microsoft.ServiceFabric/managedclusters/', parameters('clusterName'), '/nodetypes/', parameters('nodeType2Name'))]",
                "enabled": "[parameters('enableAutoScale')]",
                "profiles": [
                    {
                        "name": "Autoscale by percentage based on CPU usage",
                        "capacity": {
                            "minimum": "3",
                            "maximum": "20",
                            "default": "3"
                        },
                        "rules": [
                            {
                                "metricTrigger": {
                                  "metricName": "Percentage CPU",
                                  "metricNamespace": "",
                                  "metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/SFC_', reference(resourceId('Microsoft.ServiceFabric/managedClusters', parameters('clusterName')), '2022-01-01').clusterId,'/providers/Microsoft.Compute/virtualMachineScaleSets/',parameters('nodeType2Name'))]",
                                  "timeGrain": "PT1M",
                                  "statistic": "Average",
                                  "timeWindow": "PT30M",
                                  "timeAggregation": "Average",
                                  "operator": "GreaterThan",
                                  "threshold": 70
                                },
                                "scaleAction": {
                                  "direction": "Increase",
                                  "type": "ChangeCount",
                                  "value": "5",
                                  "cooldown": "PT5M"
                                }
                            },
                            {
                                "metricTrigger": {
                                  "metricName": "Percentage CPU",
                                  "metricNamespace": "",
                                  "metricResourceUri": "[concat('/subscriptions/',subscription().subscriptionId,'/resourceGroups/SFC_', reference(resourceId('Microsoft.ServiceFabric/managedClusters', parameters('clusterName')), '2022-01-01').clusterId,'/providers/Microsoft.Compute/virtualMachineScaleSets/',parameters('nodeType2Name'))]",
                                  "timeGrain": "PT1M",
                                  "statistic": "Average",
                                  "timeWindow": "PT30M",
                                  "timeAggregation": "Average",
                                  "operator": "LessThan",
                                  "threshold": 40
                                },
                                "scaleAction": {
                                  "direction": "Decrease",
                                  "type": "ChangeCount",
                                  "value": "1",
                                  "cooldown": "PT5M"
                                }
                            }
                            ]
                    }
                    ]
                }
            }
        
    ]                           

위의 예제가 포함된 자동 크기 조정을 사용하도록 설정하기 위해 이 ARM템플릿을 다운로드할 수 있습니다.

관리형 클러스터 리소스의 구성된 자동 크기 조정 정의 보기

Azure Resource Explorer를 사용하여 구성된 자동 크기 조정 설정을 볼 수 있습니다.

  1. Azure Resource Explorer로 이동합니다.

  2. subscriptions ->SubscriptionName ->resource group ->microsoft.insights ->autoscalesettings -> 자동 크기 조정 정책 이름(예: sfmc01-NT2)으로 이동합니다.

    탐색 트리에서 다음과 유사한 항목이 표시됩니다.

    Azure Resource Explorer example tree view

  3. 오른쪽에서 이 자동 크기 조정 설정의 전체 정의를 볼 수 있습니다.

    이 예제에서 자동 크기 조정은 CPU% 기반 확장 및 축소 규칙으로 구성됩니다.

    Azure Resource Explorer example node type autoscale details

문제 해결

고려할 사항은 다음과 같습니다.

  • 관리형 클러스터 보조 노드 형식에 대해 트리거되는 자동 크기 조정 이벤트 검토

    1. 클러스터 활동 로그로 이동
    2. 자동 크기 조정 확장/축소 완료 작업에 대한 작업 로그 검토
  • 노드 형식에 대해 몇 개의 VM이 구성되어 있고 워크로드가 전체 또는 일부에서만 발생하나요?

  • 규모 축소 및 확장 임계값 차이가 충분한가요?

    평균 CPU가 5분 이상 50%보다 클 때 규모를 확장하고 50%보다 작을 때 규모를 축소하도록 설정했다고 가정합니다. 이 설정은 CPU 사용량이 임계값에 가까워질 때 크기 조정 작업이 지속적으로 집합의 크기를 늘리고 줄이기를 반복하면서 “플래핑” 문제가 발생됩니다. 이 설정 때문에 자동 크기 조정 서비스는 크기를 조정하지 않는 것으로 나타날 수 있는 “플래핑”을 방지하려고 합니다. 그러므로 크기 조정 사이에 일부 간격을 허용하도록 규모 확장 및 축소 임계값의 차이가 충분한지 확인합니다.

  • 노드 형식을 축소하거나 확장할 수 있나요? 노드 형식 수준에서 노드 수를 조정하고 성공적으로 완료되었는지 확인합니다. 관리형 클러스터에서 노드 형식을 스케일링하는 방법

  • Azure Resource Explorer에서 Microsoft.ServiceFabric/managedclusters/nodetypes 및 Microsoft.Insights 리소스를 확인합니다.

    Azure Resource Explorer는 Azure Resource Manager 리소스의 상태를 보여 주는 필수적인 문제 해결 도구입니다. 구독을 클릭하고 문제를 해결하려는 리소스 그룹을 살펴봅니다. ServiceFabric/managedclusters/clustername 리소스 공급자 아래의 NodeTypes에서 만든 노드 형식을 살펴보고 속성을 확인하여 provisioningStateSucceeded인지 확인합니다. 그런 다음, clustername 아래의 Microsoft.Insights 리소스 공급자로 이동하여 자동 크기 조정 규칙이 적절한지 확인합니다.

  • 내보낸 메트릭 값이 예상대로 있나요? Get-AzMetricPowerShell 모듈을 사용하여 리소스의 메트릭 값을 가져와서 검토합니다.

이러한 단계를 수행한 후에도 자동 크기 조정 문제가 여전히 있는 경우, 지원 요청 로그 리소스를 사용해 볼 수 있습니다. 템플릿 및 성능 데이터 보기를 공유하도록 준비합니다.

다음 단계