7장. OpenShift Container Platform 클러스터에 자동 스케일링 적용


OpenShift Container Platform 클러스터에 자동 스케일링을 적용하려면클러스터 자동 스케일러를 배포한 다음 클러스터의 각 머신 유형에 대해 머신 자동 스케일러를 배포해야 합니다.

중요

Machine API Operator가 작동하는 클러스터에서만 클러스터 자동 스케일러를 구성할 수 있습니다.

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

클러스터 자동 스케일러는 현재 배포 요구 사항에 따라 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개에 대해 32개의 코어가 있는 노드를 최대 4개까지 추가할 수 있습니다.

제한

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

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

클러스터 자동 스케일러는 예약 가능한 Pod가 생성되는 경우에만 자동 스케일링된 노드 그룹에 노드를 추가합니다. 사용 가능한 노드 유형이 Pod 요청에 대한 요구 사항을 충족할 수 없거나 이러한 요구 사항을 충족할 수 있는 노드 그룹이 최대 크기에 있는 경우 클러스터 자동 스케일러를 확장할 수 없습니다.

다른 스케줄링 기능과의 상호 작용

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

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

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

7.1.1. 클러스터 자동 스케일러 구성

먼저 클러스터 자동 스케일러를 배포하여 OpenShift Container Platform 클러스터에서 리소스의 자동 스케일링을 관리합니다.

참고

클러스터 자동 스케일러의 범위는 전체 클러스터에 설정되므로 클러스터에 대해 하나의 클러스터 자동 스케일러만 만들 수 있습니다.

7.1.1.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: <gpu_type> 7
      min: 0 8
      max: 16 9
  logVerbosity: 4 10
  scaleDown: 11
    enabled: true 12
    delayAfterAdd: 10m 13
    delayAfterDelete: 5m 14
    delayAfterFailure: 30s 15
    unneededTime: 5m 16
    utilizationThreshold: "0.4" 17
  expanders: ["Random"] 18
1
클러스터 자동 스케일러가 추가 노드를 배포하도록 하려면 pod가 초과해야하는 우선 순위를 지정합니다. 32 비트 정수 값을 입력합니다. podPriorityThreshold 값은 각 pod에 할당한 PriorityClass의 값과 비교됩니다.
2
배포할 최대 노드 수를 지정합니다. 이 값은 Autoscaler가 제어하는 머신뿐 만 아니라 클러스터에 배치 된 총 머신 수입니다. 이 값이 모든 컨트롤 플레인 및 컴퓨팅 머신과 MachineAutoscaler 리소스에 지정한 총 복제본 수에 대응할 수 있을 만큼 충분한 크기의 값인지 확인합니다.
3
클러스터에 배포할 최소 코어 수를 지정합니다.
4
클러스터에 배포할 최대 코어 수를 지정합니다.
5
클러스터에서 최소 메모리 크기를 GiB 단위로 지정합니다.
6
클러스터에서 최대 메모리 크기를 GiB단위로 지정합니다.
7
선택 사항: GPU 사용 노드를 배포하도록 클러스터 자동 스케일러를 구성하려면 유형 값을 지정합니다. 이 값은 해당 유형의 GPU 사용 노드를 관리하는 머신 세트의 spec.template.spec.metadata.labels[cluster-api/accelerator] 레이블 값과 일치해야 합니다. 예를 들어 이 값은 Nvidia T4 GPU를 나타내는 nvidia-t4 이거나 A10G GPU의 경우 nvidia-a10g 일 수 있습니다. 자세한 내용은 "클러스터 자동 스케일러의 GPU 머신 세트 레이블"을 참조하십시오.
8
클러스터에 배포할 지정된 유형의 최소 GPU 수를 지정합니다.
9
클러스터에 배포할 지정된 유형의 최대 GPU 수를 지정합니다.
10
0 에서 10 사이의 로깅 상세 정보 표시 수준을 지정합니다. 지침에는 다음 로그 수준 임계값이 제공됩니다.
  • 1: (기본값) 변경 사항에 대한 기본 정보입니다.
  • 4: 일반적인 문제 해결을 위한 디버그 수준 상세 정보 표시
  • 9: 광범위한 프로토콜 수준 디버깅 정보입니다.

값을 지정하지 않으면 기본값 1 이 사용됩니다.

11
이 섹션에서는 ns, us, ms, s, mh를 포함하여 유효한 ParseDuration 간격을 사용하여 각 작업에 대해 대기하는 기간을 지정할 수 있습니다.
12
클러스터 자동 스케일러가 불필요한 노드를 제거할 수 있는지 여부를 지정합니다.
13
선택 사항: 최근에 노드를 추가한 후 노드를 삭제하기 전에 대기할 기간을 지정합니다. 값을 지정하지 않으면 기본값으로 10m이 사용됩니다.
14
선택 사항: 최근에 노드가 삭제된 후 노드를 삭제하기 전에 대기할 기간을 지정합니다. 값을 지정하지 않으면 기본값 0s 가 사용됩니다.
15
선택 사항: 축소 실패 후 노드를 삭제하기 전에 대기할 기간을 지정합니다. 값을 지정하지 않으면 기본값으로 3m가 사용됩니다.
16
선택 사항: 불필요한 노드를 삭제할 수 있을 때까지 기간을 지정합니다. 값을 지정하지 않으면 기본값으로 10m이 사용됩니다.
17
선택 사항: 노드 사용률 수준을 지정합니다. 이 사용률 수준의 노드는 삭제할 수 있습니다.

노드 사용률 수준은 요청된 리소스를 노드에 대해 할당된 리소스로 나눈 합계이며 "0" 보다 크지만 "1" 미만이어야 합니다. 값을 지정하지 않으면 클러스터 자동 스케일러는 기본값 "0.5" 를 사용하며 이는 사용률 50%에 해당합니다. 이 값을 문자열로 표현해야 합니다.

18
선택 사항: 클러스터 자동 스케일러를 사용할 확장기를 지정합니다. 다음 값이 유효합니다.
  • LeastWaste: 확장 후 유휴 CPU를 최소화하는 머신 세트를 선택합니다. 여러 머신 세트가 동일한 양의 유휴 CPU를 생성하는 경우 선택 사항으로 사용되지 않는 메모리가 최소화됩니다.
  • Priority: 사용자가 할당한 우선 순위가 가장 높은 머신 세트를 선택합니다. 이 확장기를 사용하려면 머신 세트의 우선 순위를 정의하는 구성 맵을 생성해야 합니다. 자세한 내용은 "클러스터 자동 스케일러의 우선 순위 확장기 구성"을 참조하십시오.
  • random: (기본값) 머신 세트를 임의로 선택합니다.

값을 지정하지 않으면 기본값 Random 이 사용됩니다.

[LeastWaste, Priority] 형식을 사용하여 여러 확장자를 지정할 수 있습니다. 클러스터 자동 스케일러는 지정된 순서에 따라 각 확장기를 적용합니다.

[LeastWaste, Priority] 예에서 클러스터 자동 스케일러는 먼저 LeastWaste 기준에 따라 평가됩니다. 둘 이상의 머신 세트가 LeastWaste 기준을 동일하게 충족하면 클러스터 자동 스케일러가 우선 순위 기준에 따라 평가됩니다. 두 개 이상의 머신 세트가 지정된 모든 확장기를 동일하게 충족하는 경우 클러스터 자동 스케일러는 무작위로 사용할 머신을 선택합니다.

참고

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

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

7.1.1.2. 클러스터 자동 스케일러의 우선 순위 확장기 구성

클러스터 자동 스케일러가 우선 순위 확장기를 사용하는 경우 사용자가 할당한 우선 순위가 가장 높은 머신 세트를 사용하여 확장됩니다. 이 확장기를 사용하려면 머신 세트의 우선 순위를 정의하는 구성 맵을 생성해야 합니다.

지정된 각 우선 순위 수준에 대해 정규식을 생성하여 선택하도록 머신 세트의 우선 순위를 지정할 때 사용할 머신 세트를 식별해야 합니다. 정규 표현식은 클러스터 자동 스케일러가 선택하도록 고려할 모든 컴퓨팅 머신 세트의 이름과 일치해야 합니다.

사전 요구 사항

  • Machine API를 사용하는 OpenShift Container Platform 클러스터를 배포했습니다.
  • cluster-admin 권한이 있는 계정을 사용하여 클러스터에 액세스할 수 있습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.

프로세스

  1. 다음 명령을 실행하여 클러스터의 컴퓨팅 머신 세트를 나열합니다.

    $ oc get machinesets.machine.openshift.io

    출력 예

    NAME                                        DESIRED   CURRENT   READY   AVAILABLE   AGE
    archive-agl030519-vplxk-worker-us-east-1c   1         1         1       1           25m
    fast-01-agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
    fast-02-agl030519-vplxk-worker-us-east-1a   1         1         1       1           55m
    fast-03-agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
    fast-04-agl030519-vplxk-worker-us-east-1b   1         1         1       1           55m
    prod-01-agl030519-vplxk-worker-us-east-1a   1         1         1       1           33m
    prod-02-agl030519-vplxk-worker-us-east-1c   1         1         1       1           33m

  2. 정규 표현식을 사용하여 우선 순위 수준을 설정할 컴퓨팅 머신 세트의 이름과 일치하는 패턴을 하나 이상 구성합니다.

    예를 들어 정규식 패턴 *fast* 을 사용하여 이름에 문자열이 빠르게 포함된 모든 컴퓨팅 머신 세트와 일치합니다.

  3. 다음과 유사한 구성 맵을 정의하는 cluster-autoscaler-priority-expander.yml YAML 파일을 생성합니다.

    우선순위 확장기 구성 맵의 예

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: cluster-autoscaler-priority-expander 1
      namespace: openshift-machine-api 2
    data:
      priorities: |- 3
        10:
          - .*fast.*
          - .*archive.*
        40:
          - .*prod.*

    1
    구성 맵의 이름을 cluster-autoscaler-priority-expander 로 지정해야 합니다.
    2
    openshift-machine-api 네임스페이스인 클러스터 자동 스케일러 Pod와 동일한 네임스페이스에 구성 맵을 생성해야 합니다.
    3
    머신 세트의 우선 순위를 정의합니다.

    우선순위 값은 양의 정수여야 합니다. 클러스터 자동 스케일러는 낮은 값 우선 순위보다 높은 값 우선 순위를 사용합니다.

    각 우선 순위 수준에 사용할 머신 세트에 해당하는 정규식을 지정합니다.

  4. 다음 명령을 실행하여 구성 맵을 생성합니다.

    $ oc create configmap cluster-autoscaler-priority-expander \
      --from-file=<location_of_config_map_file>/cluster-autoscaler-priority-expander.yml

검증

  • 다음 명령을 실행하여 구성 맵을 검토합니다.

    $ oc get configmaps cluster-autoscaler-priority-expander -o yaml

다음 단계

  • priority expander를 사용하려면 ClusterAutoscaler 리소스 정의가 expanders: ["Priority"] 매개변수를 사용하도록 구성되어 있는지 확인합니다.

7.1.1.3. 클러스터 자동 스케일러의 GPU 머신 세트 레이블 지정

머신 세트 레이블을 사용하여 클러스터 자동 스케일러가 GPU 지원 노드를 배포하는 데 사용할 수 있는 시스템을 표시할 수 있습니다.

사전 요구 사항

  • 클러스터는 클러스터 자동 스케일러를 사용합니다.

프로세스

  • GPU 사용 노드를 배포하는 데 사용할 클러스터 자동 스케일러 시스템을 생성할 머신 세트에서 cluster-api/accelerator 레이블을 추가합니다.

    apiVersion: machine.openshift.io/v1beta1
    kind: MachineSet
    metadata:
      name: machine-set-name
    spec:
      template:
        spec:
          metadata:
            labels:
              cluster-api/accelerator: nvidia-t4 1
    1
    영숫자 문자 -, _ 또는 . 로 구성되며 영숫자 문자로 시작하고 끝나는 레이블을 지정합니다. 예를 들어 nvidia-t4 를 사용하여 Nvidia T4 GPU를 표시하거나 A10G GPU의 경우 nvidia-a10g 를 사용할 수 있습니다.
    참고

    ClusterAutoscaler CR의 spec.resourceLimits.gpus.type 매개변수에 대해 이 레이블의 값을 지정해야 합니다. 자세한 내용은 "클러스터 자동 스케일러 리소스 정의"를 참조하십시오.

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