searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

KEDA--弹性伸缩领域新一代的强者

2024-05-20 07:56:02
21
0

KEDA 极大地简化了基于几乎任何可想象的度量提供者进行扩展的过程,使得用户能够轻松实现应用的弹性伸缩。 

一、是什么

     KEDA(k8s event driver Autoscaling)--事件驱动自动伸缩器

    是一个功能单一的轻量级组件,基于事件,提供更多除了CPU、内存以外的伸缩指标,并且可以指定应用,更加灵活的达到自动扩缩容,甚至可以缩容到0--增强HPA

二、组件、架构

   1、keda-operator

        1、负载创建、更新HAP,---通过hap控制应用扩缩容。配置了external metrics的hpa调用apiserver,路由到keda-metrics-apiserver上。

        2、loop控制应用副本数(缩容到0)

  2、keda-metrics-apiserver---实现external-metrics(借助apiservice注册到apiserver),以对接HPA的external类型的指标查询

       1. metricsadapter--将scaler获取的指标转换成hpa识别的格式
       2. sacler---连接到外部组件获取指标(如redis、mq等)

三、crd

  1、scaledObject---用于伸缩已有负载对象

apiVersion:  keda.sh/v1alpha1
kind:  ScaledObject
metadata:
  name: {scaled-object-name}
spec:
  scaleTargetRef:
    apiVersion:    {api-version-of-target-resource}  # Optional. Default: apps/v1
    kind:          {kind-of-target-resource}         # Optional. Default: Deployment
    name:          {name-of-target-resource}         # Mandatory. Must be in the same  namespace as the ScaledObject
    envSourceContainerName:  {container-name}         # Optional.  Default: .spec.template.spec.containers[0]
  pollingInterval:  30                               # Optional.  Default: 30 seconds
  cooldownPeriod:   300                              # Optional.  Default: 300 seconds
  idleReplicaCount: 0                                # Optional.  Default: ignored, must be less than minReplicaCount 
  minReplicaCount:  1                                # Optional.  Default: 0
  maxReplicaCount:  100                              # Optional.  Default: 100
  fallback:                                          #  Optional. Section to specify fallback options
    failureThreshold: 3                              # Mandatory if  fallback section is included
    replicas: 6                                      #  Mandatory if fallback section is included
  advanced:                                          #  Optional. Section to specify advanced options
    restoreToOriginalReplicaCount:  true/false        # Optional. Default:  false
    horizontalPodAutoscalerConfig:                   # Optional. Section to  specify HPA related options
      name: {name-of-hpa-resource}                   # Optional. Default:  keda-hpa-{scaled-object-name}
      behavior:                                      #  Optional. Use to modify HPA's scaling behavior
        scaleDown:
          stabilizationWindowSeconds: 300
          policies:
          - type: Percent
            value: 100
            periodSeconds: 15
  triggers:

  2、scaleJob--用于伸缩job

apiVersion:  keda.sh/v1alpha1
kind:  ScaledJob
metadata:
  name: {scaled-job-name}
spec:
  jobTargetRef:
    parallelism: 1                            # [max number of  desired  pods]
    completions: 1                            # [desired number  of successfully finished  pods]
    activeDeadlineSeconds: 600                #  Specifies the duration in seconds relative  to the startTime that the job may be active before the system tries to  terminate it; value must be positive integer
    backoffLimit: 6                           # Specifies the  number of retries before marking this job failed. Defaults to 6
    template:
      # describes the [job  template]
  pollingInterval: 30                         # Optional. Default:  30 seconds
  successfulJobsHistoryLimit: 5               # Optional. Default: 100. How  many completed jobs should be kept.
  failedJobsHistoryLimit: 5                   # Optional. Default: 100.  How many failed jobs should be kept.
  envSourceContainerName:  {container-name}    # Optional.  Default: .spec.JobTargetRef.template.spec.containers[0]
  minReplicaCount: 10                         # Optional. Default:  0
  maxReplicaCount: 100                        # Optional. Default:  100
  rolloutStrategy: gradual                    # Deprecated: Use  rollout.strategy instead (see below).
  rollout:
    strategy: gradual                         # Optional. Default:  default. Which Rollout Strategy KEDA will use.
    propagationPolicy: foreground             # Optional. Default: background.  Kubernetes propagation policy for cleaning up existing jobs during rollout.
  scalingStrategy:
    strategy: "custom"                        # Optional. Default:  default. Which Scaling Strategy to use. 
    customScalingQueueLengthDeduction: 1      # Optional. A parameter to optimize  custom ScalingStrategy.
    customScalingRunningJobPercentage:  "0.5"  # Optional. A  parameter to optimize custom ScalingStrategy.
    pendingPodConditions:                     # Optional. A parameter  to calculate pending job count per the specified pod conditions
      - "Ready"
      - "PodScheduled"
      -  "AnyOtherCustomPodCondition"
    multipleScalersCalculation :  "max" # Optional. Default: max. Specifies how to calculate the  target metrics when multiple scalers are defined.
  triggers:

   3、triggerauthentications--用于触发器向事件源的身份验证(命名空间内)

   4、clustertriggerauthentications---全局的身份验证(需先建secret、authentications、再创建scaleObject)

四、使用

  1、暂停自动缩放

       autoscaling.keda.sh/paused-replicas:"0"

  2、v1.17.0 及更高版本的k8s

  3、部署资源

Deployment CPU         Memory
MetricsServer         Limit: 1, Request:100m Limit: 1000Mi, Request:100Mi
Operator         Limit:1, Request: 100m Limit: 1000Mi,Request: 100Mi

            

  4、高可用性---通过选举,只有一个副本在工作

五、常用scaler

  1、cron--跟cronHPA相比,能实现基于linux cron表达式的简单cron。但cronHPA专门做定时调度的,有excludeDates(排除日期),并且cron表达式(golang的cron库)支持s级,支持多个调度任务

  2、activeMQ

  3、mysql

  4、kafka

0条评论
作者已关闭评论
望****杰
2文章数
0粉丝数
望****杰
2 文章 | 0 粉丝
望****杰
2文章数
0粉丝数
望****杰
2 文章 | 0 粉丝
原创

KEDA--弹性伸缩领域新一代的强者

2024-05-20 07:56:02
21
0

KEDA 极大地简化了基于几乎任何可想象的度量提供者进行扩展的过程,使得用户能够轻松实现应用的弹性伸缩。 

一、是什么

     KEDA(k8s event driver Autoscaling)--事件驱动自动伸缩器

    是一个功能单一的轻量级组件,基于事件,提供更多除了CPU、内存以外的伸缩指标,并且可以指定应用,更加灵活的达到自动扩缩容,甚至可以缩容到0--增强HPA

二、组件、架构

   1、keda-operator

        1、负载创建、更新HAP,---通过hap控制应用扩缩容。配置了external metrics的hpa调用apiserver,路由到keda-metrics-apiserver上。

        2、loop控制应用副本数(缩容到0)

  2、keda-metrics-apiserver---实现external-metrics(借助apiservice注册到apiserver),以对接HPA的external类型的指标查询

       1. metricsadapter--将scaler获取的指标转换成hpa识别的格式
       2. sacler---连接到外部组件获取指标(如redis、mq等)

三、crd

  1、scaledObject---用于伸缩已有负载对象

apiVersion:  keda.sh/v1alpha1
kind:  ScaledObject
metadata:
  name: {scaled-object-name}
spec:
  scaleTargetRef:
    apiVersion:    {api-version-of-target-resource}  # Optional. Default: apps/v1
    kind:          {kind-of-target-resource}         # Optional. Default: Deployment
    name:          {name-of-target-resource}         # Mandatory. Must be in the same  namespace as the ScaledObject
    envSourceContainerName:  {container-name}         # Optional.  Default: .spec.template.spec.containers[0]
  pollingInterval:  30                               # Optional.  Default: 30 seconds
  cooldownPeriod:   300                              # Optional.  Default: 300 seconds
  idleReplicaCount: 0                                # Optional.  Default: ignored, must be less than minReplicaCount 
  minReplicaCount:  1                                # Optional.  Default: 0
  maxReplicaCount:  100                              # Optional.  Default: 100
  fallback:                                          #  Optional. Section to specify fallback options
    failureThreshold: 3                              # Mandatory if  fallback section is included
    replicas: 6                                      #  Mandatory if fallback section is included
  advanced:                                          #  Optional. Section to specify advanced options
    restoreToOriginalReplicaCount:  true/false        # Optional. Default:  false
    horizontalPodAutoscalerConfig:                   # Optional. Section to  specify HPA related options
      name: {name-of-hpa-resource}                   # Optional. Default:  keda-hpa-{scaled-object-name}
      behavior:                                      #  Optional. Use to modify HPA's scaling behavior
        scaleDown:
          stabilizationWindowSeconds: 300
          policies:
          - type: Percent
            value: 100
            periodSeconds: 15
  triggers:

  2、scaleJob--用于伸缩job

apiVersion:  keda.sh/v1alpha1
kind:  ScaledJob
metadata:
  name: {scaled-job-name}
spec:
  jobTargetRef:
    parallelism: 1                            # [max number of  desired  pods]
    completions: 1                            # [desired number  of successfully finished  pods]
    activeDeadlineSeconds: 600                #  Specifies the duration in seconds relative  to the startTime that the job may be active before the system tries to  terminate it; value must be positive integer
    backoffLimit: 6                           # Specifies the  number of retries before marking this job failed. Defaults to 6
    template:
      # describes the [job  template]
  pollingInterval: 30                         # Optional. Default:  30 seconds
  successfulJobsHistoryLimit: 5               # Optional. Default: 100. How  many completed jobs should be kept.
  failedJobsHistoryLimit: 5                   # Optional. Default: 100.  How many failed jobs should be kept.
  envSourceContainerName:  {container-name}    # Optional.  Default: .spec.JobTargetRef.template.spec.containers[0]
  minReplicaCount: 10                         # Optional. Default:  0
  maxReplicaCount: 100                        # Optional. Default:  100
  rolloutStrategy: gradual                    # Deprecated: Use  rollout.strategy instead (see below).
  rollout:
    strategy: gradual                         # Optional. Default:  default. Which Rollout Strategy KEDA will use.
    propagationPolicy: foreground             # Optional. Default: background.  Kubernetes propagation policy for cleaning up existing jobs during rollout.
  scalingStrategy:
    strategy: "custom"                        # Optional. Default:  default. Which Scaling Strategy to use. 
    customScalingQueueLengthDeduction: 1      # Optional. A parameter to optimize  custom ScalingStrategy.
    customScalingRunningJobPercentage:  "0.5"  # Optional. A  parameter to optimize custom ScalingStrategy.
    pendingPodConditions:                     # Optional. A parameter  to calculate pending job count per the specified pod conditions
      - "Ready"
      - "PodScheduled"
      -  "AnyOtherCustomPodCondition"
    multipleScalersCalculation :  "max" # Optional. Default: max. Specifies how to calculate the  target metrics when multiple scalers are defined.
  triggers:

   3、triggerauthentications--用于触发器向事件源的身份验证(命名空间内)

   4、clustertriggerauthentications---全局的身份验证(需先建secret、authentications、再创建scaleObject)

四、使用

  1、暂停自动缩放

       autoscaling.keda.sh/paused-replicas:"0"

  2、v1.17.0 及更高版本的k8s

  3、部署资源

Deployment CPU         Memory
MetricsServer         Limit: 1, Request:100m Limit: 1000Mi, Request:100Mi
Operator         Limit:1, Request: 100m Limit: 1000Mi,Request: 100Mi

            

  4、高可用性---通过选举,只有一个副本在工作

五、常用scaler

  1、cron--跟cronHPA相比,能实现基于linux cron表达式的简单cron。但cronHPA专门做定时调度的,有excludeDates(排除日期),并且cron表达式(golang的cron库)支持s级,支持多个调度任务

  2、activeMQ

  3、mysql

  4、kafka

文章来自个人专栏
文章 | 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0