2.4. 수평 Pod 자동 스케일러를 사용하여 Pod 자동 스케일링
개발자는 HPA(수평 Pod 자동 스케일러)를 사용하여 해당 복제 컨트롤러 또는 배포 구성에 속하는 Pod에서 수집한 메트릭을 기반으로 OpenShift Container Platform에서 복제 컨트롤러 또는 배포 구성의 규모를 자동으로 늘리거나 줄이는 방법을 지정할 수 있습니다. 배포, 배포 구성, 복제본 세트, 복제 컨트롤러 또는 상태 저장 세트에 대해 HPA를 생성할 수 있습니다.
사용자 정의 메트릭을 기반으로 Pod 스케일링에 대한 자세한 내용은 사용자 정의 메트릭을 기반으로 Pod 자동 스케일링을 참조하십시오.
다른 오브젝트에서 제공하는 특정 기능 또는 동작이 필요하지 않는 한 Deployment
오브젝트 또는 ReplicaSet
오브젝트를 사용하는 것이 좋습니다. 이러한 오브젝트에 대한 자세한 내용은 Understanding Deployment and DeploymentConfig objects 에서 참조하십시오.
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 자동 스케일러에서는 다음 메트릭을 지원합니다.
메트릭 | 설명 | API 버전 |
---|---|---|
CPU 사용 | 사용되는 CPU 코어의 수입니다. Pod에서 요청하는 CPU의 백분율을 계산하는 데 사용할 수 있습니다. |
|
메모리 사용률 | 사용되는 메모리의 양입니다. Pod에서 요청하는 메모리의 백분율을 계산하는 데 사용할 수 있습니다. |
|
메모리 기반 자동 스케일링의 경우 메모리 사용량이 복제본 수에 비례하여 증가 및 감소해야 합니다. 평균적으로 다음과 같습니다.
- 복제본 수가 증가하면 Pod당 메모리(작업 집합) 사용량이 전반적으로 감소해야 합니다.
- 복제본 수가 감소하면 Pod별 메모리 사용량이 전반적으로 증가해야 합니다.
메모리 기반 자동 스케일링을 사용하기 전에 OpenShift Container Platform 웹 콘솔을 사용하여 애플리케이션의 메모리 동작을 확인하고 애플리케이션이 해당 요구 사항을 충족하는지 확인하십시오.
다음 예제에서는 image-registry
Deployment
오브젝트의 자동 스케일링을 보여줍니다. 초기 배포에는 Pod 3개가 필요합니다. HPA 오브젝트에서 최소값을 5개로 늘립니다. Pod의 CPU 사용량이 75%에 도달하면 Pod가 7으로 증가합니다.
$ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
출력 예
horizontalpodautoscaler.autoscaling/image-registry autoscaled
minReplicas
가 3으로 설정된 image-registry
Deployment
오브젝트의 샘플 HPA
apiVersion: autoscaling/v1 kind: HorizontalPodAutoscaler metadata: name: image-registry namespace: default spec: maxReplicas: 7 minReplicas: 3 scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: image-registry targetCPUUtilizationPercentage: 75 status: currentReplicas: 5 desiredReplicas: 0
배포의 새 상태를 확인합니다.
$ oc get deployment image-registry
이제 배포에 Pod 5개가 있습니다.
출력 예
NAME REVISION DESIRED CURRENT TRIGGERED BY image-registry 1 5 5 config
2.4.2. HPA는 어떻게 작동합니까?
HPA(수평 Pod 자동 스케일러)는 Pod 자동 확장 개념을 확장합니다. HPA를 사용하면 로드 밸런싱된 노드 그룹을 생성하고 관리할 수 있습니다. HPA는 지정된 CPU 또는 메모리 임계값을 초과하면 Pod 수를 자동으로 늘리거나 줄입니다.
그림 2.1. HPA의 상위 수준 워크플로
HPA는 Kubernetes 자동 스케일링 API 그룹의 API 리소스입니다. 자동 스케일러는 동기화 기간 동안 기본값인 15초의 제어 루프로 작동합니다. 이 기간 동안 컨트롤러 관리자는 HPA에 대해 YAML 파일에 정의된 CPU, 메모리 사용률 또는 둘 다를 쿼리합니다. 컨트롤러 관리자는 HPA에서 대상으로 하는 각 Pod에 대해 CPU 또는 메모리와 같은 Pod별 리소스 지표의 리소스 지표 API에서 사용률 지표를 가져옵니다.
사용률 값 target이 설정된 경우 컨트롤러는 각 Pod의 컨테이너에서 관련 리소스 요청의 백분율로 사용률 값을 계산합니다. 그런 다음 컨트롤러는 대상 모든 Pod에서 평균 사용률을 사용하고 원하는 복제본 수를 조정하는 데 사용되는 비율을 생성합니다. HPA는 지표 서버에서 제공하는 metrics.k8s.io
에서 지표를 가져오도록 구성됩니다. 지표 평가의 동적 특성으로 인해 복제본 그룹을 확장하는 동안 복제본 수가 변동될 수 있습니다.
HPA를 구현하려면 모든 대상 Pod에 해당 컨테이너에 리소스 요청이 설정되어 있어야 합니다.
2.4.3. 요청 및 제한 정보
스케줄러는 Pod의 컨테이너에 지정하는 리소스 요청을 사용하여 Pod를 배치할 노드를 결정합니다. kubelet은 컨테이너에 지정된 리소스 제한을 적용하여 컨테이너가 지정된 제한보다 많은 사용을 허용하지 않도록 합니다. kubelet은 특히 해당 컨테이너에서 사용할 해당 시스템 리소스의 요청 양을 예약합니다.
리소스 메트릭을 사용하는 방법은 무엇입니까?
Pod 사양에서는 리소스 요청(예: CPU 및 메모리)을 지정해야 합니다. HPA는 이 사양을 사용하여 리소스 사용률을 확인한 다음 대상 사용률을 확장 또는 축소합니다.
예를 들어 HPA 오브젝트는 다음 지표 소스를 사용합니다.
type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60
이 예에서 HPA는 Pod의 평균 사용률을 스케일링 대상에서 60%로 유지합니다. 사용률은 현재 리소스 사용량에서 요청된 Pod 리소스에 대한 비율입니다.
2.4.4. 모범 사례
모든 Pod에는 리소스 요청이 구성되어 있어야 합니다.
HPA는 OpenShift Container Platform 클러스터에서 관찰된 CPU 또는 메모리 사용률 값을 기반으로 스케일링 결정을 내립니다. 사용률 값은 각 pod의 리소스 요청의 백분율로 계산됩니다. 누락된 리소스 요청 값은 HPA의 최적 성능에 영향을 미칠 수 있습니다.
쿨 다운 기간을 설정합니다.
수평 Pod 자동 스케일링 중에 시간 간격 없이 이벤트를 빠르게 확장할 수 있습니다. 빈번한 복제본 변동을 방지하기 위해 쿨 다운 기간을 구성합니다. stabilizationWindowSeconds
필드를 구성하여 쿨 다운 기간을 지정할 수 있습니다. 안정화 창은 계속 스케일링하는 데 사용되는 메트릭이 변경될 때 복제본 수의 변동을 제한하는 데 사용됩니다. 자동 스케일링 알고리즘은 이 창을 사용하여 이전에 원하는 상태를 유추하고 워크로드 스케일링을 원하지 않는 변경을 방지합니다.
예를 들어 scaleDown
필드에 대해 안정화 창이 지정됩니다.
behavior: scaleDown: stabilizationWindowSeconds: 300
위의 예에서 지난 5 분 동안 원하는 모든 상태가 고려됩니다. 이렇게 하면 롤링 최대값이 대략적인데, 스케일링 알고리즘에서 포드를 자주 제거하여 나중에 동일한 Pod를 다시 생성하는 작업을 트리거할 수 있습니다.
2.4.4.1. 스케일링 정책
autoscaling/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 ...
- 1
- 스케일링 정책의 방향, 즉
scaleDown
또는scaleUp
을 지정합니다. 이 예제에서는 축소 정책을 생성합니다. - 2
- 스케일링 정책을 정의합니다.
- 3
- 정책이 각 반복에서 특정 Pod 수 또는 Pod 백분율로 스케일링하는지의 여부를 결정합니다. 기본값은
pods
입니다. - 4
- 각 반복 중에 Pod 수 또는 Pod 백분율 중 하나의 스케일링 양을 제한합니다. Pod 수에 따라 축소할 기본값은 없습니다.
- 5
- 스케일링 반복의 길이를 결정합니다. 기본값은
15
초입니다. - 6
- 백분율로 된 축소 기본값은 100%입니다.
- 7
- 여러 정책이 정의된 경우 먼저 사용할 정책을 결정합니다. 가장 많은 변경을 허용하는 정책을 사용하려면
Max
를 지정하고, 최소 변경을 허용하는 정책을 사용하려면Min
을 지정합니다. HPA에서 해당 정책 방향으로 스케일링하지 않도록 하려면Disabled
를 지정합니다. 기본값은Max
입니다. - 8
- HPA에서 원하는 상태를 검토해야 하는 기간을 결정합니다. 기본값은
0
입니다. - 9
- 이 예제에서는 확장 정책을 생성합니다.
- 10
- Pod 수에 따라 확장되는 양을 제한합니다. Pod 수 확장 기본값은 4%입니다.
- 11
- Pod 백분율에 따라 확장되는 양을 제한합니다. 백분율로 된 확장 기본값은 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
이 예제에서 Pod 수가 40개를 초과하면 selectPolicy
에서 요구하는 대로 해당 정책으로 인해 상당한 변경이 발생하므로 축소에 백분율 기반 정책이 사용됩니다.
Pod 복제본이 80개 있는 경우 HPA는 첫 번째 반복에서 1분(periodSeconds: 60
)에 걸쳐 (type: Percent
및 value: 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: Pods
및 value: 4
).
selectPolicy: Disabled
매개변수를 사용하면 HPA에서 Pod를 확장하지 못합니다. 필요한 경우 복제본 세트 또는 배포 세트의 복제본 수를 조정하여 수동으로 확장할 수 있습니다.
설정되어 있는 경우 oc edit
명령을 사용하여 스케일링 정책을 확인할 수 있습니다.
$ oc edit hpa hpa-resource-metrics-memory
출력 예
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}]}}' ...
2.4.5. 웹 콘솔을 사용하여 수평 Pod 자동 스케일러 생성
웹 콘솔에서 Deployment
또는 DeploymentConfig
오브젝트에서 실행할 최소 및 최대 Pod 수를 지정하는 HPA(수평 Pod 자동 스케일러)를 생성할 수 있습니다. Pod에서 대상으로 하는 CPU 또는 메모리 사용량을 정의할 수도 있습니다.
HPA는 Operator 지원 서비스, Knative 서비스 또는 Helm 차트의 일부인 배포에 추가할 수 없습니다.
절차
웹 콘솔에서 HPA를 생성하려면 다음을 수행합니다.
- 토폴로지 보기에서 노드를 클릭하여 측면 창을 표시합니다.
작업 드롭다운 목록에서 HorizontalPodAutoscaler 추가 를 선택하여 HorizontalPodAutoscaler 추가 양식을 엽니다.
그림 2.2. Add HorizontalPodAutoscaler
HorizontalPodAutoscaler 추가 양식에서 이름, 최소 및 최대 Pod 제한, CPU 및 메모리 사용량을 정의하고 저장을 클릭합니다.
참고CPU 및 메모리 사용량에 대한 값이 없는 경우 경고가 표시됩니다.
웹 콘솔에서 HPA를 편집하려면 다음을 수행합니다.
- 토폴로지 보기에서 노드를 클릭하여 측면 창을 표시합니다.
- 작업 드롭다운 목록에서 HorizontalPodAutoscaler 편집을 선택하여 Horizontal Pod Autoscaler 편집 양식을 엽니다.
- Horizontal Pod Autoscaler 편집 양식에서 최소 및 최대 Pod 제한과 CPU 및 메모리 사용량을 편집한 다음 저장을 클릭합니다.
웹 콘솔에서 수평 Pod 자동 스케일러를 생성하거나 편집하는 동안 양식 보기에서 YAML 보기로 전환할 수 있습니다.
웹 콘솔에서 HPA를 제거하려면 다음을 수행합니다.
- 토폴로지 보기에서 노드를 클릭하여 측면 창을 표시합니다.
- 작업 드롭다운 목록에서 HorizontalPodAutoscaler 제거를 선택합니다.
- 확인 팝업 창에서 제거를 클릭하여 HPA를 제거합니다.
2.4.6. CLI를 사용하여 CPU 사용률에 대한 수평 Pod 자동 스케일러 생성
OpenShift Container Platform CLI를 사용하여 HPA(수평 Pod 자동 스케일러)를 생성하여 기존 배포
,DeploymentConfig
,ReplicaSet
,ReplicationController
또는 StatefulSet
오브젝트를 자동으로 스케일링할 수 있습니다. HPA는 지정한 CPU 사용량을 유지하도록 해당 오브젝트와 연결된 Pod를 스케일링합니다.
다른 오브젝트에서 제공하는 특정 기능 또는 동작이 필요하지 않는 한 Deployment
오브젝트 또는 ReplicaSet
오브젝트를 사용하는 것이 좋습니다.
HPA는 최소 및 최대 개수 사이에서 복제본 수를 늘리거나 줄여 전체 Pod에서 지정된 CPU 사용률을 유지합니다.
CPU 사용률을 자동 스케일링할 때는 oc autoscale
명령을 사용하여 언제든지 실행하려는 최소 및 최대 Pod 수와 Pod에서 목표로 하는 평균 CPU 사용률을 지정할 수 있습니다. 최솟값을 지정하지 않으면 Pod에 OpenShift Container Platform 서버의 기본값이 지정됩니다.
특정 CPU 값을 자동 스케일링하려면 대상 CPU 및 Pod 제한을 사용하여 HorizontalPodAutoscaler
오브젝트를 생성합니다.
사전 요구 사항
수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다. oc describe PodMetrics <pod-name>
명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력이 다음과 유사하게 표시되고 Usage
에 Cpu
및 Memory
가 표시됩니다.
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
출력 예
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>
프로세스
CPU 사용률에 대한 수평 Pod 자동 스케일러를 생성하려면 다음을 수행합니다.
다음 중 하나를 수행합니다.
CPU 사용 백분율에 따라 스케일링하려면 기존 오브젝트에 대한
HorizontalPodAutoscaler
오브젝트를 생성합니다.$ oc autoscale <object_type>/<name> \1 --min <number> \2 --max <number> \3 --cpu-percent=<percent> 4
예를 들어 다음 명령은
image-registry
Deployment
오브젝트의 자동 스케일링을 보여줍니다. 초기 배포에는 Pod 3개가 필요합니다. HPA 오브젝트에서 최소값을 5개로 늘립니다. Pod의 CPU 사용량이 75%에 도달하면 Pod가 7로 증가합니다.$ oc autoscale deployment/image-registry --min=5 --max=7 --cpu-percent=75
특정 CPU 값을 스케일링하려면 기존 오브젝트에 대해 다음과 유사한 YAML 파일을 생성합니다.
다음과 유사한 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
- 1
autoscaling/v2
API를 사용합니다.- 2
- 이 수평 Pod 자동 스케일러 오브젝트의 이름을 지정합니다.
- 3
- 스케일링할 오브젝트의 API 버전을 지정합니다.
-
Deployment
,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
로 설정합니다.
수평 Pod 자동 스케일러를 생성합니다.
$ oc create -f <file-name>.yaml
수평 Pod 자동 스케일러가 생성되었는지 확인합니다.
$ oc get hpa cpu-autoscale
출력 예
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE cpu-autoscale Deployment/example 173m/500m 1 10 1 20m
2.4.7. CLI를 사용하여 메모리 사용률에 대한 수평 Pod 자동 스케일러 오브젝트 생성
OpenShift Container Platform CLI를 사용하여 HPA(수평 Pod 자동 스케일러)를 생성하여 기존 배포
,DeploymentConfig
,ReplicaSet
,ReplicationController
또는 StatefulSet
오브젝트를 자동으로 스케일링할 수 있습니다. HPA는 해당 오브젝트와 연결된 Pod를 스케일링하여 사용자가 지정한 평균 메모리 사용률(직접 값 또는 요청된 메모리의 백분율)을 유지합니다.
다른 오브젝트에서 제공하는 특정 기능 또는 동작이 필요하지 않는 한 Deployment
오브젝트 또는 ReplicaSet
오브젝트를 사용하는 것이 좋습니다.
HPA는 최소 및 최대 개수 사이에서 복제본 수를 늘리거나 줄여 전체 Pod에서 지정된 메모리 사용률을 유지합니다.
메모리 사용률의 경우 최소 및 최대 Pod 수와 Pod에서 목표로 해야 하는 평균 메모리 사용률을 지정할 수 있습니다. 최솟값을 지정하지 않으면 Pod에 OpenShift Container Platform 서버의 기본값이 지정됩니다.
사전 요구 사항
수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다. oc describe PodMetrics <pod-name>
명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력이 다음과 유사하게 표시되고 Usage
에 Cpu
및 Memory
가 표시됩니다.
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-129-223.compute.internal -n openshift-kube-scheduler
출력 예
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>
프로세스
메모리 사용률에 대한 수평 Pod 자동 스케일러를 생성하려면 다음을 수행합니다.
다음 중 하나에 대한 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
- 1
autoscaling/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
- 1
autoscaling/v2
API를 사용합니다.- 2
- 이 수평 Pod 자동 스케일러 오브젝트의 이름을 지정합니다.
- 3
- 스케일링할 오브젝트의 API 버전을 지정합니다.
-
ReplicationController의 경우
v1
을 사용합니다. -
DeploymentConfig의 경우
apps.openshift.io/v1
을 사용합니다. -
Deployment, ReplicaSet, Statefulset 오브젝트는
apps/v1
을 사용합니다.
-
ReplicationController의 경우
- 4
- 오브젝트 유형을 지정합니다. 오브젝트는
Deployment
,DeploymentConfig
,ReplicaSet
,ReplicationController
또는StatefulSet
여야 합니다. - 5
- 스케일링할 오브젝트의 이름을 지정합니다. 오브젝트가 있어야 합니다.
- 6
- 축소 시 최소 복제본 수를 지정합니다.
- 7
- 확장 시 최대 복제본 수를 지정합니다.
- 8
- 메모리 사용률에
metrics
매개변수를 사용합니다. - 9
- 메모리 사용률에 대한
메모리
를 지정합니다. - 10
Utilization
으로 설정합니다.- 11
averageUtilization
및 전체 Pod에 대한 대상 평균 메모리 사용률(요청 메모리의 백분율로 표시)을 지정합니다. 대상 Pod에 메모리 요청이 구성되어 있어야 합니다.- 12
- 선택 사항: 스케일링 정책을 지정하여 확장 또는 축소비율을 제어합니다.
수평 Pod 자동 스케일러를 생성합니다.
$ oc create -f <file-name>.yaml
예를 들면 다음과 같습니다.
$ oc create -f hpa.yaml
출력 예
horizontalpodautoscaler.autoscaling/hpa-resource-metrics-memory created
수평 Pod 자동 스케일러가 생성되었는지 확인합니다.
$ oc get hpa hpa-resource-metrics-memory
출력 예
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hpa-resource-metrics-memory Deployment/example 2441216/500Mi 1 10 1 20m
$ oc describe hpa hpa-resource-metrics-memory
출력 예
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
2.4.8. CLI를 사용하여 수평 Pod 자동 스케일러 상태 조건 이해
일련의 상태 조건을 사용하여 HPA(수평 Pod 자동 스케일러)에서 스케일링할 수 있는지 그리고 HPA가 현재 제한되어 있는지의 여부를 결정할 수 있습니다.
HPA 상태 조건은 Autoscaling API의 v2
버전에서 사용할 수 있습니다.
HPA는 다음과 같은 상태 조건을 통해 응답합니다.
AbleToScale
상태는 HPA에서 메트릭을 가져오고 업데이트할 수 있는지의 여부 및 백오프 관련 상태로 스케일링을 방지할 수 있는지의 여부를 나타냅니다.-
True
조건은 스케일링이 허용되었음을 나타냅니다. -
False
조건은 지정된 이유로 스케일링이 허용되지 않음을 나타냅니다.
-
ScalingActive
조건은 HPA가 활성화되어 있고(예: 대상의 복제본 수가 0이 아님) 원하는 메트릭을 계산할 수 있는지의 여부를 나타냅니다.-
True
조건은 메트릭이 제대로 작동함을 나타냅니다. -
False
조건은 일반적으로 메트릭을 가져오는 데 문제가 있음을 나타냅니다.
-
ScalingLimited
조건은 원하는 스케일링이 수평 Pod 자동 스케일러의 최댓값 또는 최솟값으로 제한되었음을 나타냅니다.-
True
조건은 스케일링을 위해 최소 또는 최대 복제본 수를 늘리거나 줄여야 함을 나타냅니다. False
조건은 요청된 스케일링이 허용됨을 나타냅니다.$ oc describe hpa cm-test
출력 예
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:
- 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"
다음은 스케일링에 필요한 메트릭을 가져올 수 없는 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
다음은 요청된 자동 스케일링이 필요한 최솟값보다 적은 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
2.4.8.1. CLI를 사용하여 수평 Pod 자동 스케일러 상태 조건 보기
HPA(수평 Pod 자동 스케일러)를 통해 Pod에 설정된 상태 조건을 볼 수 있습니다.
수평 Pod 자동 스케일러 상태 조건은 v2
버전의 autoscaling API에서 사용할 수 있습니다.
사전 요구 사항
수평 Pod 자동 스케일러를 사용하려면 클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다. oc describe PodMetrics <pod-name>
명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력이 다음과 유사하게 표시되고 Usage
에 Cpu
및 Memory
가 표시됩니다.
$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
출력 예
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>
프로세스
Pod의 상태 조건을 보려면 Pod 이름과 함께 다음 명령을 사용합니다.
$ oc describe hpa <pod-name>
예를 들면 다음과 같습니다.
$ oc describe hpa cm-test
상태가 출력의 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
2.4.9. 추가 리소스
- 복제 컨트롤러 및 배포 컨트롤러에 대한 자세한 내용은 배포 및 배포 구성 이해를 참조하십시오.
- HPA 사용에 대한 예제는 Horizontal Pod Autoscaling of Quarkus Application Based on Memory Utilization 을 참조하십시오.