오토스케일링을 위한 클러스터 준비

가상 사설 클라우드 클래식 인프라

cluster-autoscaler 추가 기능을 사용하면 Red Hat® OpenShift® on IBM Cloud® 클래식 또는 VPC 클러스터의 작업자 풀을 자동으로 스케일링하여 스케줄된 워크로드의 크기 요구사항에 따라 작업자 풀의 작업자 노드 수를 늘리거나 줄일 수 있습니다. cluster-autoscaler 애드온은 Kubernetes 의 Cluster-Autoscaler 프로젝트를 기반으로 합니다. 클러스터 버전별 지원되는 추가 기능 버전 목록은 지원되는 클러스터 추가 기능 버전 을 참조하십시오.

예약을 사용하는 작업자 풀에서 클러스터 오토스케일러를 사용으로 설정할 수 없습니다.

자동 확장 이해

  • 클러스터 오토스케일러는 주기적으로 클러스터를 스캔하여 워크로드 리소스 요청 및 구성하는 사용자 정의 설정(예: 스캔 간격)에 대한 응답으로 관리하는 작업자 풀의 작업자 노드 수를 조정합니다.

  • 매 분마다 클러스터 오토스케일러는 다음 상황을 확인합니다.

    • 보류 중인 팟(Pod) 스케일링 업: 작업자 노드에 팟(Pod)을 스케줄하는 데 충분하지 않은 컴퓨팅 리소스가 존재하는 경우 팟(Pod)은 보류 중으로 간주됩니다. 클러스터 오토스케일러가 보류 중인 팟(Pod)을 감지하면 오토스케일러는 워크로드 리소스 요청을 충족하기 위해 구역 전체에 작업자 노드를 균등하게 스케일링 업합니다.
    • 스케일링 다운할, 사용률이 낮은 작업자 노드: 기본적으로, 10분 이상 요청된 총 컴퓨팅 리소스의 50% 미만으로 실행되며 워크로드를 다른 작업자 노드로 재스케줄할 수 있는 작업자 노드는 사용률이 낮은 것으로 간주됩니다. 클러스터 오토스케일러가 사용률이 낮은 작업자 노드를 감지하면 필요한 컴퓨팅 리소스만 있도록 작업자 노드를 한 번에 하나씩 스케일링 다운합니다. 필요한 경우 10분 동안 50% 의 기본 스케일링 다운 사용률 임계값을 사용자 정의할 수 있습니다.
  • 시간이 경과함에 따라 정기적으로 스캔과 스케일링 업 및 다운이 수행되며 작업자 노드의 수에 따라 완료하는 데 더 오랜 시간(예: 30분)이 소요될 수 있습니다.

  • 클러스터 오토스케일러는 실제 워커 노드 사용량이 아닌, 배포에 대해 사용자가 정의한 리소스 요청을 고려하여 워커 노드의 수를 조정합니다. 팟(Pod)과 배치에서 적절한 양의 리소스를 요청하지 않는 경우 구성 파일을 조정해야 합니다.

  • 클러스터 오토스케일러가 구성 파일을 조정할 수 없습니다. 또한, 워커 노드는 기본 클러스터 기능, 기본 및 사용자 지정 애드온, 리소스 예약 등을 위해 일부 컴퓨팅 리소스를 사용한다는 점을 유의하시기 바랍니다.

  • 일반적으로 클러스터 오토스케일러는 클러스터에서 워크로드를 실행하는 데 필요한 작업자 노드의 수를 계산합니다. 클러스터 스케일링 업 및 다운은 다음 항목을 비롯한 많은 요인에 따라 달라집니다.

    • 설정한 구역당 최소 및 최대 작업자 노드 크기.
    • 보류 중인 파드 리소스 요청과, 안티어피니티, 특정 플레버에만 파드를 배치하도록 지정하는 레이블, 파드 중단 허용 한도 등 워크로드와 연관된 특정 메타데이터.
    • 클러스터 오토스케일러가 관리하는 워커 풀로, 멀티존 클러스터의 경우 여러 존에 걸쳐 있을 수 있습니다.
  • 이전 버전의 클러스터 오토스케일러는 시뮬레이션 스케줄링을 위해 기존 워커 노드에만 의존했습니다. 예를 들어, 작업자 풀이 0개 노드로 축소된 경우 자동 확장기는 해당 풀의 용량이나 레이블에 대한 정보를 보유하지 않아 작업자 풀을 다시 확장할 수 없었습니다. 그 결과 스케일 투 제로가 지원되지 않았습니다.

  • 2.0.0 버전부터 오토스케일러는 모든 워커 풀에 대해 템플릿 노드를 생성합니다. 이 템플릿은 풀 내 새 노드의 할당 가능한 CPU, 메모리, 라벨 및 테인트에 대한 모델을 제공하기 위해 사용됩니다.

  • 또한 버전 에서 2.0.0, kube-system 네임스페이스의 iks-ca-configmap 에 두 가지 새로운 선택적 설정이 제공됩니다: OSReservedMemoryGiOSReservedCPUMili.

    • 이 값들은 운영 체제가 각 워커 노드에 할당하는 CPU 및 메모리 양을 나타냅니다.
    • 커널 활용도는 이러한 값을 사용하여 조정할 수 없습니다. 해당 값들은 이미 정의되어 있기 때문입니다.
    • 오토스케일러는 시뮬레이션 예약을 위해 할당 가능한 리소스를 계산할 때 노드의 용량에서 이 값을 뺍니다.
    • 기본적으로 자동 스케일러는 권장되는 OS 예약 값을 사용하지만, 사용자는 이를 재정의하여 스케줄링 가능한 용량 규모를 조정할 수 있습니다.

자세한 내용은 Kubernetes 의 클러스터 오토스케일러 자주 묻는 질문 “스케일업은 어떻게 이루어지나요? ” 및 “스케일다운은 어떻게 이루어지나요? ” 항목을 참조하십시오.

자동 스케일링의 모범 사례는 무엇인가요?

확장 및 축소 작동 방식을 변경할 수 있습니까?

네, 설정을 사용자 지정하거나 다른 Kubernetes 리소스를 활용하여 확장 및 축소 방식에 영향을 줄 수 있습니다.

  • 스케일 업의 경우 클러스터 자동 스케일러 ConfigMap 값을 scanInterval, expander, skipNodes 또는 maxNodeProvisionTime 와 같이 사용자 지정할 수 있습니다. 작업자 풀에 리소스가 부족해지기 전에 작업자 노드를 스케일링 업할 수 있도록 작업자 노드를 과잉 프로비저닝하는 방법을 검토하십시오. 또한 Kubernetes 팟(Pod) 예산 중단 및 팟(Pod) 우선순위 컷오프를 설정하여 스케일링 업 작동 방식에 영향을 줄 수도 있습니다.

  • 스케일 다운을 위해서는 클러스터 오토스케일러 ConfigMap 의 값을 다음과 같이 사용자 정의하십시오. scaleDownUnneededTime, scaleDownDelayAfterAdd, scaleDownDelayAfterDelete 또는 scaleDownUtilizationThreshold 등.

구역당 최소 크기를 늘려 클러스터를 해당 크기로 확장할 수 있습니까?

아니오, minSize 설정이 스케일링 업을 자동으로 트리거하지는 않습니다. minSize 는 클러스터 오토스케일러가 존당 특정 수보다 적은 수의 워커 노드로 확장되지 않도록 하는 임계값입니다.

  • 자신의 클러스터에 있는 구역당 작업자 노드 수가 아직 이보다 모자란 경우 클러스터 오토스케일러는 추가 리소스를 필요로 하는 워크로드 리소스가 생길 때까지 스케일링 업을 수행하지 않습니다. 예를 들어, 세 구역 각각에 하나의 작업자 노드가 있는 작업자 풀이 있으며(총 세 개의 작업자 노드) minSize를 구역당 4로 설정하는 경우 클러스터 오토스케일러는 각 구역에서 즉시 세 작업자 노드를 추가로 프로비저닝하지 않습니다(총 12개의 작업자 노드). 대신 이 스케일링 업은 리소스 요청에 의해 트리거됩니다.
  • 15개 작업자 노드의 리소스를 요청하는 워크로드를 작성하는 경우 클러스터 오토스케일러는 이 요청을 만족시키기 위해 작업자 풀을 스케일링 업합니다. 이제 ‘ minSize ’ 설정으로 인해, 해당 수를 요청하는 워크로드를 제거하더라도 클러스터 오토스케일러는 존당 워커 노드 수를 4개 미만으로 줄이지 않습니다.

이 작동은 클러스터 오토스케일러가 관리하지 않는 작업자 풀과 어떻게 다릅니까?

작업자 풀을 작성할 때 해당 구역당 작업자 노드의 수를 지정합니다. 사용자가 작업자 노드의 수를 크기 조정 또는 리밸런싱할 때까지 작업자 풀은 작업자 노드의 수를 유지보수합니다. 작업자 풀은 사용자의 작업자 노드를 추가하거나 제거하지 않습니다. 스케줄될 수 있는 팟(Pod)보다 많은 팟(Pod)이 있는 경우 팟(Pod)은 작업자 풀 크기를 조정할 때까지 보류 상태로 유지됩니다. 작업자 풀에 대해 클러스터 오토스케일러를 사용으로 설정한 경우, 작업자 노드는 팟(Pod) 스펙 설정 및 리소스 요청에 대한 응답으로 스케일링 업 또는 다운됩니다. 작업자 풀을 수동으로 크기 조정하거나 리밸런싱할 필요가 없습니다.

GPU 자동 스케일링은 어떻게 작동하나요?

GPU 워커 노드 자동 스케일링은 클러스터 자동 스케일러 버전 1.2.4 이상 및 NVIDIA GPU 워커 노드 버전에서만 지원됩니다. 스케일업은 GPU 리소스 경색으로 인해 파드가 보류 상태가 될 때 발생합니다. 그런 다음 오토스케일러가 노드를 추가하여 클러스터를 확장합니다. 사용률이 설정된 scaleDownGPUUtilizationThreshold 아래로 내려가면 스케일 다운이 발생합니다. 이 경우 노드는 축소 대상으로 간주됩니다.

한 번에 여러 작업자 풀을 오토스케일링할 수 있습니까?

예, 클러스터 오토스케일러를 설치한 후 Configmap을 오토스케일링할 클러스터 내의 작업자 풀을 선택할 수 있습니다. 클러스터당 하나의 오토스케일러만 실행할 수 있습니다. 기본 작업자 풀에는 자동 축소를 방지할 수 있는 시스템 컴포넌트가 있으므로 기본 작업자 풀이 아닌 다른 작업자 풀에서 오토스케일링을 작성하고 활성화하십시오.

어떻게 하면 클러스터 오토스케일러가 내 앱에서 필요로 하는 항목에 대해 대응하도록 할 수 있습니까?

클러스터 오토스케일러는 워크로드의 리소스 요청 에 따라 클러스터 규모를 조정합니다. 따라서 모든 배포에 대해 리소스 요청을 명시해야 합니다. 클러스터 오토스케일러는 이 리소스 요청을 바탕으로 워크로드를 실행하는 데 필요한 워커 노드의 수를 계산하기 때문입니다. Auto-Scaling 기능은 워크로드 구성에서 요청하는 컴퓨팅 사용량을 기준으로 하며 시스템 비용과 같은 기타 요인을 고려하지 않습니다.

작업자 풀을 0개의 노드로 스케일링 다운할 수 있습니까?

예. 클러스터 자동 확장기 애드온 버전부터 특정 작업자 풀을 0개 2.0.0 노드까지 축소할 수 있습니다.

이것이 왜 유용한가요?
작업 부하가 실행되지 않을 때 제로 스케일링을 통해 비용을 절감할 수 있습니다. 오토스케일러는 필요할 때 자동으로 노드를 다시 활성화합니다.
작동 방식
실행할 포드가 없을 때, 자동 확장기는 작업자 풀을 0개 노드로 축소할 수 있습니다. 새로운 포드가 리소스가 필요하면 자동 확장기가 풀을 자동으로 다시 확장합니다.
무엇을 해야 할까요?
  • 추가 기능 버전을 확인하고 이상 버전을 v2.0.0 사용하고 있는지 확인하십시오.
  • 자동 확장기 구성에서 작업자 풀에 대해 minSize = 0 설정하십시오. 공용 ALB가 활성화된 경우 고가용성을 위해 를 영역별로 minSize = 2 설정하십시오.
클러스터 쿼럼 요구 사항은 무엇입니까?
전체 클러스터는 0으로 축소할 수 없습니다. 클러스터의 정상적인 상태를 유지하고 쿼럼을 etcd 유지하기 위해서는 최소한의 노드 수가 활성 상태로 유지되어야 합니다. 이 정족수가 충족되면 다른 작업자 풀을 0으로 축소할 수 있습니다.

Auto-Scaling을 위해 내 배치를 최적화할 수 있습니까?

예, 클러스터 오토스케일러가 스케일링을 위해 리소스 요청을 고려하는 방식을 조정하기 위해 여러 Kubernetes 기능을 배치에 추가할 수 있습니다.

  • 일치하는 결함 허용이 있는 배치 또는 팟(Pod)만 작업자 풀에 배치할 수 있도록 작업자 풀을 오염시키십시오.
  • 기본 작업자 풀이 아닌 작업자 풀에 레이블을 추가하십시오. 이 레이블은 레이블이 지정된 작업자 풀의 작업자 노드에 배치할 수 있는 워크로드를 제한하는 nodeAffinity 또는 nodeSelector를 지정하기 위해 배치 구성에서 사용됩니다.
  • 포드 중단 예산을 활용하여 포드의 갑작스러운 재스케줄링이나 삭제를 방지하십시오.
  • pod 우선순위를 사용하는 경우, 우선순위 기준값을 수정하여 어떤 유형의 우선순위가 스케일 업을 유발하도록 설정할 수 있습니다. 기본적으로, 우선순위 컷오프는 제로(0)입니다.

오토스케일링된 작업자 풀로 오염 및 결함을 사용할 수 있습니까?

예, 하지만 모든 기존 및 향후 작업자 노드가 동일한 오염을 갖도록 작업자 풀 레벨에서 오염을 적용해야 합니다. 그런 다음, 해당 워크로드가 일치하는 테인트를 가진 자동 확장되는 워커 풀에 스케줄링될 수 있도록 워크로드 구성에 일치하는 허용 범위를 포함해야 합니다. 오염된 작업자 풀이 허용하지 않는 워크로드를 배치하는 경우에는 해당 작업자 노드가 스케일링 업에 대해 고려되지 않으며, 클러스터의 용량이 충분하더라도 추가 작업자 노드가 주문될 수 있다는 점을 참고하십시오. 그러나 오염된 작업자 풀이 사용되는 리소스의 임계값(기본값: 50%) 미만이면 여전히 사용률이 낮은 것으로 식별되므로 스케일링 다운이 고려됩니다.

자동 확장을 위한 클러스터 준비하기

IBM Cloud 클러스터 오토스케일러 추가 기능을 설치하기 전에 오토스케일링을 위한 클러스터를 준비하도록 클러스터를 설정할 수 있습니다.

클러스터 오토스케일러 추가 기능은 베어메탈 작업자 노드에서 지원되지 않습니다.

  1. 시작하기 전에 필수 CLI 및 플러그인을 설치하십시오.

    • IBM Cloud CLI(ibmcloud)
    • IBM Cloud Kubernetes Service 플러그인(ibmcloud oc)
    • IBM Cloud Container Registry 플러그인(ibmcloud cr)
    • Kubernetes (kubectl)
  2. 표준 클러스터를 작성하십시오.

  3. Red Hat OpenShift 클러스터에 액세스하십시오.

  4. IBM Cloud Identity and Access Management 인증 정보가 클러스터에 저장되어 있는지 확인하십시오. 클러스터 오토스케일러는 이 시크릿을 사용하여 인증 정보를 인증합니다. 시크릿이 누락된 경우에는 인증 정보를 재설정하여 이를 작성하십시오.

    oc get secrets -n kube-system | grep storage-secret-store
    
  5. default 작업자 풀에는 스케일링 다운을 자동으로 방지할 수 있는 시스템 컴포넌트가 있으므로 default 작업자 풀이 아닌 작업자 풀의 오토스케일링을 계획하십시오. 오토스케일링이 활성화된 워커 풀에 배포하려는 워크로드에 대해 노드 어피니티를 설정할 수 있도록, 해당 워커 풀에 레이블을 지정하십시오. 예를 들면, 레이블이 app: nginx와 같을 수 있습니다. 다음 옵션 중에서 선택하십시오.

    • default 작업자 풀 이외에, 자동 확장 작업자 풀에서 실행될 워크로드에 함께 사용할 레이블을 지정하여 VPC 또는 기존 작업자 풀을 생성합니다.
    • 기존 워커 풀에 레이블 추가하기 default 작업자 풀을 제외한.
  6. 작업자 풀에 오토스케일링에 필요한 레이블이 있는지 확인하십시오. 출력에서 필수 ibm-cloud.kubernetes.io/worker-pool-id 레이블과 이전에 노드 선호도에 대해 작성한 레이블이 표시됩니다. 이러한 레이블이 보이지 않는다면, 워커 풀을 추가한 다음 노드 어피니티를 위한 레이블을 추가하십시오.

    ibmcloud oc worker-pool get --cluster CLUSTER_NAME_OR_ID --worker-pool WORKER_POOL_NAME_OR_ID | grep Labels
    

    레이블이 있는 작업자 풀의 출력 예입니다.

    Labels:             ibm-cloud.kubernetes.io/worker-pool-id=a1aa111111b22b22cc3c3cc444444d44-4d555e5
    
  7. 오토스케일링된 작업자 풀에서 실행할 워크로드를 제외한 워크로드를 작업자 풀이 허용하지 않도록 오토스케일링할 작업자 풀을 오염시키십시오. 테인트(taints)와 허용치(tolerations)에 대한 자세한 내용은 커뮤니티의 ‘ Kubernetes ’ 문서에서 확인할 수 있습니다. 예를 들어 use=autoscale:NoExecute의 오염을 설정할 수 있습니다. 이 예시에서, ‘ NoExecute ’ 테인트를 가진 포드는 해당 테인트에 대한 허용 설정이 없는 경우 제거됩니다.

다음 단계

클러스터를 준비한 후 클러스터 오토스케일러 애드온을 설치합니다.