2.4. 수평 Pod 자동 스케일러를 사용하여 Pod 자동 스케일링


개발자는 HPA(수평 Pod 자동 스케일러)를 사용하여 해당 복제 컨트롤러 또는 배포 구성에 속하는 Pod에서 수집한 메트릭을 기반으로 OpenShift Container Platform에서 복제 컨트롤러 또는 배포 구성의 규모를 자동으로 늘리거나 줄이는 방법을 지정할 수 있습니다. 모든 배포, 배포 구성, 복제 세트, 복제 컨트롤러 또는 상태 저장 세트에 대해 HPA를 생성할 수 있습니다.

사용자 지정 메트릭을 기반으로 Pod 크기를 조정하는 방법에 대한 자세한 내용은 사용자 지정 메트릭을 기반으로 Pod를 자동으로 크기 조정을 참조하세요.

참고

다른 객체가 제공하는 특정 기능이나 동작이 필요하지 않은 한, 배포 객체나 ReplicaSet 객체를 사용하는 것이 좋습니다. 이러한 개체에 대한 자세한 내용은 배포 이해를 참조하세요.

2.4.1. 수평 Pod 자동 스케일러 이해

수평 Pod 자동 스케일러를 생성하여 실행하려는 최소 및 최대 Pod 수와 Pod에서 목표로 하는 CPU 사용률 또는 메모리 사용률을 지정할 수 있습니다.

수평 Pod 자동 스케일러를 생성하면 OpenShift Container Platform에서 Pod의 CPU 및/또는 메모리 리소스 메트릭을 쿼리합니다. 이러한 메트릭을 사용할 수 있는 경우 수평 Pod 자동 스케일러에서 현재 메트릭 사용률과 원하는 메트릭 사용률의 비율을 계산하고 그에 따라 확장 또는 축소합니다. 쿼리 및 스케일링은 정기적으로 수행되지만 메트릭을 사용할 수 있을 때까지 1~2분이 걸릴 수 있습니다.

복제 컨트롤러의 경우 이러한 스케일링은 복제 컨트롤러의 복제본과 직접적으로 일치합니다. 배포 구성의 경우 스케일링은 배포 구성의 복제본 수와 직접적으로 일치합니다. 자동 스케일링은 Complete 단계에서 최신 배포에만 적용됩니다.

OpenShift Container Platform은 리소스를 자동으로 차지하여 시작하는 동안과 같이 리소스가 급증하는 동안 불필요한 자동 스케일링을 방지합니다. unready 상태의 Pod는 확장 시 CPU 사용량이 0이고, 축소 시에는 자동 스케일러에서 Pod를 무시합니다. 알려진 메트릭이 없는 Pod는 확장 시 CPU 사용량이 0%이고, 축소 시에는 100%입니다. 이를 통해 HPA를 결정하는 동안 안정성이 향상됩니다. 이 기능을 사용하려면 준비 상태 점검을 구성하여 새 Pod를 사용할 준비가 되었는지 확인해야 합니다.

수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다.

2.4.1.1. 지원되는 메트릭

수평 Pod 자동 스케일러에서는 다음 메트릭을 지원합니다.

Expand
표 2.1. 메트릭
메트릭설명API 버전

CPU 사용

사용되는 CPU 코어의 수입니다. Pod에서 요청하는 CPU의 백분율을 계산하는 데 사용할 수 있습니다.

autoscaling/v1, autoscaling/v2

메모리 사용률

사용되는 메모리의 양입니다. Pod에서 요청하는 메모리의 백분율을 계산하는 데 사용할 수 있습니다.

autoscaling/v2

중요

메모리 기반 자동 스케일링의 경우 메모리 사용량이 복제본 수에 비례하여 증가 및 감소해야 합니다. 평균적으로 다음과 같습니다.

  • 복제본 수가 증가하면 Pod당 메모리(작업 집합) 사용량이 전반적으로 감소해야 합니다.
  • 복제본 수가 감소하면 Pod별 메모리 사용량이 전반적으로 증가해야 합니다.

메모리 기반 자동 스케일링을 사용하기 전에 OpenShift Container Platform 웹 콘솔을 사용하여 애플리케이션의 메모리 동작을 확인하고 애플리케이션이 해당 요구 사항을 충족하는지 확인하십시오.

다음 예제에서는 hello-node 배포 객체에 대한 자동 크기 조정을 보여줍니다. 초기 배포에는 Pod 3개가 필요합니다. HPA 객체는 최소값을 5로 늘립니다. 포드의 CPU 사용량이 75%에 도달하면 포드가 7개로 늘어납니다.

$ oc autoscale deployment/hello-node --min=5 --max=7 --cpu-percent=75
Copy to Clipboard Toggle word wrap

출력 예

horizontalpodautoscaler.autoscaling/hello-node autoscaled
Copy to Clipboard Toggle word wrap

minReplicas를 3으로 설정하여 hello-node 배포 개체에 대한 HPA를 생성하는 샘플 YAML

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  name: hello-node
  namespace: default
spec:
  maxReplicas: 7
  minReplicas: 3
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: hello-node
  targetCPUUtilizationPercentage: 75
status:
  currentReplicas: 5
  desiredReplicas: 0
Copy to Clipboard Toggle word wrap

HPA를 만든 후 다음 명령을 실행하여 배포의 새로운 상태를 볼 수 있습니다.

$ oc get deployment hello-node
Copy to Clipboard Toggle word wrap

이제 배포에 Pod 5개가 있습니다.

출력 예

NAME         REVISION   DESIRED   CURRENT   TRIGGERED BY
hello-node   1          5         5         config
Copy to Clipboard Toggle word wrap

2.4.2. HPA는 어떻게 작동하나요?

수평 포드 자동 확장기(HPA)는 포드 자동 확장의 개념을 확장합니다. HPA를 사용하면 부하 분산 노드 그룹을 만들고 관리할 수 있습니다. HPA는 주어진 CPU 또는 메모리 임계값을 초과하면 포드 수를 자동으로 늘리거나 줄입니다.

그림 2.1. HPA의 고수준 워크플로

HPA는 Kubernetes 자동 확장 API 그룹의 API 리소스입니다. 자동 확장 기능은 동기화 기간을 기본적으로 15초로 설정하는 제어 루프로 작동합니다. 이 기간 동안 컨트롤러 관리자는 HPA의 YAML 파일에 정의된 내용에 대해 CPU, 메모리 사용률 또는 둘 다를 쿼리합니다. 컨트롤러 관리자는 HPA의 대상이 되는 각 포드에 대한 CPU나 메모리와 같은 포드별 리소스 메트릭에 대한 리소스 메트릭 API에서 활용도 메트릭을 가져옵니다.

활용도 값 목표가 설정된 경우, 컨트롤러는 각 포드의 컨테이너에 대한 동등한 리소스 요청의 백분율로 활용도 값을 계산합니다. 그런 다음 컨트롤러는 대상 포드 전체의 활용도 평균을 구하고 원하는 복제본 수를 조정하는 데 사용되는 비율을 생성합니다. HPA는 메트릭 서버에서 제공하는 metrics.k8s.io 에서 메트릭을 가져오도록 구성되어 있습니다. 메트릭 평가의 동적 특성으로 인해 복제본 그룹의 크기 조정 중에 복제본 수가 변동될 수 있습니다.

참고

HPA를 구현하려면 대상 포드 모두의 컨테이너에 리소스 요청이 설정되어 있어야 합니다.

2.4.3. 요청 및 제한에 관하여

스케줄러는 포드 내 컨테이너에 대해 지정한 리소스 요청을 사용하여 포드를 어느 노드에 배치할지 결정합니다. kubelet은 컨테이너에 대해 지정한 리소스 제한을 적용하여 컨테이너가 지정된 제한 이상을 사용하지 못하도록 합니다. 또한 kubelet은 해당 컨테이너가 사용할 시스템 리소스의 요청량을 특별히 예약합니다.

리소스 메트릭을 어떻게 사용하나요?

Pod 사양에서는 CPU, 메모리 등의 리소스 요청을 지정해야 합니다. HPA는 이 사양을 사용하여 리소스 활용도를 확인한 다음 대상을 확대하거나 축소합니다.

예를 들어, HPA 객체는 다음과 같은 메트릭 소스를 사용합니다.

type: Resource
resource:
  name: cpu
  target:
    type: Utilization
    averageUtilization: 60
Copy to Clipboard Toggle word wrap

이 예에서 HPA는 확장 대상에서 포드의 평균 활용도를 60%로 유지합니다. 활용도는 현재 리소스 사용량과 포드의 요청된 리소스 간의 비율입니다.

2.4.4. 모범 사례

모든 포드에는 리소스 요청이 구성되어 있어야 합니다.

HPA는 OpenShift Container Platform 클러스터의 포드에서 관찰된 CPU 또는 메모리 사용률 값을 기반으로 확장 결정을 내립니다. 활용도 값은 각 포드의 리소스 요청에 대한 백분율로 계산됩니다. 리소스 요청 값이 누락되면 HPA의 최적 성능에 영향을 미칠 수 있습니다.

쿨다운 기간 구성

수평적 포드 자동 확장 중에는 시간 간격 없이 이벤트가 빠르게 확장될 수 있습니다. 복제본 변동이 잦아지는 것을 방지하기 위해 쿨다운 기간을 구성합니다. stabilizationWindowSeconds 필드를 구성하여 쿨다운 기간을 지정할 수 있습니다. 안정화 창은 확장에 사용되는 지표가 계속 변동할 때 복제본 수의 변동을 제한하는 데 사용됩니다. 자동 확장 알고리즘은 이 창을 사용하여 이전의 원하는 상태를 추론하고 작업 부하 규모에 대한 원치 않는 변경을 방지합니다.

예를 들어, scaleDown 필드에 안정화 창이 지정됩니다.

behavior:
  scaleDown:
    stabilizationWindowSeconds: 300
Copy to Clipboard Toggle word wrap

위의 예에서는 지난 5분 동안의 모든 원하는 상태가 고려됩니다. 이는 롤링 최대값에 근접하며, 스케일링 알고리즘이 포드를 자주 제거한 후 몇 분 후에 동등한 포드를 다시 생성하는 것을 방지합니다.

2.4.4.1. 스케일링 정책

자동 확장/v2 API를 사용하면 수평적 Pod 자동 확장기에 확장 정책을 추가할 수 있습니다. 스케일링 정책은 OpenShift Container Platform HPA(수평 Pod 자동 스케일러)에서 Pod를 스케일링하는 방법을 제어합니다. 스케일링 정책을 사용하면 지정된 기간에 스케일링할 특정 수 또는 특정 백분율을 설정하여 HPA에서 Pod를 확장 또는 축소하는 비율을 제한할 수 있습니다. 또한 메트릭이 계속 변동하는 경우 이전에 계산한 원하는 상태를 사용하여 스케일링을 제어하는 안정화 기간을 정의할 수 있습니다. 동일한 스케일링 방향(확장 또는 축소)에 대해 여러 정책을 생성하여 변경 정도에 따라 사용할 정책을 결정할 수 있습니다. 반복 시간을 지정하여 스케일링을 제한할 수도 있습니다. HPA는 반복 중 Pod를 스케일링한 다음 필요에 따라 추가 반복에서 스케일링을 수행합니다.

스케일링 정책이 포함된 HPA 오브젝트 샘플

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-resource-metrics-memory
  namespace: default
spec:
  behavior:
    scaleDown: 
1

      policies: 
2

      - type: Pods 
3

        value: 4 
4

        periodSeconds: 60 
5

      - type: Percent
        value: 10 
6

        periodSeconds: 60
      selectPolicy: Min 
7

      stabilizationWindowSeconds: 300 
8

    scaleUp: 
9

      policies:
      - type: Pods
        value: 5 
10

        periodSeconds: 70
      - type: Percent
        value: 12 
11

        periodSeconds: 80
      selectPolicy: Max
      stabilizationWindowSeconds: 0
...
Copy to Clipboard Toggle word wrap

1
스케일링 정책의 방향, 즉 scaleDown 또는 scaleUp을 지정합니다. 이 예제에서는 축소 정책을 생성합니다.
2
스케일링 정책을 정의합니다.
3
정책이 각 반복에서 특정 Pod 수 또는 Pod 백분율로 스케일링하는지의 여부를 결정합니다. 기본값은 pods입니다.
4
각 반복 중에 포드 수 또는 포드 비율 등 확장 정도를 제한합니다. Pod 수에 따라 축소할 기본값은 없습니다.
5
스케일링 반복의 길이를 결정합니다. 기본값은 15초입니다.
6
백분율로 된 축소 기본값은 100%입니다.
7
여러 정책이 정의된 경우 먼저 사용할 정책을 결정합니다. 가장 많은 변경을 허용하는 정책을 사용하려면 Max를 지정하고, 최소 변경을 허용하는 정책을 사용하려면 Min을 지정합니다. HPA에서 해당 정책 방향으로 스케일링하지 않도록 하려면 Disabled를 지정합니다. 기본값은 Max입니다.
8
HPA에서 원하는 상태를 검토해야 하는 기간을 결정합니다. 기본값은 0입니다.
9
이 예제에서는 확장 정책을 생성합니다.
10
확장 가능 범위를 포드 수로 제한합니다. Pod 수 확장 기본값은 4%입니다.
11
포드의 비율로 확장 범위를 제한합니다. 백분율로 된 확장 기본값은 100%입니다.

축소 정책의 예

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: hpa-resource-metrics-memory
  namespace: default
spec:
...
  minReplicas: 20
...
  behavior:
    scaleDown:
      stabilizationWindowSeconds: 300
      policies:
      - type: Pods
        value: 4
        periodSeconds: 30
      - type: Percent
        value: 10
        periodSeconds: 60
      selectPolicy: Max
    scaleUp:
      selectPolicy: Disabled
Copy to Clipboard Toggle word wrap

이 예제에서 Pod 수가 40개를 초과하면 selectPolicy에서 요구하는 대로 해당 정책으로 인해 상당한 변경이 발생하므로 축소에 백분율 기반 정책이 사용됩니다.

Pod 복제본이 80개 있는 경우 HPA는 첫 번째 반복에서 1분(periodSeconds: 60)에 걸쳐 (type: Percentvalue: 10 매개변수에 따라) Pod 80개 중 10%에 해당하는 8개의 Pod를 줄입니다. 다음 반복에서는 Pod가 72개입니다. HPA는 나머지 Pod의 10%를 계산한 7.2개를 8개로 올림하여 Pod 8개를 축소합니다. 이후 반복할 때마다 나머지 Pod 수에 따라 스케일링할 Pod 수가 다시 계산됩니다. Pod 수가 40개 미만으로 줄어들면 Pod 기반 숫자가 백분율 기반 숫자보다 크기 때문에 Pod 기반 정책이 적용됩니다. HPA는 20개의 복제본(minReplicas)이 남아 있을 때까지 30초(periodSeconds: 30)에 걸쳐 한 번에 Pod를 4개씩 줄입니다(type: Podsvalue: 4).

selectPolicy: Disabled 매개변수를 사용하면 HPA에서 Pod를 확장하지 못합니다. 필요한 경우 복제본 세트 또는 배포 세트의 복제본 수를 조정하여 수동으로 확장할 수 있습니다.

설정되어 있는 경우 oc edit 명령을 사용하여 스케일링 정책을 확인할 수 있습니다.

$ oc edit hpa hpa-resource-metrics-memory
Copy to Clipboard Toggle word wrap

출력 예

apiVersion: autoscaling/v1
kind: HorizontalPodAutoscaler
metadata:
  annotations:
    autoscaling.alpha.kubernetes.io/behavior:\
'{"ScaleUp":{"StabilizationWindowSeconds":0,"SelectPolicy":"Max","Policies":[{"Type":"Pods","Value":4,"PeriodSeconds":15},{"Type":"Percent","Value":100,"PeriodSeconds":15}]},\
"ScaleDown":{"StabilizationWindowSeconds":300,"SelectPolicy":"Min","Policies":[{"Type":"Pods","Value":4,"PeriodSeconds":60},{"Type":"Percent","Value":10,"PeriodSeconds":60}]}}'
...
Copy to Clipboard Toggle word wrap

2.4.5. 웹 콘솔을 사용하여 수평 Pod 자동 스케일러 생성

웹 콘솔에서 배포 또는 배포 구성 개체에서 실행하려는 최소 및 최대 포드 수를 지정하는 수평 포드 자동 확장기(HPA)를 만들 수 있습니다. 또한 포드가 목표로 삼아야 할 CPU 또는 메모리 사용량을 정의할 수도 있습니다.

참고

HPA는 Operator 지원 서비스, Knative 서비스 또는 Helm 차트의 일부인 배포에 추가할 수 없습니다.

프로세스

웹 콘솔에서 HPA를 생성하려면 다음을 수행합니다.

  1. 토폴로지 보기에서 노드를 클릭하여 측면 창을 표시합니다.
  2. 작업 드롭다운 목록에서 HorizontalPodAutoscaler 추가 를 선택하여 HorizontalPodAutoscaler 추가 양식을 엽니다.

    그림 2.2. Add HorizontalPodAutoscaler

  3. HorizontalPodAutoscaler 추가 양식에서 이름, 최소 및 최대 Pod 제한, CPU 및 메모리 사용량을 정의하고 저장을 클릭합니다.

    참고

    CPU 및 메모리 사용량에 대한 값이 없는 경우 경고가 표시됩니다.

웹 콘솔에서 HPA를 편집하려면 다음을 수행합니다.

  1. 토폴로지 보기에서 노드를 클릭하여 측면 창을 표시합니다.
  2. 작업 드롭다운 목록에서 HorizontalPodAutoscaler 편집을 선택하여 Horizontal Pod Autoscaler 편집 양식을 엽니다.
  3. Horizontal Pod Autoscaler 편집 양식에서 최소 및 최대 Pod 제한과 CPU 및 메모리 사용량을 편집한 다음 저장을 클릭합니다.
참고

웹 콘솔에서 수평 Pod 자동 스케일러를 생성하거나 편집하는 동안 양식 보기에서 YAML 보기로 전환할 수 있습니다.

웹 콘솔에서 HPA를 제거하려면 다음을 수행합니다.

  1. 토폴로지 보기에서 노드를 클릭하여 측면 창을 표시합니다.
  2. 작업 드롭다운 목록에서 HorizontalPodAutoscaler 제거를 선택합니다.
  3. 확인 팝업 창에서 제거를 클릭하여 HPA를 제거합니다.

2.4.6. CLI를 사용하여 CPU 사용률에 대한 수평 Pod 자동 스케일러 생성

OpenShift Container Platform CLI를 사용하면 기존 Deployment , DeploymentConfig , ReplicaSet , ReplicationController 또는 StatefulSet 객체를 자동으로 확장하는 수평적 Pod 자동 확장기(HPA)를 만들 수 있습니다. HPA는 사용자가 지정한 CPU 사용량을 유지하기 위해 해당 객체와 연관된 포드의 크기를 조정합니다.

참고

다른 객체가 제공하는 특정 기능이나 동작이 필요하지 않은 한, 배포 객체나 ReplicaSet 객체를 사용하는 것이 좋습니다.

HPA는 최소 및 최대 개수 사이에서 복제본 수를 늘리거나 줄여 전체 Pod에서 지정된 CPU 사용률을 유지합니다.

CPU 사용률을 자동 스케일링할 때는 oc autoscale 명령을 사용하여 언제든지 실행하려는 최소 및 최대 Pod 수와 Pod에서 목표로 하는 평균 CPU 사용률을 지정할 수 있습니다. 최솟값을 지정하지 않으면 Pod에 OpenShift Container Platform 서버의 기본값이 지정됩니다.

특정 CPU 값을 자동 스케일링하려면 대상 CPU 및 Pod 제한을 사용하여 HorizontalPodAutoscaler 오브젝트를 생성합니다.

사전 요구 사항

수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다. oc describe PodMetrics <pod-name> 명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력이 다음과 유사하게 표시되고 UsageCpuMemory가 표시됩니다.

$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Copy to Clipboard Toggle word wrap

출력 예

Name:         openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Namespace:    openshift-kube-scheduler
Labels:       <none>
Annotations:  <none>
API Version:  metrics.k8s.io/v1beta1
Containers:
  Name:  wait-for-host-port
  Usage:
    Memory:  0
  Name:      scheduler
  Usage:
    Cpu:     8m
    Memory:  45440Ki
Kind:        PodMetrics
Metadata:
  Creation Timestamp:  2019-05-23T18:47:56Z
  Self Link:           /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Timestamp:             2019-05-23T18:47:56Z
Window:                1m0s
Events:                <none>
Copy to Clipboard Toggle word wrap

프로세스

CPU 사용률에 대한 수평 Pod 자동 스케일러를 생성하려면 다음을 수행합니다.

  1. 다음 중 하나를 수행하세요.

    • CPU 사용률 백분율에 따라 크기를 조정하려면 기존 객체에 대한 HorizontalPodAutoscaler 객체를 만듭니다.

      $ oc autoscale <object_type>/<name> \
      1
      
        --min <number> \
      2
      
        --max <number> \
      3
      
        --cpu-percent=<percent> 
      4
      Copy to Clipboard Toggle word wrap
      1
      자동 크기 조정을 수행할 객체의 유형과 이름을 지정합니다. 해당 객체는 존재해야 하며, Deployment , DeploymentConfig / dc , ReplicaSet / rs , ReplicationController / rc 또는 StatefulSet 이어야 합니다.
      2
      필요한 경우 축소 시 최소 복제본 수를 지정합니다.
      3
      확장 시 최대 복제본 수를 지정합니다.
      4
      요청된 CPU의 백분율로 표시되는 모든 Pod의 목표 평균 CPU 사용량을 지정합니다. 지정하지 않거나 음수가 아닌 경우 기본 자동 스케일링 정책이 사용됩니다.

      예를 들어, 다음 명령은 hello-node 배포 개체에 대한 자동 크기 조정을 보여줍니다. 초기 배포에는 Pod 3개가 필요합니다. HPA 객체는 최소값을 5로 늘립니다. 포드의 CPU 사용량이 75%에 도달하면 포드가 7개로 늘어납니다.

      $ oc autoscale deployment/hello-node --min=5 --max=7 --cpu-percent=75
      Copy to Clipboard Toggle word wrap
    • 특정 CPU 값에 맞게 확장하려면 기존 개체에 대해 다음과 유사한 YAML 파일을 만듭니다.

      1. 다음과 유사한 YAML 파일을 생성합니다.

        apiVersion: autoscaling/v2 
        1
        
        kind: HorizontalPodAutoscaler
        metadata:
          name: cpu-autoscale 
        2
        
          namespace: default
        spec:
          scaleTargetRef:
            apiVersion: apps/v1 
        3
        
            kind: Deployment 
        4
        
            name: example 
        5
        
          minReplicas: 1 
        6
        
          maxReplicas: 10 
        7
        
          metrics: 
        8
        
          - type: Resource
            resource:
              name: cpu 
        9
        
              target:
                type: AverageValue 
        10
        
                averageValue: 500m 
        11
        Copy to Clipboard Toggle word wrap
        1
        자동 확장/v2 API를 사용하세요.
        2
        이 수평 Pod 자동 스케일러 오브젝트의 이름을 지정합니다.
        3
        스케일링할 오브젝트의 API 버전을 지정합니다.
        • 배포 , ReplicaSet , Statefulset 개체의 경우 apps/v1을 사용합니다.
        • ReplicationController 의 경우 v1을 사용합니다.
        • DeploymentConfig 의 경우 apps.openshift.io/v1을 사용하세요.
        4
        객체의 유형을 지정합니다. 객체는 Deployment , DeploymentConfig / dc , ReplicaSet / rs , ReplicationController / rc 또는 StatefulSet 이어야 합니다.
        5
        스케일링할 오브젝트의 이름을 지정합니다. 오브젝트가 있어야 합니다.
        6
        축소 시 최소 복제본 수를 지정합니다.
        7
        확장 시 최대 복제본 수를 지정합니다.
        8
        메모리 사용률에 metrics 매개변수를 사용합니다.
        9
        CPU 사용률에 cpu를 지정합니다.
        10
        AverageValue로 설정합니다.
        11
        대상 CPU 값을 사용하여 averageValue로 설정합니다.
      2. 수평 Pod 자동 스케일러를 생성합니다.

        $ oc create -f <file-name>.yaml
        Copy to Clipboard Toggle word wrap
  2. 수평 Pod 자동 스케일러가 생성되었는지 확인합니다.

    $ oc get hpa cpu-autoscale
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME            REFERENCE            TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    cpu-autoscale   Deployment/example   173m/500m       1         10        1          20m
    Copy to Clipboard Toggle word wrap

OpenShift Container Platform CLI를 사용하면 기존 Deployment , DeploymentConfig , ReplicaSet , ReplicationController 또는 StatefulSet 객체를 자동으로 확장하는 수평적 Pod 자동 확장기(HPA)를 만들 수 있습니다. HPA는 사용자가 지정한 평균 메모리 사용량(직접적인 값 또는 요청된 메모리의 백분율)을 유지하기 위해 해당 객체와 연관된 포드의 크기를 조정합니다.

참고

다른 객체가 제공하는 특정 기능이나 동작이 필요하지 않은 한, 배포 객체나 ReplicaSet 객체를 사용하는 것이 좋습니다.

HPA는 최소 및 최대 개수 사이에서 복제본 수를 늘리거나 줄여 전체 Pod에서 지정된 메모리 사용률을 유지합니다.

메모리 사용률의 경우 최소 및 최대 Pod 수와 Pod에서 목표로 해야 하는 평균 메모리 사용률을 지정할 수 있습니다. 최솟값을 지정하지 않으면 Pod에 OpenShift Container Platform 서버의 기본값이 지정됩니다.

사전 요구 사항

수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다. oc describe PodMetrics <pod-name> 명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력이 다음과 유사하게 표시되고 UsageCpuMemory가 표시됩니다.

$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-129-223.compute.internal -n openshift-kube-scheduler
Copy to Clipboard Toggle word wrap

출력 예

Name:         openshift-kube-scheduler-ip-10-0-129-223.compute.internal
Namespace:    openshift-kube-scheduler
Labels:       <none>
Annotations:  <none>
API Version:  metrics.k8s.io/v1beta1
Containers:
  Name:  wait-for-host-port
  Usage:
    Cpu:     0
    Memory:  0
  Name:      scheduler
  Usage:
    Cpu:     8m
    Memory:  45440Ki
Kind:        PodMetrics
Metadata:
  Creation Timestamp:  2020-02-14T22:21:14Z
  Self Link:           /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-129-223.compute.internal
Timestamp:             2020-02-14T22:21:14Z
Window:                5m0s
Events:                <none>
Copy to Clipboard Toggle word wrap

프로세스

메모리 사용률에 대한 수평 Pod 자동 스케일러를 생성하려면 다음을 수행합니다.

  1. 다음 중 하나에 대한 YAML 파일을 생성합니다.

    • 특정 메모리 값에 맞게 크기를 조정하려면 기존 객체에 대해 다음과 유사한 HorizontalPodAutoscaler 객체를 만듭니다.

      apiVersion: autoscaling/v2 
      1
      
      kind: HorizontalPodAutoscaler
      metadata:
        name: hpa-resource-metrics-memory 
      2
      
        namespace: default
      spec:
        scaleTargetRef:
          apiVersion: apps/v1 
      3
      
          kind: Deployment 
      4
      
          name: example 
      5
      
        minReplicas: 1 
      6
      
        maxReplicas: 10 
      7
      
        metrics: 
      8
      
        - type: Resource
          resource:
            name: memory 
      9
      
            target:
              type: AverageValue 
      10
      
              averageValue: 500Mi 
      11
      
        behavior: 
      12
      
          scaleDown:
            stabilizationWindowSeconds: 300
            policies:
            - type: Pods
              value: 4
              periodSeconds: 60
            - type: Percent
              value: 10
              periodSeconds: 60
            selectPolicy: Max
      Copy to Clipboard Toggle word wrap
      1
      자동 확장/v2 API를 사용하세요.
      2
      이 수평 Pod 자동 스케일러 오브젝트의 이름을 지정합니다.
      3
      스케일링할 오브젝트의 API 버전을 지정합니다.
      • Deployment , ReplicaSet 또는 Statefulset 개체의 경우 apps/v1을 사용합니다.
      • ReplicationController 의 경우 v1을 사용합니다.
      • DeploymentConfig 의 경우 apps.openshift.io/v1을 사용하세요.
      4
      객체의 유형을 지정합니다. 객체는 Deployment , DeploymentConfig , ReplicaSet , ReplicationController 또는 StatefulSet 이어야 합니다.
      5
      스케일링할 오브젝트의 이름을 지정합니다. 오브젝트가 있어야 합니다.
      6
      축소 시 최소 복제본 수를 지정합니다.
      7
      확장 시 최대 복제본 수를 지정합니다.
      8
      메모리 사용률에 metrics 매개변수를 사용합니다.
      9
      메모리 사용률에 대한 메모리를 지정합니다.
      10
      유형을 AverageValue로 설정합니다.
      11
      averageValue 및 특정 메모리 값을 지정합니다.
      12
      선택 사항: 스케일링 정책을 지정하여 확장 또는 축소비율을 제어합니다.
    • 백분율에 맞게 크기를 조정하려면 기존 객체에 대해 다음과 유사한 HorizontalPodAutoscaler 객체를 만듭니다.

      apiVersion: autoscaling/v2 
      1
      
      kind: HorizontalPodAutoscaler
      metadata:
        name: memory-autoscale 
      2
      
        namespace: default
      spec:
        scaleTargetRef:
          apiVersion: apps/v1 
      3
      
          kind: Deployment 
      4
      
          name: example 
      5
      
        minReplicas: 1 
      6
      
        maxReplicas: 10 
      7
      
        metrics: 
      8
      
        - type: Resource
          resource:
            name: memory 
      9
      
            target:
              type: Utilization 
      10
      
              averageUtilization: 50 
      11
      
        behavior: 
      12
      
          scaleUp:
            stabilizationWindowSeconds: 180
            policies:
            - type: Pods
              value: 6
              periodSeconds: 120
            - type: Percent
              value: 10
              periodSeconds: 120
            selectPolicy: Max
      Copy to Clipboard Toggle word wrap
      1
      자동 확장/v2 API를 사용하세요.
      2
      이 수평 Pod 자동 스케일러 오브젝트의 이름을 지정합니다.
      3
      스케일링할 오브젝트의 API 버전을 지정합니다.
      • ReplicationController의 경우 v1을 사용하세요.
      • 배포 구성의 경우 apps.openshift.io/v1을 사용하세요.
      • 배포, ReplicaSet, Statefulset 개체의 경우 apps/v1을 사용합니다.
      4
      객체의 유형을 지정합니다. 객체는 Deployment , DeploymentConfig , ReplicaSet , ReplicationController 또는 StatefulSet 이어야 합니다.
      5
      스케일링할 오브젝트의 이름을 지정합니다. 오브젝트가 있어야 합니다.
      6
      축소 시 최소 복제본 수를 지정합니다.
      7
      확장 시 최대 복제본 수를 지정합니다.
      8
      메모리 사용률에 metrics 매개변수를 사용합니다.
      9
      메모리 사용률에 대한 메모리를 지정합니다.
      10
      Utilization으로 설정합니다.
      11
      averageUtilization 및 전체 Pod에 대한 대상 평균 메모리 사용률(요청 메모리의 백분율로 표시)을 지정합니다. 대상 Pod에 메모리 요청이 구성되어 있어야 합니다.
      12
      선택 사항: 스케일링 정책을 지정하여 확장 또는 축소비율을 제어합니다.
  2. 수평 Pod 자동 스케일러를 생성합니다.

    $ oc create -f <file-name>.yaml
    Copy to Clipboard Toggle word wrap

    예를 들면 다음과 같습니다.

    $ oc create -f hpa.yaml
    Copy to Clipboard Toggle word wrap

    출력 예

    horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
    Copy to Clipboard Toggle word wrap

  3. 수평 Pod 자동 스케일러가 생성되었는지 확인합니다.

    $ oc get hpa hpa-resource-metrics-memory
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                          REFERENCE            TARGETS         MINPODS   MAXPODS   REPLICAS   AGE
    hpa-resource-metrics-memory   Deployment/example   2441216/500Mi   1         10        1          20m
    Copy to Clipboard Toggle word wrap

    $ oc describe hpa hpa-resource-metrics-memory
    Copy to Clipboard Toggle word wrap

    출력 예

    Name:                        hpa-resource-metrics-memory
    Namespace:                   default
    Labels:                      <none>
    Annotations:                 <none>
    CreationTimestamp:           Wed, 04 Mar 2020 16:31:37 +0530
    Reference:                   Deployment/example
    Metrics:                     ( current / target )
      resource memory on pods:   2441216 / 500Mi
    Min replicas:                1
    Max replicas:                10
    ReplicationController pods:  1 current / 1 desired
    Conditions:
      Type            Status  Reason              Message
      ----            ------  ------              -------
      AbleToScale     True    ReadyForNewScale    recommended size matches current size
      ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from memory resource
      ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
    Events:
      Type     Reason                   Age                 From                       Message
      ----     ------                   ----                ----                       -------
      Normal   SuccessfulRescale        6m34s               horizontal-pod-autoscaler  New size: 1; reason: All metrics below target
    Copy to Clipboard Toggle word wrap

2.4.8. CLI를 사용하여 수평 Pod 자동 스케일러 상태 조건 이해

일련의 상태 조건을 사용하여 HPA(수평 Pod 자동 스케일러)에서 스케일링할 수 있는지 그리고 HPA가 현재 제한되어 있는지의 여부를 결정할 수 있습니다.

HPA 상태 조건은 자동 확장 API v2 버전에서 사용할 수 있습니다.

HPA는 다음과 같은 상태 조건을 통해 응답합니다.

  • AbleToScale 상태는 HPA에서 메트릭을 가져오고 업데이트할 수 있는지의 여부 및 백오프 관련 상태로 스케일링을 방지할 수 있는지의 여부를 나타냅니다.

    • True 조건은 스케일링이 허용되었음을 나타냅니다.
    • False 조건은 지정된 이유로 스케일링이 허용되지 않음을 나타냅니다.
  • ScalingActive 조건은 HPA가 활성화되어 있고(예: 대상의 복제본 수가 0이 아님) 원하는 메트릭을 계산할 수 있는지의 여부를 나타냅니다.

    • True 조건은 메트릭이 제대로 작동함을 나타냅니다.
    • False 조건은 일반적으로 메트릭을 가져오는 데 문제가 있음을 나타냅니다.
  • ScalingLimited 조건은 원하는 스케일링이 수평 Pod 자동 스케일러의 최댓값 또는 최솟값으로 제한되었음을 나타냅니다.

    • True 조건은 스케일링을 위해 최소 또는 최대 복제본 수를 늘리거나 줄여야 함을 나타냅니다.
    • False 조건은 요청된 스케일링이 허용됨을 나타냅니다.

      $ oc describe hpa cm-test
      Copy to Clipboard Toggle word wrap

      출력 예

      Name:                           cm-test
      Namespace:                      prom
      Labels:                         <none>
      Annotations:                    <none>
      CreationTimestamp:              Fri, 16 Jun 2017 18:09:22 +0000
      Reference:                      ReplicationController/cm-test
      Metrics:                        ( current / target )
        "http_requests" on pods:      66m / 500m
      Min replicas:                   1
      Max replicas:                   4
      ReplicationController pods:     1 current / 1 desired
      Conditions: 
      1
      
        Type              Status    Reason              Message
        ----              ------    ------              -------
        AbleToScale       True      ReadyForNewScale    the last scale time was sufficiently old as to warrant a new scale
        ScalingActive     True      ValidMetricFound    the HPA was able to successfully calculate a replica count from pods metric http_request
        ScalingLimited    False     DesiredWithinRange  the desired replica count is within the acceptable range
      Events:
      Copy to Clipboard Toggle word wrap

      1
      수평 Pod 자동 스케일러의 상태 메시지입니다.

다음은 스케일링할 수 없는 Pod의 예입니다.

출력 예

Conditions:
  Type         Status  Reason          Message
  ----         ------  ------          -------
  AbleToScale  False   FailedGetScale  the HPA controller was unable to get the target's current scale: no matches for kind "ReplicationController" in group "apps"
Events:
  Type     Reason          Age               From                       Message
  ----     ------          ----              ----                       -------
  Warning  FailedGetScale  6s (x3 over 36s)  horizontal-pod-autoscaler  no matches for kind "ReplicationController" in group "apps"
Copy to Clipboard Toggle word wrap

다음은 스케일링에 필요한 메트릭을 가져올 수 없는 Pod의 예입니다.

출력 예

Conditions:
  Type                  Status    Reason                    Message
  ----                  ------    ------                    -------
  AbleToScale           True     SucceededGetScale          the HPA controller was able to get the target's current scale
  ScalingActive         False    FailedGetResourceMetric    the HPA was unable to compute the replica count: failed to get cpu utilization: unable to get metrics for resource cpu: no metrics returned from resource metrics API
Copy to Clipboard Toggle word wrap

다음은 요청된 자동 스케일링이 필요한 최솟값보다 적은 Pod의 예입니다.

출력 예

Conditions:
  Type              Status    Reason              Message
  ----              ------    ------              -------
  AbleToScale       True      ReadyForNewScale    the last scale time was sufficiently old as to warrant a new scale
  ScalingActive     True      ValidMetricFound    the HPA was able to successfully calculate a replica count from pods metric http_request
  ScalingLimited    False     DesiredWithinRange  the desired replica count is within the acceptable range
Copy to Clipboard Toggle word wrap

2.4.8.1. CLI를 사용하여 수평 Pod 자동 스케일러 상태 조건 보기

HPA(수평 Pod 자동 스케일러)를 통해 Pod에 설정된 상태 조건을 볼 수 있습니다.

참고

수평적 포드 자동 확장기 상태 조건은 자동 확장 API v2 버전에서 사용할 수 있습니다.

사전 요구 사항

수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다. oc describe PodMetrics <pod-name> 명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력이 다음과 유사하게 표시되고 UsageCpuMemory가 표시됩니다.

$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Copy to Clipboard Toggle word wrap

출력 예

Name:         openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Namespace:    openshift-kube-scheduler
Labels:       <none>
Annotations:  <none>
API Version:  metrics.k8s.io/v1beta1
Containers:
  Name:  wait-for-host-port
  Usage:
    Memory:  0
  Name:      scheduler
  Usage:
    Cpu:     8m
    Memory:  45440Ki
Kind:        PodMetrics
Metadata:
  Creation Timestamp:  2019-05-23T18:47:56Z
  Self Link:           /apis/metrics.k8s.io/v1beta1/namespaces/openshift-kube-scheduler/pods/openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
Timestamp:             2019-05-23T18:47:56Z
Window:                1m0s
Events:                <none>
Copy to Clipboard Toggle word wrap

프로세스

Pod의 상태 조건을 보려면 Pod 이름과 함께 다음 명령을 사용합니다.

$ oc describe hpa <pod-name>
Copy to Clipboard Toggle word wrap

예를 들면 다음과 같습니다.

$ oc describe hpa cm-test
Copy to Clipboard Toggle word wrap

상태가 출력의 Conditions 필드에 나타납니다.

출력 예

Name:                           cm-test
Namespace:                      prom
Labels:                         <none>
Annotations:                    <none>
CreationTimestamp:              Fri, 16 Jun 2017 18:09:22 +0000
Reference:                      ReplicationController/cm-test
Metrics:                        ( current / target )
  "http_requests" on pods:      66m / 500m
Min replicas:                   1
Max replicas:                   4
ReplicationController pods:     1 current / 1 desired
Conditions: 
1

  Type              Status    Reason              Message
  ----              ------    ------              -------
  AbleToScale       True      ReadyForNewScale    the last scale time was sufficiently old as to warrant a new scale
  ScalingActive     True      ValidMetricFound    the HPA was able to successfully calculate a replica count from pods metric http_request
  ScalingLimited    False     DesiredWithinRange  the desired replica count is within the acceptable range
Copy to Clipboard Toggle word wrap

맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat