$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
要添加自定义指标自动缩放器,请为部署、有状态集或自定义资源创建ScaledObject
自定义资源。为作业创建ScaledJob
自定义资源。
您只能为要缩放的每个工作负载创建一个缩放对象。此外,您不能在同一工作负载上同时使用缩放对象和水平 Pod 自动缩放器 (HPA)。
您可以为由Deployment
、StatefulSet
或custom resource
对象创建的工作负载创建自定义指标自动缩放器。
必须安装自定义指标自动缩放器运算符。
如果使用自定义指标自动缩放器根据 CPU 或内存进行缩放
您的集群管理员必须已正确配置集群指标。您可以使用oc describe PodMetrics <pod-name>
命令确定是否已配置指标。如果已配置指标,则输出类似于以下内容,并在“使用情况”下显示 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 限制。例如
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
kind: TriggerAuthentication
1 | 可选:指定自定义指标自动缩放器运算符应将副本数缩放至指定值并停止自动缩放,如“暂停工作负载的自定义指标自动缩放器”部分所述。 |
2 | 指定此自定义指标自动缩放器的名称。 |
3 | 可选:指定目标资源的 API 版本。默认为apps/v1 。 |
4 | 指定要缩放的对象的名称。 |
5 | 指定类型为Deployment 、StatefulSet 或CustomResource 。 |
6 | 可选:指定目标资源中容器的名称,自定义指标自动缩放器从中获取保存秘密等的環境變數。默认为.spec.template.spec.containers[0] 。 |
7 | 可选。指定在报告最后一个触发器后等待的秒数,如果minReplicaCount 设置为0 ,则在将部署缩减回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 | 可选:指定触发器身份验证或集群触发器身份验证。有关更多信息,请参阅其他资源部分中的“了解自定义指标自动缩放器触发器身份验证”。
|
运行以下命令创建自定义指标自动缩放器
$ 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
,则自定义指标自动缩放器正在获取指标,因为没有指标,或者您创建的一个或多个对象存在问题。
您可以为任何Job
对象创建一个自定义指标自动缩放器。
使用缩放作业进行缩放仅为技术预览功能。技术预览功能不受 Red Hat 生产服务级别协议 (SLA) 的支持,并且可能功能不完整。Red Hat 不建议在生产环境中使用它们。这些功能提供对即将推出的产品功能的早期访问,使客户能够在开发过程中测试功能并提供反馈。 有关 Red Hat 技术预览功能的支持范围的更多信息,请参阅 技术预览功能支持范围。 |
必须安装自定义指标自动缩放器运算符。
创建一个类似于以下内容的 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 。
|
4 | 可选:指定需要多少个成功的 Pod 完成才能将作业标记为已完成。
|
5 | 指定控制器创建的 Pod 的模板。 |
6 | 可选:向上扩展时的最大副本数。默认为100 。 |
7 | 可选:指定每隔多少秒检查每个触发器。默认为30 。 |
8 | 可选:指定应保留多少个成功的已完成作业。默认为100 。 |
9 | 可选:指定应保留多少个失败的作业。默认为100 。 |
10 | 可选:指定目标资源中容器的名称,自定义自动缩放器从中获取保存秘密等的 environment variables。默认为.spec.template.spec.containers[0] 。 |
11 | 可选:指定每当更新缩放作业时是否终止现有作业
|
12 | 可选:指定缩放策略:default 、custom 或accurate 。默认为default 。有关更多信息,请参阅后面“其他资源”部分中的链接。 |
13 | 指定用作缩放依据的触发器,如“了解自定义指标自动缩放器触发器”部分所述。 |
14 | 可选:指定触发器身份验证或集群触发器身份验证。有关更多信息,请参阅其他资源部分中的“了解自定义指标自动缩放器触发器身份验证”。
|
运行以下命令创建自定义指标自动缩放器
$ 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
,则由于没有指标或您创建的一个或多个对象中存在问题,因此未进行缩放。