3.10. 사용자 정의 메트릭 자동 스케일러를 추가하는 방법
사용자 지정 지표 자동 스케일러를 추가하려면 배포, 상태 저장 세트 또는 사용자 정의 리소스에 대한 scaled Object
사용자 정의 리소스를 만듭니다. 작업에 대한 scaledJob
사용자 정의 리소스를 생성합니다.
스케일링할 각 워크로드에 대해 하나의 확장 오브젝트만 생성할 수 있습니다. 또한 동일한 워크로드에서 스케일링된 오브젝트와 HPA(수평 Pod 자동 스케일러)를 사용할 수 없습니다.
3.10.1. 워크로드에 사용자 정의 메트릭 자동 스케일러 추가
Deployment
,StatefulSet
또는 사용자 정의 리소스 오브젝트에서 생성한 워크로드에 대한 사용자 정의
메트릭 자동 스케일러를 생성할 수 있습니다.
사전 요구 사항
- Custom Metrics Autoscaler Operator가 설치되어 있어야 합니다.
CPU 또는 메모리를 기반으로 스케일링에 사용자 정의 메트릭 자동 스케일러를 사용하는 경우:
클러스터 관리자가 클러스터 메트릭을 올바르게 구성해야 합니다.
oc describe PodMetrics <pod-name>
명령을 사용하여 메트릭이 구성되어 있는지 확인할 수 있습니다. 메트릭이 구성된 경우 출력은 다음과 유사하게 표시되고 Usage에 CPU 및 메모리가 표시됩니다.$ 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에는 지정된 메모리 및 CPU 제한이 포함되어야 합니다. 예를 들면 다음과 같습니다.
Pod 사양의 예
apiVersion: v1 kind: Pod # ... spec: containers: - name: app image: images.my-company.example/app:v4 resources: limits: memory: "128Mi" cpu: "500m" # ...
프로세스
다음과 유사한 YAML 파일을 생성합니다. 이름 <
;2>
; , 오브젝트 이름 <4&
gt; 및 오브젝트 종류 <5&
gt;만 필요합니다.확장된 오브젝트의 예
apiVersion: keda.sh/v1alpha1 kind: ScaledObject metadata: annotations: autoscaling.keda.sh/paused-replicas: "0" 1 name: scaledobject 2 namespace: my-namespace spec: scaleTargetRef: apiVersion: apps/v1 3 name: example-deployment 4 kind: Deployment 5 envSourceContainerName: .spec.template.spec.containers[0] 6 cooldownPeriod: 200 7 maxReplicaCount: 100 8 minReplicaCount: 0 9 metricsServer: 10 auditConfig: logFormat: "json" logOutputVolumeClaim: "persistentVolumeClaimName" policy: rules: - level: Metadata omitStages: "RequestReceived" omitManagedFields: false lifetime: maxAge: "2" maxBackup: "1" maxSize: "50" fallback: 11 failureThreshold: 3 replicas: 6 pollingInterval: 30 12 advanced: restoreToOriginalReplicaCount: false 13 horizontalPodAutoscalerConfig: name: keda-hpa-scale-down 14 behavior: 15 scaleDown: stabilizationWindowSeconds: 300 policies: - type: Percent value: 100 periodSeconds: 15 triggers: - type: prometheus 16 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: basic authenticationRef: 17 name: prom-triggerauthentication kind: TriggerAuthentication
- 1
- 선택 사항: Custom Metrics Autoscaler Operator가 "워크로드에 사용자 정의 메트릭 자동 스케일러 사용" 섹션에 설명된 대로 복제본을 지정된 값으로 확장하고 자동 스케일링을 중지하도록 지정합니다.
- 2
- 이 사용자 정의 메트릭 자동 스케일러의 이름을 지정합니다.
- 3
- 선택 사항: 대상 리소스의 API 버전을 지정합니다. 기본값은
apps/v1
입니다. - 4
- 스케일링할 오브젝트의 이름을 지정합니다.
- 5
- type을
Deployment
,StatefulSet
또는CustomResource
로 지정합니다. - 6
- 선택 사항: 사용자 지정 지표 자동 스케일러가 시크릿을 보유하는 환경 변수를 가져오는 대상 리소스의 컨테이너 이름을 지정합니다. 기본값은
.spec.template.spec.containers[0]
입니다. - 7
- 선택 사항:
minReplicaCount
가0
으로 설정된 경우 배포를 다시0
으로 스케일링하기 전에 마지막 트리거가 보고된 후 대기하는 기간(초)을 지정합니다. 기본값은300
입니다. - 8
- 선택 사항: 확장 시 최대 복제본 수를 지정합니다. 기본값은
100
입니다. - 9
- 선택 사항: 축소 시 최소 복제본 수를 지정합니다.
- 10
- 선택 사항: "감사 로깅 구성" 섹션에 설명된 대로 감사 로그의 매개변수를 지정합니다.
- 11
- 선택 사항: scaler가
failureThreshold
매개변수로 정의된 횟수에 대한 소스에서 메트릭을 가져오지 못하는 경우 다시 대체할 복제본 수를 지정합니다. 대체 동작에 대한 자세한 내용은 KEDA 설명서 를 참조하십시오. - 12
- 선택 사항: 각 트리거를 확인하는 간격을 초 단위로 지정합니다. 기본값은
30
입니다. - 13
- 선택 사항: 확장된 개체를 삭제한 후 대상 리소스를 원래 복제본 수로 확장할지 여부를 지정합니다. 기본값은
false
이며, 확장 오브젝트를 삭제할 때 복제본 수를 그대로 유지합니다. - 14
- 선택 사항: 수평 Pod 자동 스케일러의 이름을 지정합니다. 기본값은
keda-hpa-{scaled-object-name}
입니다. - 15
- 선택 사항: "확장 정책" 섹션에 설명된 대로 Pod를 확장 또는 축소하는 데 사용할 스케일링 정책을 지정합니다.
- 16
- "사용자 정의 메트릭 자동 스케일러 트리거 이해" 섹션에 설명된 대로 스케일링의 기준으로 사용할 트리거를 지정합니다. 이 예에서는 OpenShift Container Platform 모니터링을 사용합니다.
- 17
- 선택 사항: 트리거 인증 또는 클러스터 트리거 인증을 지정합니다. 자세한 내용은 추가 리소스 섹션에서 사용자 정의 메트릭 자동 스케일러 트리거 인증 이해 를 참조하십시오.
-
트리거 인증을 사용하려면
TriggerAuthentication
을 입력합니다. 이는 기본값입니다. -
클러스터 트리거 인증을 사용하려면
ClusterTriggerAuthentication
을 입력합니다.
-
트리거 인증을 사용하려면
다음 명령을 실행하여 사용자 정의 메트릭 자동 스케일러를 생성합니다.
$ oc create -f <filename>.yaml
검증
명령 출력을 보고 사용자 정의 메트릭 자동 스케일러가 생성되었는지 확인합니다.
$ oc get scaledobject <scaled_object_name>
출력 예
NAME SCALETARGETKIND SCALETARGETNAME MIN MAX TRIGGERS AUTHENTICATION READY ACTIVE FALLBACK AGE scaledobject apps/v1.Deployment example-deployment 0 50 prometheus prom-triggerauthentication True True True 17s
출력에서 다음 필드를 확인합니다.
-
TRIGGERS
: 사용 중인 트리거 또는 스케일러를 나타냅니다. -
AUTHENTICATION
: 사용 중인 트리거 인증의 이름을 나타냅니다. READY
: 스케일링된 오브젝트가 스케일링을 시작할 준비가 되었는지 여부를 나타냅니다.-
True
인 경우 확장 오브젝트가 준비됩니다. -
False
인 경우 생성한 오브젝트 중 하나 이상의 오브젝트의 문제로 인해 확장 오브젝트가 준비되지 않은 것입니다.
-
ACTIVE
: 스케일링이 수행되는지 여부를 나타냅니다.-
True
인 경우 스케일링이 수행됩니다. -
False
인 경우 메트릭이 없거나 생성한 오브젝트 중 하나 이상에 문제가 있기 때문에 스케일링이 수행되지 않습니다.
-
FALLBACK
: 사용자 정의 메트릭 자동 스케일러가 소스에서 메트릭을 가져올 수 있는지 여부를 나타냅니다.-
False
인 경우 사용자 정의 메트릭 자동 스케일러에 메트릭이 표시됩니다. -
True
인 경우 메트릭이 없거나 생성한 오브젝트 중 하나 이상에 문제가 있기 때문에 사용자 정의 메트릭 자동 스케일러가 메트릭을 가져오고 있습니다.
-
-
3.10.2. 작업에 사용자 정의 메트릭 자동 스케일러 추가
모든 Job
오브젝트에 대한 사용자 정의 메트릭 자동 스케일러를 생성할 수 있습니다.
확장된 작업을 사용하여 스케일링하는 것은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.
Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.
사전 요구 사항
- Custom Metrics Autoscaler Operator가 설치되어 있어야 합니다.
프로세스
다음과 유사한 YAML 파일을 생성합니다.
kind: ScaledJob apiVersion: keda.sh/v1alpha1 metadata: name: scaledjob namespace: my-namespace spec: failedJobsHistoryLimit: 5 jobTargetRef: activeDeadlineSeconds: 600 1 backoffLimit: 6 2 parallelism: 1 3 completions: 1 4 template: 5 metadata: name: pi spec: containers: - name: pi image: perl command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(2000)"] maxReplicaCount: 100 6 pollingInterval: 30 7 successfulJobsHistoryLimit: 5 8 failedJobsHistoryLimit: 5 9 envSourceContainerName: 10 rolloutStrategy: gradual 11 scalingStrategy: 12 strategy: "custom" customScalingQueueLengthDeduction: 1 customScalingRunningJobPercentage: "0.5" pendingPodConditions: - "Ready" - "PodScheduled" - "AnyOtherCustomPodCondition" multipleScalersCalculation : "max" triggers: - type: prometheus 13 metadata: serverAddress: https://thanos-querier.openshift-monitoring.svc.cluster.local:9092 namespace: kedatest metricName: http_requests_total threshold: '5' query: sum(rate(http_requests_total{job="test-app"}[1m])) authModes: "bearer" authenticationRef: 14 name: prom-cluster-triggerauthentication
- 1
- 작업을 실행할 수 있는 최대 기간을 지정합니다.
- 2
- 작업 재시도 횟수를 지정합니다. 기본값은
6
입니다. - 3
- 선택 사항: 작업이 병렬로 실행해야 하는 Pod 복제본 수를 지정합니다. 기본값은
1
입니다.-
비병렬 작업의 경우 설정되지 않은 상태로 둡니다. 설정되지 않은 경우 기본값은
1
입니다.
-
비병렬 작업의 경우 설정되지 않은 상태로 둡니다. 설정되지 않은 경우 기본값은
- 4
- 선택 사항: 작업이 완료된 것으로 표시하는 데 필요한 성공적인 Pod 완료 횟수를 지정합니다.
-
비병렬 작업의 경우 설정되지 않은 상태로 둡니다. 설정되지 않은 경우 기본값은
1
입니다. - 완료 횟수가 고정된 병렬 작업의 경우 완료 횟수를 지정합니다.
-
작업 큐가 있는 병렬 작업의 경우 설정되지 않은 상태로 둡니다. 설정되지 않은 경우 기본값은
parallelism
매개변수의 값입니다.
-
비병렬 작업의 경우 설정되지 않은 상태로 둡니다. 설정되지 않은 경우 기본값은
- 5
- 컨트롤러에서 생성하는 Pod의 템플릿을 지정합니다.
- 6
- 선택 사항: 확장 시 최대 복제본 수를 지정합니다. 기본값은
100
입니다. - 7
- 선택 사항: 각 트리거를 확인하는 간격을 초 단위로 지정합니다. 기본값은
30
입니다. - 8
- 선택 사항: 성공적으로 완료된 작업 수를 지정합니다. 기본값은
100
입니다. - 9
- 선택 사항: 유지해야 하는 실패한 작업 수를 지정합니다. 기본값은
100
입니다. - 10
- 선택 사항: 사용자 지정 자동 스케일러가 시크릿을 보유하는 환경 변수를 가져오는 대상 리소스의 컨테이너 이름을 지정합니다. 기본값은
.spec.template.spec.containers[0]
입니다. - 11
- 선택 사항: 확장된 작업이 업데이트될 때마다 기존 작업이 종료되는지 여부를 지정합니다.
-
Default
: 자동 스케일러는 연결된 확장된 작업이 업데이트되면 기존 작업을 종료합니다. 자동 스케일러는 최신 사양을 사용하여 작업을 다시 생성합니다. -
gradual
: 연결된 확장된 작업이 업데이트되면 자동 스케일러가 기존 작업을 종료하지 않습니다. 자동 스케일러는 최신 사양을 사용하여 새 작업을 생성합니다.
-
- 12
- 선택 사항:
기본
,사용자 정의
또는정확한
스케일링 전략을 지정합니다. 기본값은기본값
입니다. 자세한 내용은 다음 "추가 리소스" 섹션의 링크를 참조하십시오. - 13
- "사용자 정의 메트릭 자동 스케일러 트리거 이해" 섹션에 설명된 대로 스케일링의 기준으로 사용할 트리거를 지정합니다.
- 14
- 선택 사항: 트리거 인증 또는 클러스터 트리거 인증을 지정합니다. 자세한 내용은 추가 리소스 섹션에서 사용자 정의 메트릭 자동 스케일러 트리거 인증 이해 를 참조하십시오.
-
트리거 인증을 사용하려면
TriggerAuthentication
을 입력합니다. 이는 기본값입니다. -
클러스터 트리거 인증을 사용하려면
ClusterTriggerAuthentication
을 입력합니다.
-
트리거 인증을 사용하려면
다음 명령을 실행하여 사용자 정의 메트릭 자동 스케일러를 생성합니다.
$ oc create -f <filename>.yaml
검증
명령 출력을 보고 사용자 정의 메트릭 자동 스케일러가 생성되었는지 확인합니다.
$ oc get scaledjob <scaled_job_name>
출력 예
NAME MAX TRIGGERS AUTHENTICATION READY ACTIVE AGE scaledjob 100 prometheus prom-triggerauthentication True True 8s
출력에서 다음 필드를 확인합니다.
-
TRIGGERS
: 사용 중인 트리거 또는 스케일러를 나타냅니다. -
AUTHENTICATION
: 사용 중인 트리거 인증의 이름을 나타냅니다. READY
: 스케일링된 오브젝트가 스케일링을 시작할 준비가 되었는지 여부를 나타냅니다.-
True
인 경우 확장 오브젝트가 준비됩니다. -
False
인 경우 생성한 오브젝트 중 하나 이상의 오브젝트의 문제로 인해 확장 오브젝트가 준비되지 않은 것입니다.
-
ACTIVE
: 스케일링이 수행되는지 여부를 나타냅니다.-
True
인 경우 스케일링이 수행됩니다. -
False
인 경우 메트릭이 없거나 생성한 오브젝트 중 하나 이상에 문제가 있기 때문에 스케일링이 수행되지 않습니다.
-
-