3.10. 了解如何添加自定义指标自动扩展


要添加自定义指标自动扩展,请为部署、有状态集或自定义资源创建 ScaledObject 自定义资源。为作业创建 ScaledJob 自定义资源。

您只能为每个您要扩展的工作负载创建一个扩展对象。另外,您不能在同一工作负载中使用扩展的对象和 pod 横向自动扩展(HPA)。

3.10.1. 在工作负载中添加自定义指标自动扩展

您可以为 DeploymentStatefulSetcustom 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"
      # ...

流程

  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
        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
    指定 kindDeployment, StatefulSetCustomResource
    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" 部分所述。
    注意

    不需要同时指定命名空间触发器身份验证和集群触发器身份验证。

  2. 创建自定义指标自动扩展:

    $ 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。

流程

  1. 创建一个类似以下示例的 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
    可选:指定一个扩展策略: defaultcustomaccurate。默认为 default。如需更多信息,请参阅下面的"添加资源"部分中的链接。
    13
    指定用作扩展基础的触发器,如"识别自定义指标自动扩展触发器"部分中所述。
    14
    可选:指定触发器身份验证,如 "Creating a custom metrics autoscaler trigger authentication" 部分所述。
    15
    可选:指定集群触发器身份验证,如 "Creating a custom metrics autoscaler trigger authentication" 部分所述。
    注意

    不需要同时指定命名空间触发器身份验证和集群触发器身份验证。

  2. 创建自定义指标自动扩展:

    $ 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,则不会发生缩放,因为您创建的一个或多个对象中没有指标或多个问题。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.