AKS(Azure Kubernetes Service)에서 클러스터 자동 크기 조정기 사용

AKS에서 애플리케이션 수요에 맞추려면 워크로드를 실행하는 노드 수를 조정해야 할 수 있습니다. 클러스터 자동 크기 조정기 구성 요소는 리소스 제약 조건으로 인해 예약할 수 없는 클러스터의 Pod를 감시합니다. 클러스터 자동 크기 조정기가 문제를 검색하면 애플리케이션 요구 사항에 맞게 노드 풀의 노드 수의 크기를 조정합니다. 또한 노드에서 실행 중인 Pod가 부족한지 정기적으로 확인하고 필요에 따라 노드 수의 크기를 조정합니다.

이 문서에서는 오픈 소스 Kubernetes 버전을 기반으로 하는 AKS에서 클러스터 자동 크기 조정기를 사용하도록 설정하고 관리하는 방법을 보여 줍니다.

시작하기 전에

이 문서에는 Azure CLI 버전 2.0.76 이상이 필요합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

AKS 클러스터에서 클러스터 자동 크기 조정기 사용

Important

클러스터 자동 크기 조정기는 Kubernetes 구성 요소입니다. AKS 클러스터는 가상 머신 확장 집합을 노드에 사용하지만, 확장 집합 자동 크기 조정에 대한 설정을 수동으로 사용하거나 편집하지 마세요. Kubernetes 클러스터 자동 크기 조정기가 필수 크기 조정 설정을 자동으로 관리하게 두세요. 자세한 내용은 노드 리소스 그룹의 AKS 리소스를 수정할 수 있나요?를 참조하세요.

새 클러스터에서 클러스터 자동 크기 조정기를 사용하도록 설정합니다.

  1. az group create 명령을 사용하여 리소스 그룹을 만듭니다.

    az group create --name myResourceGroup --location eastus
    
  2. az aks create 명령을 사용하여 AKS 클러스터를 만들고, --enable-cluster-autoscaler 매개 변수를 사용하고 노드 --min-count--max-count를 지정하여 클러스터의 노드 풀에서 클러스터 자동 크기 조정기를 사용하도록 설정 및 구성합니다. 다음 명령 예는 가상 머신 확장 집합이 지원하는 단일 노드가 있는 클러스터를 만들고, 클러스터 자동 크기 조정기를 사용하도록 설정하고, 최소 1개, 최대 3개의 노드를 설정합니다.

    az aks create \
    --resource-group myResourceGroup \
    --name myAKSCluster \
    --node-count 1 \
    --vm-set-type VirtualMachineScaleSets \
    --load-balancer-sku standard \
    --enable-cluster-autoscaler \
    --min-count 1 \
    --max-count 3
    

    클러스터를 만들고 클러스터 자동 크기 조정기 설정을 구성하는 데 몇 분 정도 걸립니다.

기존 클러스터에서 자동 크기 조정기 사용

  • az aks update 명령을 사용하여 기존 클러스터를 업데이트하고, --enable-cluster-autoscaler 매개 변수를 사용하고 노드 --min-count--max-count를 지정하여 노드 풀에서 클러스터 자동 크기 조정기를 사용하도록 설정 및 구성합니다. 다음 명령 예는 기존 AKS 클러스터를 업데이트하여 클러스터의 노드 풀에서 클러스터 자동 크기 조정기를 사용하도록 설정하고 최소 1개, 최대 3개의 노드를 설정합니다.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3
    

    클러스터를 업데이트하고 클러스터 자동 크기 조정기 설정을 구성하는 데 몇 분 정도 걸립니다.

클러스터에서 클러스터 자동 크기 조정기 사용 안 함

  • az aks update 명령과 --disable-cluster-autoscaler 매개 변수를 사용하여 클러스터 자동 크기 조정기를 사용하지 않도록 설정합니다.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --disable-cluster-autoscaler
    

    클러스터 자동 크기 조정기가 사용하지 않도록 설정되면 노드가 제거되지 않습니다.

참고 항목

az aks scale 명령을 사용하여 클러스터 자동 크기 조정기를 사용하지 않도록 설정한 후 수동으로 클러스터의 크기를 조정할 수 있습니다. 수평 Pod 자동 조정기를 사용하는 경우 클러스터 자동 크기 조정기가 사용되지 않는 상태로 계속 실행되지만, 모든 노드 리소스가 사용 중인 경우 결국 Pod를 예약할 수 없습니다.

클러스터에서 클러스터 자동 크기 조정기 다시 사용

az aks update 명령을 사용하고 --enable-cluster-autoscaler, --min-count--max-count 매개 변수를 지정하여 기존 클러스터에서 클러스터 자동 크기 조정기를 다시 사용하도록 설정할 수 있습니다.

노드 풀에서 클러스터 자동 크기 조정기 사용

여러 노드 풀에서 클러스터 자동 크기 조정기 사용

여러 노드 풀과 함께 클러스터 자동 크기 조정기를 사용할 수 있으며 각 개별 노드 풀에서 클러스터 자동 크기 조정기를 사용하도록 설정하고 고유한 자동 크기 조정 규칙을 전달할 수 있습니다.

  • az aks nodepool update 명령을 사용하여 기존 노드 풀의 설정을 업데이트합니다.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

노드 풀에서 클러스터 자동 크기 조정기 사용 안 함

  • az aks nodepool update 명령과 --disable-cluster-autoscaler 매개 변수를 사용하여 노드 풀에서 클러스터 자동 크기 조정기를 사용하지 않도록 설정합니다.

    az aks nodepool update \
      --resource-group myResourceGroup \
      --cluster-name myAKSCluster \
      --name nodepool1 \
      --disable-cluster-autoscaler
    

노드 풀에서 클러스터 자동 크기 조정기 다시 사용.

az aks nodepool update 명령을 사용하고 --enable-cluster-autoscaler, --min-count--max-count 매개 변수를 지정하여 노드 풀에서 클러스터 자동 크기 조정기를 다시 사용하도록 설정할 수 있습니다.

참고 항목

여러 영역에 걸쳐 있고 영역과 관련된 예약 기능(예: 볼륨 토폴로지 예약)을 활용하는 노드 풀과 함께 클러스터 자동 크기 조정기를 사용하려는 경우 영역당 하나의 노드 풀을 두고 자동 크기 조정기 프로필을 통해 --balance-similar-node-groups를 사용 설정하는 것이 좋습니다. 이렇게 하면 자동 크기 조정기가 성공적으로 스케일 업되고 노드 풀 크기의 균형을 유지할 수 있습니다.

클러스터 자동 크기 조정기 설정 업데이트

애플리케이션 요구 사항이 변경됨에 따라 클러스터 자동 크기 조정기 노드 수를 조정하여 효율적으로 크기를 조정해야 할 수 있습니다.

  • az aks update 명령을 사용하여 노드 수를 변경하고, --update-cluster-autoscaler 매개 변수를 사용하고 업데이트된 노드 --min-count--max-count를 지정하여 클러스터 자동 크기 조정기를 업데이트합니다.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --update-cluster-autoscaler \
      --min-count 1 \
      --max-count 5
    

참고 항목

클러스터 자동 크기 조정기는 스폿 제거 중 또는 AKS API에서 최소 개수 값을 변경하는 경우와 같이 외부 요인으로 인해 실제 수가 최솟값 아래로 떨어지는 경우 최소 개수를 적용합니다.

클러스터 자동 크기 조정기 프로필 사용

클러스터 전체 자동 크기 조정기 프로필의 기본값을 변경하여 클러스터 자동 크기 조정기의 세부 정보를 구성할 수 있습니다. 예를 들어 10분 후 노드 사용량이 저조하면 스케일 다운 이벤트가 발생합니다. 15분마다 실행되는 워크로드가 있는 경우 15분 또는 20분 후에 사용량이 저조한 노드를 스케일 다운하도록 자동 크기 조정기 프로필을 변경할 수 있습니다. 클러스터 자동 크기 조정기를 사용하도록 설정하면 다른 설정을 지정하지 않는 한 기본 프로필이 사용됩니다.

Important

클러스터 자동 크기 조정기 프로필은 클러스터 자동 크기 조정기를 사용하는 모든 노드 풀에 영향을 줍니다. 노드 풀별로 자동 크기 조정기 프로필을 설정할 수는 없습니다. 프로필을 설정하면 클러스터 자동 크기 조정기가 사용하도록 설정된 기존 노드 풀이 즉시 프로필을 사용하기 시작합니다.

클러스터 자동 크기 조정기 프로필 설정

다음 표에서는 클러스터 자동 크기 조정기 프로필에 사용할 수 있는 설정을 나열합니다.

설정 설명 기본값
scan-interval 스케일 업 또는 다운을 위해 클러스터를 다시 평가하는 빈도입니다. 10초
scale-down-delay-after-add 스케일 업 후 스케일 다운 평가가 다시 시작되기 전까지의 경과 시간입니다. 10분
scale-down-delay-after-delete 노드 삭제 후 스케일 다운 평가가 다시 시작되기 전까지의 경과 시간입니다. scan-interval
scale-down-delay-after-failure 스케일 다운 실패 후 스케일 다운 평가가 다시 시작되기 전까지의 경과 시간입니다. 3분
scale-down-unneeded-time 불필요한 노드를 스케일 다운하기 전까지의 경과 시간입니다. 10분
scale-down-unready-time 준비되지 않은 노드를 스케일 다운하기 전까지의 경과 시간입니다. 20분
ignore-daemonsets-utilization(미리 보기) 스케일 다운에 대한 리소스 사용률을 계산할 때 DaemonSet Pod가 무시되는지 여부입니다. false
daemonset-eviction-for-empty-nodes(미리 보기) DaemonSet Pod가 빈 노드에서 정상적으로 종료되는지 여부입니다. false
daemonset-eviction-for-occupied-nodes(미리 보기) DaemonSet Pod가 비어있지 않은 노드에서 정상적으로 종료되는지 여부입니다. true
scale-down-utilization-threshold 요청된 리소스의 합계를 용량으로 나눈 노드 사용률 수준으로, 이 수준의 노드는 스케일 다운 대상으로 고려할 수 있습니다. 0.5
max-graceful-termination-sec 노드를 스케일 다운하려고 할 때 클러스터 자동 크기 조정기가 Pod 종료를 위해 대기하는 최대 시간(초) 600초
balance-similar-node-groups 비슷한 노드 풀을 검색하고 두 노드 풀의 노드 수를 균형 있게 조정합니다. false
expander 스케일 업에 사용하는 노드 풀 확장기의 유형입니다. 가능한 값은 most-pods, random, least-wastepriority입니다. random
skip-nodes-with-local-storage true인 경우 클러스터 자동 크기 조정기는 로컬 스토리지가 포함된 Pod가 있는 노드를 삭제하지 않습니다(예: EmptyDir 또는 HostPath). false
skip-nodes-with-system-pods true인 경우 클러스터 자동 크기 조정기는 kube-system에서 Pod가 있는 노드를 삭제하지 않습니다(DaemonSet 또는 미러 Pod 제외). true
max-empty-bulk-delete 동시에 삭제할 수 있는 빈 노드의 최대 수입니다. 10개 노드
new-pod-scale-up-delay Kubernetes 스케줄러가 모든 Pod를 예약하기 전에 CA가 작동하지 않도록 하려는 버스트/일괄 처리 규모와 같은 시나리오의 경우, 어느 정도 시간이 지나기 전에 예약되지 않은 Pod를 CA가 무시하도록 지시할 수 있습니다. 0초
max-total-unready-percentage 클러스터에서 준비되지 않은 노드의 최대 비율입니다. 이 비율을 초과하면 CA가 작업을 중단합니다. 45%
max-node-provision-time 노드가 프로비전될 때까지 자동 크기 조정기가 대기하는 최대 시간입니다. 15분
ok-total-unready-count max-total-unready-percentage에 관계없이 준비되지 않은 노드가 허용되는 수입니다. 노드 3개

새 클러스터에 클러스터 자동 크기 조정기 프로필 설정

  • az aks create 명령을 사용하여 AKS 클러스터를 만들고 cluster-autoscaler-profile 매개 변수를 사용하여 클러스터 자동 크기 조정기 프로필을 설정합니다.

    az aks create \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --node-count 1 \
      --enable-cluster-autoscaler \
      --min-count 1 \
      --max-count 3 \
      --cluster-autoscaler-profile scan-interval=30s
    

기존 클러스터에 클러스터 자동 크기 조정기 프로필 설정

  • az aks update 명령과 cluster-autoscaler-profile 매개 변수를 사용하여 기존 클러스터에 클러스터 자동 크기 조정기를 설정합니다. 다음 예에서는 검사 간격 설정을 30초로 구성합니다.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile scan-interval=30s
    

적극적인 스케일 다운을 위한 클러스터 자동 크기 조정기 프로필 구성

참고 항목

이러한 상황에서 노드 프로비저닝 시간이 확장될 수 있으므로 짧은 간격 내에 규모 확장 및 규모 감축이 빈번하게 발생하는 클러스터에는 적극적으로 축소하지 않는 것이 좋습니다. 증가 scale-down-delay-after-add 는 들어오는 워크로드를 처리하기 위해 노드를 더 오래 유지하여 이러한 상황에서 도움이 될 수 있습니다.

 az aks update \
     --resource-group myResourceGroup \
     --name myAKSCluster \
     --cluster-autoscaler-profile scan-interval=30s, scale-down-delay-after-add=0s,scale-down-delay-after-failure=30s,scale-down-unneeded-time=3m,scale-down-unready-time=3m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=1000,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

버스트 워크로드에 대한 클러스터 자동 크기 조정기 프로필 구성

 az aks update \   
     --resource-group "myResourceGroup" \
     --name myAKSCluster \ 
     --cluster-autoscaler-profile scan-interval=20s,scale-down-delay-after-add=10m,scale-down-delay-after-failure=1m,scale-down-unneeded-time=5m,scale-down-unready-time=5m,max-graceful-termination-sec=30,skip-nodes-with-local-storage=false,max-empty-bulk-delete=100,max-total-unready-percentage=100,ok-total-unready-count=1000,max-node-provision-time=15m

클러스터 자동 크기 조정기 프로필을 기본값으로 초기화

  • az aks update 명령을 사용하여 클러스터 자동 크기 조정기 프로필을 초기화합니다.

    az aks update \
      --resource-group myResourceGroup \
      --name myAKSCluster \
      --cluster-autoscaler-profile ""
    

클러스터 자동 크기 조정기 로그 검색 및 상태

클러스터 자동 크기 조정기에서 로그 및 상태 업데이트를 검색하여 자동 크기 조정기 이벤트를 진단하고 디버깅할 수 있습니다. AKS는 사용자를 대신하여 클러스터 자동 크기 조정기를 관리하고 관리형 컨트롤 플레인에서 실행합니다. 컨트롤 플레인 노드를 사용하도록 설정하면 클러스터 자동 크기 조정기의 로그와 작업을 볼 수 있습니다.

  1. 여기 지침을 사용하여 클러스터 자동 크기 조정기 로그를 Log Analytics에 푸시하도록 리소스 로그에 대한 규칙을 설정합니다. 로그 옵션을 선택할 때 cluster-autoscaler 확인란을 선택했는지 확인합니다.

  2. 클러스터에서 로그 섹션을 선택합니다.

  3. 다음 예제 쿼리를 Log Analytics에 입력합니다.

    AzureDiagnostics
    | where Category == "cluster-autoscaler"
    

    검색할 로그가 있는 한 다음 로그와 유사한 로그가 표시됩니다.

    Log Analytics 로그 스크린샷.

  4. CLI에서 트리거되지 않은 클러스터 자동 크기 조정기 확장 보기

    kubectl get events --field-selector source=cluster-autoscaler,reason=NotTriggerScaleUp
    
  5. CLI에서 클러스터 자동 크기 조정기 경고 이벤트 보기

    kubectl get events --field-selector source=cluster-autoscaler,type=Warning
    
  6. 클러스터 자동 크기 조정기는 또한 configmap에 상태(cluster-autoscaler-status라고 함)를 기록합니다. 다음 kubectl 명령을 사용하여 이러한 로그를 검색할 수 있습니다.

    kubectl get configmap -n kube-system cluster-autoscaler-status -o yaml
    

자세한 내용은 Kubernetes/autoscaler GitHub 프로젝트 FAQ를 참조하세요.

클러스터 자동 크기 조정기 메트릭

Prometheus 추가 기능에 대한 Azure Monitor 관리 서비스를 사용하여 클러스터 자동 크기 조정기의로그 및 작업을 보려면 컨트롤 플레인 메트릭(미리 보기)을 사용하도록 설정할 수 있습니다.

다음 단계

이 문서에서는 AKS 노드 수를 자동으로 조정하는 방법을 설명했습니다. Horizontal Pod Autoscaler를 사용하여 애플리케이션을 실행하는 Pod 수를 자동으로 조정할 수도 있습니다. Horizontal Pod Autoscaler를 사용하는 단계는 AKS에서 애플리케이션 크기 조정을 참조하세요.

클러스터 리소스 사용률을 개선하고 다른 Pod를 위해 CPU 및 메모리를 확보하려면 수직형 Pod 자동 크기 조정기를 참조하세요.