6.8. 클러스터 자동 스케일러 정보


클러스터 자동 스케일러는 현재 배포 요구 사항에 따라 OpenShift Container Platform 클러스터의 크기를 조정합니다. 이는 Kubernetes 형식의 선언적 인수를 사용하여 특정 클라우드 공급자의 개체에 의존하지 않는 인프라 관리를 제공합니다. 클러스터 자동 스케일러에는 클러스터 범위가 있으며 특정 네임 스페이스와 연결되어 있지 않습니다.

리소스가 부족하여 현재 작업자 노드에서 Pod를 예약할 수 없거나 배포 요구를 충족시키기 위해 다른 노드가 필요한 경우 클러스터 자동 스케일러는 클러스터 크기를 늘립니다. 클러스터 자동 스케일러는 사용자가 지정한 제한을 초과하여 클러스터 리소스를 늘리지 않습니다.

클러스터 자동 스케일러는 컨트롤 플레인 노드를 관리하지 않는 경우에도 클러스터의 모든 노드의 총 메모리, CPU 및 GPU를 계산합니다. 이러한 값은 단일 시스템 지향이 아닙니다. 이는 전체 클러스터에 있는 모든 리소스의 집계입니다. 예를 들어 최대 메모리 리소스 제한을 설정하면 현재 메모리 사용량을 계산할 때 클러스터 자동 스케일러에 클러스터의 모든 노드가 포함됩니다. 그런 다음 이러한 계산을 사용하여 클러스터 자동 스케일러에 더 많은 작업자 리소스를 추가할 수 있는 용량이 있는지 확인합니다.

중요

작성한 ClusterAutoscaler 리솟스 정의의 maxNodesTotal 값이 클러스터에서 예상되는 총 머신 수를 대응하기에 충분한 크기의 값인지 확인합니다. 이 값에는 컨트롤 플레인 머신 수 및 확장 가능한 컴퓨팅 머신 수가 포함되어야 합니다.

클러스터 자동 스케일러는 10초마다 클러스터에서 불필요한 노드를 확인하고 제거합니다. 다음 조건이 적용되는 경우 클러스터 자동 스케일러는 노드를 제거하도록 간주합니다.

  • 노드 사용률이 클러스터의 노드 사용률 수준 임계값보다 적습니다. 노드 사용률 수준은 요청된 리소스의 합계가 노드에 할당된 리소스로 나눈 값입니다. ClusterAutoscaler 사용자 정의 리소스에 값을 지정하지 않으면 클러스터 자동 스케일러는 기본값 0.5 를 사용하며 이는 50% 사용률에 해당합니다.
  • 클러스터 자동 스케일러는 노드에서 실행 중인 모든 Pod를 다른 노드로 이동할 수 있습니다. Kubernetes 스케줄러는 노드에서 Pod를 예약하는 역할을 합니다.
  • 클러스터 자동 스케일러에는 축소 비활성화 주석이 없습니다.

노드에 다음 유형의 pod가 있는 경우 클러스터 자동 스케일러는 해당 노드를 제거하지 않습니다.

  • 제한적인 PDB (Pod Disruption Budgets)가 있는 pod
  • 기본적으로 노드에서 실행되지 않는 Kube 시스템 pod
  • PDB가 없거나 제한적인 PDB가있는 Kube 시스템 pod
  • deployment, replica set 또는 stateful set와 같은 컨트롤러 객체가 지원하지 않는 pod
  • 로컬 스토리지가 있는 pod
  • 리소스 부족, 호환되지 않는 노드 선택기 또는 어피니티(affinity), 안티-어피니티(anti-affinity) 일치 등으로 인해 다른 위치로 이동할 수 없는 pod
  • "cluster-autoscaler.kubernetes.io/safe-to-evict": "true" 주석이없는 경우"cluster-autoscaler.kubernetes.io/safe-to-evict": "false" 주석이 있는 pod

예를 들어 최대 CPU 제한을 64개의 코어로 설정하고 각각 8개의 코어가 있는 머신만 생성하도록 클러스터 자동 스케일러를 구성합니다. 클러스터가 30개의 코어로 시작하는 경우 클러스터 자동 스케일러는 총 62개의 코어에 대해 최대 4개의 노드를 32개의 코어로 추가할 수 있습니다.

클러스터 자동 스케일러를 구성하면 추가 사용 제한이 적용됩니다.

  • 자동 스케일링된 노드 그룹에 있는 노드를 직접 변경하지 마십시오. 동일한 노드 그룹 내의 모든 노드는 동일한 용량 및 레이블을 가지며 동일한 시스템 pod를 실행합니다.
  • pod 요청을 지정합니다.
  • pod가 너무 빨리 삭제되지 않도록 해야 하는 경우 적절한 PDB를 구성합니다.
  • 클라우드 제공자 할당량이 구성하는 최대 노드 풀을 지원할 수 있는 충분한 크기인지를 확인합니다.
  • 추가 노드 그룹 Autoscaler, 특히 클라우드 제공자가 제공하는 Autoscaler를 실행하지 마십시오.

HPA (Horizond Pod Autoscaler) 및 클러스터 자동 스케일러는 다른 방식으로 클러스터 리소스를 변경합니다. HPA는 현재 CPU 로드를 기준으로 배포 또는 복제 세트의 복제 수를 변경합니다. 로드가 증가하면 HPA는 클러스터에 사용 가능한 리소스 양에 관계없이 새 복제본을 만듭니다. 리소스가 충분하지 않은 경우 클러스터 자동 스케일러는 리소스를 추가하고 HPA가 생성한 pod를 실행할 수 있도록 합니다. 로드가 감소하면 HPA는 일부 복제를 중지합니다. 이 동작으로 일부 노드가 충분히 활용되지 않거나 완전히 비어 있을 경우 클러스터 자동 스케일러가 불필요한 노드를 삭제합니다.

클러스터 자동 스케일러는 pod 우선 순위를 고려합니다. Pod 우선 순위 및 선점 기능을 사용하면 클러스터에 충분한 리소스가 없는 경우 우선 순위에 따라 pod를 예약할 수 있지만 클러스터 자동 스케일러는 클러스터에 모든 pod를 실행하는 데 필요한 리소스가 있는지 확인합니다. 두 기능을 충족하기 위해 클러스터 자동 스케일러에는 우선 순위 컷오프 기능이 포함되어 있습니다. 이 컷오프 기능을 사용하여 "best-effort" pod를 예약하면 클러스터 자동 스케일러가 리소스를 늘리지 않고 사용 가능한 예비 리소스가 있을 때만 실행됩니다.

컷오프 값보다 우선 순위가 낮은 pod는 클러스터가 확장되지 않거나 클러스터가 축소되지 않도록합니다. pod를 실행하기 위해 추가된 새 노드가 없으며 이러한 pod를 실행하는 노드는 리소스를 확보하기 위해 삭제될 수 있습니다.

머신 API를 사용할 수 있는 플랫폼에서 클러스터 자동 스케일링이 지원됩니다.

6.8.1. 클러스터 자동 스케일러 리소스 정의

ClusterAutoscaler 리소스 정의는 클러스터 자동 스케일러의 매개 변수 및 샘플 값을 표시합니다.

apiVersion: "autoscaling.openshift.io/v1"
kind: "ClusterAutoscaler"
metadata:
  name: "default"
spec:
  podPriorityThreshold: -10 1
  resourceLimits:
    maxNodesTotal: 24 2
    cores:
      min: 8 3
      max: 128 4
    memory:
      min: 4 5
      max: 256 6
    gpus:
      - type: nvidia.com/gpu 7
        min: 0 8
        max: 16 9
      - type: amd.com/gpu
        min: 0
        max: 4
  scaleDown: 10
    enabled: true 11
    delayAfterAdd: 10m 12
    delayAfterDelete: 5m 13
    delayAfterFailure: 30s 14
    unneededTime: 5m 15
    utilizationThreshold: "0.4" 16
1
클러스터 자동 스케일러가 추가 노드를 배포하도록 하려면 pod가 초과해야하는 우선 순위를 지정합니다. 32 비트 정수 값을 입력합니다. podPriorityThreshold 값은 각 pod에 할당한 PriorityClass의 값과 비교됩니다.
2
배포할 최대 노드 수를 지정합니다. 이 값은 Autoscaler가 제어하는 머신뿐 만 아니라 클러스터에 배치 된 총 머신 수입니다. 이 값이 모든 컨트롤 플레인 및 컴퓨팅 머신과 MachineAutoscaler 리소스에 지정한 총 복제본 수에 대응할 수 있을 만큼 충분한 크기의 값인지 확인합니다.
3
클러스터에 배포할 최소 코어 수를 지정합니다.
4
클러스터에 배포할 최대 코어 수를 지정합니다.
5
클러스터에서 최소 메모리 크기를 GiB 단위로 지정합니다.
6
클러스터에서 최대 메모리 크기를 GiB단위로 지정합니다.
7
선택 사항: 배포할 GPU 노드 유형을 지정합니다. nvidia.com/gpuamd.com/gpu 만 유효한 유형입니다.
8
클러스터에 배포할 최소 GPU 수를 지정합니다.
9
클러스터에 배포할 최대 GPU 수를 지정합니다.
10
이 섹션에서는 ns, us, ms, s, mh를 포함하여 유효한 ParseDuration 간격을 사용하여 각 작업에 대해 대기하는 기간을 지정할 수 있습니다.
11
클러스터 자동 스케일러가 불필요한 노드를 제거할 수 있는지 여부를 지정합니다.
12
선택 사항: 노드가 최근에 추가된 후 노드를 삭제하기 전에 대기할 기간을 지정합니다. 값을 지정하지 않으면 기본값으로 10m이 사용됩니다.
13
선택 사항: 노드가 최근에 삭제된 후 노드를 삭제하기 전에 대기할 기간을 지정합니다. 값을 지정하지 않으면 기본값 0s 가 사용됩니다.
14
선택 사항: 축소 실패 후 노드를 삭제하기 전에 대기할 기간을 지정합니다. 값을 지정하지 않으면 기본값으로 3m가 사용됩니다.
15
선택 사항: 불필요한 노드가 삭제되기 전에 기간을 지정합니다. 값을 지정하지 않으면 기본값으로 10m이 사용됩니다.
16
선택 사항: 불필요한 노드가 삭제할 수 있는 노드 사용률 수준을 지정합니다. 노드 사용률 수준은 노드에 할당된 리소스로 나누어진 요청된 리소스의 합계이며 "0" 보다 크고 "1" 미만의 값이어야 합니다. 값을 지정하지 않으면 클러스터 자동 스케일러는 기본값 "0.5" 를 사용합니다. 이 값은 50% 사용률에 해당합니다. 이 값은 문자열로 표현되어야 합니다.
참고

스케일링 작업을 수행할 때 클러스터 자동 스케일러는 클러스터에서 배포할 최소 및 최대 코어 수 또는 메모리 양과 같은 ClusterAutoscaler 리소스 정의에 설정된 범위 내에 유지됩니다. 그러나 클러스터 자동 스케일러는 해당 범위 내에 있는 클러스터의 현재 값을 수정하지 않습니다.

최소 및 최대 CPU, 메모리 및 GPU 값은 클러스터 자동 스케일러가 노드를 관리하지 않는 경우에도 클러스터의 모든 노드에서 해당 리소스를 계산하여 결정됩니다. 예를 들어 클러스터 자동 스케일러가 컨트롤 플레인 노드를 관리하지 않는 경우에도 컨트롤 플레인 노드는 클러스터의 총 메모리에서 고려됩니다.

6.8.2. 클러스터 자동 스케일러 배포

클러스터 자동 스케일러를 배포하려면 ClusterAutoscaler 리소스의 인스턴스를 만듭니다.

절차

  1. 사용자 지정 리소스 정의가 포함된 ClusterAutoscaler 리소스에 대한 YAML 파일을 만듭니다.
  2. 다음 명령을 실행하여 클러스터에 사용자 지정 리소스를 생성합니다.

    $ oc create -f <filename>.yaml 1
    1
    <filename >은 사용자 정의 리소스 파일의 이름입니다.
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.