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:
- 假设启动时Pod实际使用50m CPU,此时利用率为
50m/50m ×100% = 100%,远超80%的阈值 - KEDA会按公式计算所需副本数:
总CPU负载 / (请求值 × 目标利用率),哪怕总负载仅为200m(0.2核),计算结果为200m/(50m×0.8)=5,刚好触达你设置的maxReplicaCount=5 - 最终直接触发扩容至最大副本数。
本质问题是CPU请求值设置过低,导致KEDA的触发阈值被拉到极低水平,正常启动负载就会触发满额扩容。
内容的提问来源于stack exchange,提问作者Scientist
相关产品推荐
相关产品推荐

