3.10. 了解如何添加自定义指标自动扩展
要添加自定义指标自动扩展,请为部署、有状态集或自定义资源创建 ScaledObject
自定义资源。为作业创建 ScaledJob
自定义资源。
您只能为每个您要扩展的工作负载创建一个扩展对象。另外,您不能在同一工作负载中使用扩展的对象和 pod 横向自动扩展(HPA)。
3.10.1. 在工作负载中添加自定义指标自动扩展
您可以为 Deployment
、StatefulSet
或 custom resource
对象创建的工作负载创建自定义指标自动扩展。
先决条件
- 必须安装 Custom Metrics Autoscaler Operator。
如果您使用自定义指标自动扩展来根据 CPU 或内存进行扩展:
您的集群管理员必须已配置了集群指标。您可以使用
oc describe PodMetrics <pod-name>
命令来判断是否已配置了指标。如果配置了指标,输出将类似以下示例,CPU 和 Memory 在 Usage 下显示。$ 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>
, 和对象类型<5>
是必需的。缩放对象示例
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 metadata: name: prom-triggerauthentication type: object - authenticationRef: 18 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- 可选:指定自定义 Metrics Autoscaler Operator 将副本扩展到指定的值和停止自动扩展,如 "Pausing the custom metrics autoscaler for a workload" 部分所述。
- 2
- 指定此自定义指标自动扩展的名称。
- 3
- 可选:指定目标资源的 API 版本。默认为
apps/v1
。 - 4
- 指定要缩放的对象名称。
- 5
- 指定
kind
为Deployment
,StatefulSet
或CustomResource
。 - 6
- 可选:指定目标资源中的容器的名称,其中的自定义自动扩展器获取包含 secret 的环境变量等。默认为
.spec.template.spec.containers[0]
。 - 7
- 可选的。指定一个在最后的触发器报告后等待的时间(以秒为单位),在经过这个时间后才会将部署缩减为
0
(如果minReplicaCount
设置为0
)。默认值为300
。 - 8
- 可选:指定扩展时的最大副本数量。默认值为
100
。 - 9
- 可选:指定缩减时的最小副本数量。
- 10
- 可选:指定审计日志的参数。如"配置审计日志记录"部分中所述。
- 11
- 可选:指定在扩展程序无法从源中获取由
failureThreshold
参数定义的次数时回退到的副本数。有关回退行为的更多信息,请参阅 KEDA 文档。 - 12
- 可选:指定检查每个触发器的时间间隔(以秒为单位)。默认值为
30
。 - 13
- 可选:指定是否在删除扩展对象后将目标资源扩展为原始副本数。默认为
false
,这会在删除扩展对象时保留副本数。 - 14
- 可选:指定 pod 横向自动扩展的名称。默认为
keda-hpa-{scaled-object-name}
。 - 15
- 可选:指定一个扩展策略来控制用来扩展或缩减 pod 的速度,如"扩展策略"部分中所述。
- 16
- 指定用作扩展基础的触发器,如"识别自定义指标自动扩展触发器"部分中所述。本例使用 OpenShift Container Platform 监控。
- 17
- 可选:指定触发器身份验证,如 "Creating a custom metrics autoscaler trigger authentication" 部分所述。
- 18
- 可选:指定集群触发器身份验证,如 "Creating a custom metrics autoscaler trigger authentication" 部分所述。
注意不需要同时指定命名空间触发器身份验证和集群触发器身份验证。
创建自定义指标自动扩展:
$ oc create -f <file-name>.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. 在作业中添加自定义指标自动扩展
您可以为任何作业
对象创建自定义指标自动扩展。
使用扩展作业进行扩展只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 必须安装 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-triggerauthentication metadata: name: prom-triggerauthentication type: object - authenticationRef: 15 name: prom-cluster-triggerauthentication metadata: name: prom-cluster-triggerauthentication type: object
- 1
- 指定作业可以运行的最长持续时间。
- 2
- 指定作业的重试次数。默认值为
6
。 - 3
- 可选:指定作业应并行运行多少个 pod 副本;默认为
1
。-
对于非并行作业,请保留未设置。如果未设置,则默认值为
1
。
-
对于非并行作业,请保留未设置。如果未设置,则默认值为
- 4
- 可选:指定标记作业完成需要成功完成多少个 pod。
-
对于非并行作业,请保留未设置。如果未设置,则默认值为
1
。 - 对于具有固定完成计数的并行作业,请指定完成数。
-
对于带有工作队列的并行作业,请保留 unset。当取消设置默认值时,默认值为
parallelism
参数的值。
-
对于非并行作业,请保留未设置。如果未设置,则默认值为
- 5
- 指定控制器创建的 pod 模板。
- 6
- 可选:指定扩展时的最大副本数量。默认值为
100
。 - 7
- 可选:指定检查每个触发器的时间间隔(以秒为单位)。默认值为
30
。 - 8
- 可选:指定成功完成作业的数量。默认值为
100
。 - 9
- 可选:指定应保留多少个失败作业。默认值为
100
。 - 10
- 可选:指定目标资源中的容器的名称,其中的自定义自动扩展器获取包含 secret 的环境变量等。默认为
.spec.template.spec.containers[0]
。 - 11
- 可选:指定在更新扩展作业时是否被终止现有作业:
-
default
:如果关联的扩展作业被更新,则自动扩展器会终止一个现有作业。自动扩展会使用最新的 specs 重新创建作业。 -
gradual
:如果关联的扩展作业被更新,则自动扩展不会终止现有的作业。自动缩放器使用最新的 specs 创建新作业。
-
- 12
- 可选:指定一个扩展策略:
default
、custom
或accurate
。默认为default
。如需更多信息,请参阅下面的"添加资源"部分中的链接。 - 13
- 指定用作扩展基础的触发器,如"识别自定义指标自动扩展触发器"部分中所述。
- 14
- 可选:指定触发器身份验证,如 "Creating a custom metrics autoscaler trigger authentication" 部分所述。
- 15
- 可选:指定集群触发器身份验证,如 "Creating a custom metrics autoscaler trigger authentication" 部分所述。注意
不需要同时指定命名空间触发器身份验证和集群触发器身份验证。
创建自定义指标自动扩展:
$ oc create -f <file-name>.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
,则不会发生缩放,因为您创建的一个或多个对象中没有指标或多个问题。
-
如果为
-