You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

KEDA CPU指标扩缩容异常:部署启动即扩至最大副本数求助

问题分析:KEDA刚启动即扩容至最大副本数

相关配置

Deployment资源配置

resources:
        requests:
          memory: "10Gi"
          ephemeral-storage:  2Gi
          cpu: 50m
        limits:
          memory: "12Gi"
          ephemeral-storage:  5Gi
          cpu: 5

KEDA ScaledObject配置

apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: keda-scaler
  labels:
    app.kubernetes.io/name: app123
    infra.arc/repo.managed: kubernetes
spec:
  scaleTargetRef:
    name: app123
  cooldownPeriod: 60
  minReplicaCount: 2
  maxReplicaCount: 5
  advanced:
    restoreToOriginalReplicaCount: true
  fallback: # Fallback strategy when metrics are unavailable for the apps
    failureThreshold: 3 
    replicas: 2 #Keep this desired state when metrics are unavailable.
  triggers:
    - type: cpu 
      metadata:
        type: Utilization
        value: "80"

实际问题

部署刚启动就自动扩容至最大副本数(5个)。


解答

一、CPU Utilization与Deployment资源配置的关联

当KEDA CPU触发器使用Utilization类型时,核心逻辑完全基于**Pod的CPU请求值(requests.cpu)**计算:

  • 利用率公式:(Pod实际CPU使用量 / Pod的CPU请求值) × 100%
  • 配置中的value: "80"表示目标是让所有Pod的平均CPU利用率维持在80%(以请求值为基准的比例)
  • Deployment的CPU limits仅作为Pod能使用的CPU上限,和KEDA的扩缩容计算逻辑无关。

二、刚启动即拉满副本的原因

你的Pod CPU请求值仅为50m(0.05核),结合80%的目标利用率,每个Pod的目标CPU使用量仅为50m × 80% = 40m。

应用启动阶段通常存在初始化、资源加载等操作,CPU使用率很容易超过40m:

  1. 假设启动时Pod实际使用50m CPU,此时利用率为50m/50m ×100% = 100%,远超80%的阈值
  2. KEDA会按公式计算所需副本数:总CPU负载 / (请求值 × 目标利用率),哪怕总负载仅为200m(0.2核),计算结果为200m/(50m×0.8)=5,刚好触达你设置的maxReplicaCount=5
  3. 最终直接触发扩容至最大副本数。

本质问题是CPU请求值设置过低,导致KEDA的触发阈值被拉到极低水平,正常启动负载就会触发满额扩容。

内容的提问来源于stack exchange,提问作者Scientist

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:15:45