×

要添加自定义指标自动缩放器,请为部署、StatefulSet 或自定义资源创建ScaledObject自定义资源。为 Job 创建ScaledJob自定义资源。

您只能为每个要缩放的工作负载创建一个缩放对象。此外,您不能在同一工作负载上同时使用缩放对象和水平 Pod 自动缩放器 (HPA)。

向工作负载添加自定义指标自动缩放器

您可以为由DeploymentStatefulSet自定义资源对象创建的工作负载创建自定义指标自动缩放器。

先决条件
  • 必须安装自定义指标自动缩放器操作符。

  • 如果您使用自定义指标自动缩放器根据 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 限制。例如

      示例 Pod 规范
      apiVersion: v1
      kind: Pod
      # ...
      spec:
        containers:
        - name: app
          image: images.my-company.example/app:v4
          resources:
            limits:
              memory: "128Mi"
              cpu: "500m"
      # ...
步骤
  1. 创建一个类似于以下内容的 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指定为DeploymentStatefulSetCustomResource
    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 Dedicated 监控。
    17 可选:指定触发器身份验证或集群触发器身份验证。更多信息,请参见附加资源部分的理解自定义指标自动缩放触发器身份验证
    • 输入TriggerAuthentication 使用触发器身份验证。这是默认设置。

    • 输入ClusterTriggerAuthentication 使用集群触发器身份验证。

  2. 运行以下命令创建自定义指标自动缩放器

    $ 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,则由于没有指标或您创建的一个或多个对象中存在问题,自定义指标自动缩放器正在获取指标。