$ oc describe PodMetrics openshift-kube-scheduler-ip-10-0-135-131.ec2.internal
要添加自定义指标自动缩放器,请为部署、有状态集或自定义资源创建ScaledObject
自定义资源。为作业创建ScaledJob
自定义资源。
您只能为每个要缩放的工作负载创建一个缩放对象。此外,您不能在同一个工作负载上同时使用缩放对象和水平 Pod 自动缩放器 (HPA)。
您可以为由Deployment
、StatefulSet
或自定义资源
对象创建的工作负载创建自定义指标自动缩放器。
必须安装自定义指标自动缩放器操作符。
如果使用自定义指标自动缩放器基于 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 | 指定kind 为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 | 指定用作缩放基础的触发器,如“了解自定义指标自动缩放器触发器”部分所述。此示例使用 Red Hat OpenShift Service on AWS 监控。 |
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
,则由于没有指标或您创建的一个或多个对象出现问题,自定义指标自动缩放器正在获取指标。