想象你是一家名为「云端小馆」的餐厅老板。开业第一周你发现一个让人头疼的规律:午餐高峰时 300 桌客人排队排到门外,后厨 5 位厨师忙到飞起;下午 3 点却只有 30 桌客人,厨师们闲得把灶台擦了三遍。排队的客人骂街,闲着的厨师照领工资——这两种痛,云厂商的架构师每天都在体验。 如果给餐厅装一个「自动排班店长」呢?它盯着实时客流,高峰期自动多请人,冷清时自动让一部分人休息;它知道周五晚上必爆满,提前把人手备好;它还特别沉得住气,不会被一波临时客流吓得疯狂加人又裁人。这个店长,就是分布式系统里的「弹性伸缩」。 本文就用这位店长的视角,拆解云原生世界里三种最经典的伸缩招式:按水位加人的 HPA、给厨师升级装备的 VPA、看预约单提前备人的 KEDA,再加上冷却时间与预测性伸缩这两味「定心丸」,帮你从零建立起弹性伸缩的完整直觉。

岗位关联

掌握弹性伸缩,是云原生架构师平衡成本与高可用的核心能力,也是大厂生产事故复盘里出现频率最高的关键词之一。

目录
  1. 可视化演示
  2. 1. 需求分析:先看懂客流的脾气
  3. 2. HPA 水平伸缩:按等位人数增减厨师
  4. 3. VPA 垂直伸缩:给厨师换大锅好刀
  5. 4. KEDA 事件驱动:宴会预订提前备人
  6. 5. 冷却避抖:稳住,别慌
  7. 6. 预测伸缩:看天气预报备菜
  8. 7. 生产实践:开店三年踩过的坑
  9. AI 应用场景
  10. Python 演示
  11. 常见误区
  12. 面试题

可视化演示

演示HPA水平伸缩、VPA垂直调整与KEDA事件驱动三种弹性伸缩模式,理解负载驱动扩缩容与冷却时间避免抖动。

本节配有交互动效(进入视口后自动加载,约 3KB)。

HPA:水平伸缩 指标驱动副本数 阈值触发扩缩 replicas∝load 冷却时间防止抖动

1. 需求分析:先看懂客流的脾气

云端小馆开业第二天,店长阿云在收银台贴了一张纸,上面画着昨天每个小时的客流折线:11 点到 13 点像火箭发射,15 点到 17 点像睡着了的猫。他恍然大悟——排班这件事,第一步不是招人,而是先「看懂客流的脾气」:什么时候会来、大概来多少、客人能容忍等多久。

分布式系统里的「客流」叫负载,包括每秒请求数(QPS)、CPU 利用率、内存占用;「排班」就是决定启动多少个计算实例(Pod)。做弹性伸缩之前必须先做需求分析,否则后面的自动伸缩全是盲调,就像不知道客流规律就乱排班一样。

需求分析要做三件事:第一,判断负载波动特性——是周期性的(早晚高峰)还是突发性的(热点事件),这决定了用哪种伸缩策略;第二,设定目标水位——理想资源利用率通常留 20%~30% 缓冲,避免突发流量一来就打满;第三,明确成本约束——高峰扩容烧钱,低谷缩容省钱,要在「体验」和「账单」之间找平衡。它们共同指向一个基础指标——资源利用率:

阿云把这张客流曲线贴到系统大屏上,所有自动伸缩策略都从这里出发。看懂脾气,才谈得上排班——需求分析,是一切伸缩动作的「起跑线」。

利用率=实际使用量请求资源量×100%\displaystyle \text{利用率} = \frac{\text{实际使用量}}{\text{请求资源量}} \times 100\%
简单说,就像 100 个餐位只坐了 60 位客人,餐位利用率就是 60%。太高说明要排队,太低说明桌子空着白花钱。
  1. 实际使用量分子是程序真正用掉的 CPU/内存,相当于「实际入座的客人」。
    usageactual\displaystyle usage_{actual}
  2. 请求资源量分母是 Pod 申请预留的配额,相当于「摆好的餐位总数」。
    usagerequested\displaystyle usage_{requested}
  3. 乘以 100%把比值换算成百分比,方便与目标水位直接比较。
    ×100%\displaystyle \times 100\%

2. HPA 水平伸缩:按等位人数增减厨师

摸清客流规律后,阿云给后厨定了一条死规矩:等位超过 20 桌就临时加一名厨师,等位少于 5 桌就请一名厨师去休息。多一个厨师就多一个灶台同时出菜,这叫「水平伸缩」——人不够就加人,人多了就减人,每个人的能力不变。

在 Kubernetes 里,这个「按等位人数调厨师」的自动机制叫 HPA(Horizontal Pod Autoscaler,水平 Pod 自动伸缩器)。它是一位不知疲倦的后厨总管,默认每 15 秒采集一轮指标(同步周期可配置),然后决定加人还是减人。

HPA 的决策逻辑很朴素:先算当前指标离目标差多远,再按比例换算需要多少厨师。比如目标是 CPU 利用率 60%,现在是 90%,说明人手少了 1.5 倍,副本数要按这个比例放大。核心公式如下:

阿云很快发现,HPA 是个「只会算数」的耿直店长,如果不加冷却就会越帮越忙——这就引出了后面要讲的冷却避抖。但无论如何,按水位加人,是弹性伸缩最基础也最常用的一招。

目标副本数=⌈当前副本数×当前指标目标指标⌉\displaystyle \text{目标副本数} = \left\lceil \text{当前副本数} \times \frac{\text{当前指标}}{\text{目标指标}} \right\rceil
通俗理解:当前指标是目标指标的几倍,就把人加到几倍,最后向上取整——宁可多一人,不让客人干等。
  1. 当前指标 ÷ 目标指标算出「超载比例」,例如 90% ÷ 60% = 1.5。
    当前指标目标指标\displaystyle \frac{\text{当前指标}}{\text{目标指标}}
  2. × 当前副本数把超载比例乘到现有人数上,得到「大致够用的人数」。
    当前副本数×比值\displaystyle \text{当前副本数} \times \text{比值}
  3. ⌈⌉ 向上取整结果是 4.2 就取 5,保证容量永不小于实际需求。
    ⌈⋅⌉\displaystyle \left\lceil \cdot \right\rceil

3. VPA 垂直伸缩:给厨师换大锅好刀

有一天客流没涨,可出菜还是很慢。阿云蹲在后厨观察,发现问题不在人数,而在每个人手脚太慢——切菜用菜刀,炖汤用小锅。他决定升级装备:给厨师换大锅、快灶。这就是「垂直伸缩」:不添人,而是让每个人更能干。

云原生里的 VPA(Vertical Pod Autoscaler,垂直 Pod 自动伸缩器)干的就是这件事——动态调整单个 Pod 的 CPU 和内存配额,从 2C4G 升到 4C8G,让同一个进程拥有更强的算力。它和 HPA 的「量变」不同,走的是「质变」路线。

VPA 会收集 Pod 的历史资源用量,推荐一个「舒适区间」的新配额。推荐值通常取历史用量的高分位(比如 P95),再和当前请求量取较大者,防止推荐值低于现有配置:

但阿云很快发现换装备有代价:厨师换了大锅要重新磨合,Pod 调整配额通常也需要重启才能生效。所以 VPA 适合变化平缓的服务,不适合扛突发尖峰。水平加人、垂直升级,各有各的用武之地,两者是互补关系而非替代关系。

推荐值=max⁡(P95(历史用量),  当前请求量)\displaystyle \text{推荐值} = \max\left(P_{95}(\text{历史用量}), \; \text{当前请求量}\right)
就像一位营养师不看平均数,专看「最饿那顿饭」(95% 分位)来定食量,保证绝大多数时候都够吃。
  1. P95 历史用量把历史每分钟用量从低到高排队,取第 95 个百分位的值,代表「绝大多数时刻的上限」。
    P95(历史用量)\displaystyle P_{95}(\text{历史用量})
  2. 当前请求量Pod 现在申请的配额,作为升级的下限。
    当前请求量\displaystyle \text{当前请求量}
  3. 取两者较大者向上看齐,保证升级后容量不会比现在差。
    max⁡(⋅,⋅)\displaystyle \max(\cdot, \cdot)

4. KEDA 事件驱动:宴会预订提前备人

阿云接到了一个电话:下周六有公司包场,200 人婚宴。如果只靠「等位人数」来判断,等 200 人全挤到门口才加人就晚了。聪明的店长看到订单系统里的包场预订,就应该提前把厨师备好。这就是「事件驱动」的思维——不等客人到店,先看预约单。

云原生里的 KEDA(Kubernetes Event-Driven Autoscaling)正是为这个而生。KEDA 不盯 CPU,而是盯「事件源头」:消息队列里积压了多少条消息、数据库里有没有堆积的任务、Prometheus 里有没有突发的业务指标。事件一来,它就通过自定义指标通知 HPA 扩容。

KEDA 的核心部件叫「伸缩器」(Scaler),每种事件源配一个伸缩器,像一个个传感器插在系统各处。最常见的场景是消息消费者:消息积压越多,消费者副本就越多,队列消费完再自动缩回去。它和 HPA 是互补关系——HPA 回答「你现在忙不忙」,KEDA 回答「你马上会有多少活」。

阿云给云端小馆装好 KEDA 后,婚宴当天中午,厨师们早已在岗,客人还没进门,菜已经备好一半。事件驱动的精髓,就是「把被动响应变成主动预判」,这也是处理消息洪峰和批处理任务的标准姿势。

5. 冷却避抖:稳住,别慌

刚用上 HPA 那几天,阿云差点崩溃:午高峰一下子涌进 50 桌客人,他赶紧加人;10 分钟后等位少了,他又裁人;又过 5 分钟客流再涨,他再加人。一个中午后厨人员变动了 8 次,厨师们晕头转向,出菜反而更慢了。这就是「伸缩抖动」。

抖动的根源是负载天然有噪声——瞬时波动不代表趋势。如果控制器反应太快,就会把「噪声」当「信号」,扩容和缩容两头打脸。解决办法是给伸缩动作加两道保险:冷却时间(cooldown)和稳定窗口(stabilization window)。

冷却时间的意思很简单:刚做完一次伸缩,必须等够一段「冷静期」才能做下一次,避免连续误判。可以用下面这个时间关系来描述:

除了冷却时间,HPA 还支持稳定窗口——只看最近 N 分钟的平均值,天然滤掉瞬时尖刺。阿云把冷却设为 3 分钟、窗口设为 5 分钟后,后厨终于安静了。弹性伸缩的智慧,一半在「动」,一半在「不动」。

t下次伸缩=t上次伸缩+t冷却\displaystyle t_{\text{下次伸缩}} = t_{\text{上次伸缩}} + t_{\text{冷却}}
就像改菜谱不能每 3 分钟改一次,得先观察客人一段时间的真实口味,再决定加辣还是减辣。
  1. 上次伸缩时间记录最近一次加人/减人发生的时刻。
    t上次伸缩\displaystyle t_{\text{上次伸缩}}
  2. 冷却时长两次伸缩之间允许的最短间隔,比如 3 分钟。
    t冷却\displaystyle t_{\text{冷却}}
  3. 下次伸缩时间冷却期结束之前,无论指标怎么跳都按兵不动。
    t下次伸缩\displaystyle t_{\text{下次伸缩}}

6. 预测伸缩:看天气预报备菜

阿云发现一个规律:周六永远比周一忙,月底比月初忙,旺季比淡季忙。这些规律能不能提前用起来?他开始每天记账:几点来了多少人、点了什么菜。记了三个月后,他能在周一就预测出周五晚上需要备多少菜。这就是「预测性伸缩」的雏形。

预测性伸缩(Predictive Autoscaling)利用历史负载数据建模,识别周期性规律,提前把资源准备好,而不是等指标飙升了才动手。它特别适合「可预见的陡峰」——电商大促、每周一早上九点的打卡洪流、月末结算的报表任务。

最经典的预测模型是指数平滑(Exponential Smoothing):越近的数据权重越大,越远的数据权重越小,公式只有一行:

把预测和实时响应结合,弹性伸缩就从「事后补救」进化到「事前准备」。阿云的云端小馆从此不再怕周五晚高峰——厨师们早就按照「天气预报」穿好了围裙。当然,预测总有误差,生产上通常要用「预测 + 实时兜底」的组合拳。

x^t+1=α×xt+(1−α)×x^t\displaystyle \widehat{x}_{t+1} = \alpha \times x_t + (1-\alpha) \times \widehat{x}_t
通俗理解:明天的预测 = 七分看今天的真实情况 + 三分听昨天的预测。α 越大越相信新数据,越小越信任旧规律。
  1. xₜ 真实值今天的实际负载。
    xt\displaystyle x_t
  2. x̂ₜ 昨日预测模型昨天给出的预测值。
    x^t\displaystyle \widehat{x}_t
  3. α 平滑系数取值在 0 到 1 之间,控制新旧信息各占多少权重。
    α∈[0,1]\displaystyle \alpha \in [0,1]
  4. 加权求和把真实值和旧预测按权重混合,得到明天的新预测。
    αxt+(1−α)x^t\displaystyle \alpha x_t + (1-\alpha)\widehat{x}_t

7. 生产实践:开店三年踩过的坑

三年过去,阿云把云端小馆开成了连锁店,也把弹性伸缩从「能用」打磨到了「好用」。他总结出一条经验:伸缩策略没有银弹,只有合适的组合。大促前用预测伸缩提前热场,大促中用 KEDA 盯订单积压,平时交给 HPA 按水位微调——这就是大促保障的标准姿势。

踩过的坑要重点说。第一个坑:只配 HPA 不配冷却,一到大促就抖成筛子,扩容和缩容互相打架。第二个坑:VPA 和 HPA 同时调整同一个指标,资源请求在一次次重启中来回横跳。第三个坑最致命:缩容太激进,好不容易扩容出来的 Pod 瞬间被回收,紧接着下一波流量直接冲垮系统——「缩容雪崩」是大促事故的头号元凶。

排障流程也很有讲究:生产出现「扩容不及时」,先看指标采集是否延迟(同步周期太长),再看冷却时间是否设得过长,最后看预测模型是否被异常数据污染。一个健康的弹性伸缩系统,必须能回答三个问题:加不加人、加多少人、什么时候加。把这三点写成监控告警,排障效率能提升一个数量级。

阿云最后在店长手册里写下一句话:弹性伸缩的本质,是用最少的资源接住最陡的浪。从成本优化到高可用保障,这句话值得每一个架构师贴在工位上。

AI 应用场景

场景一:电商大促的「预测热场 + 实时兜底」

阶段:部署与运维 / 资源调度

解决的问题:传统方式提前数天人工扩容,机器买多了白花钱,买少了扛不住流量。预测伸缩根据历史大促曲线提前扩容,KEDA 盯订单积压动态补量,HPA 按水位实时微调,冷却时间保证不抖。

具体案例:某电商平台 618 大促,核心交易链路 3000 个 Pod 弹性扩到 12000 个,扩容效率提升 70%,综合成本比全量预留省 40%。系统在流量洪峰前 30 分钟自动完成「热场」,峰值过后按稳定窗口平滑缩容。

场景二:消息队列积压驱动的消费者自动扩展

阶段:数据处理 / 流式计算

解决的问题:数据管道夜间有批处理任务,消息积压量随机波动,人工无法 24 小时盯着队列深度手动调消费者数量。

具体案例:某金融风控系统用 KEDA 监听 Kafka 积压量,积压超过 10000 条自动扩容消费者,低于 1000 条自动缩容,白天夜间成本自动联动,消息处理延迟从小时级降到分钟级。

场景三:夜间低谷的「缩容省钱」闭环

阶段:成本治理 / FinOps

解决的问题:生产集群白天繁忙、晚上空闲,固定容量浪费严重。如果缩容太激进又会在第二天早高峰引发雪崩。

具体案例:某互联网公司对非核心服务设置「夜间 10 点后最少副本数为 1」,配合 VPA 下调资源请求值,再加上早高峰前的预测预扩容,月度云账单下降 35%,且早高峰零事故。

Python 演示

python49 行
import mathimport random TARGET = 60          # 目标资源利用率(%)COOLDOWN = 2         # 冷却周期数MAX_PODS = 10        # 副本数上限MIN_PODS = 1         # 副本数下限  def current_load(t):    # 模拟第 t 个周期的负载,单位与单副本容量一致    base = 260 + 170 * math.sin(t * 0.9) + 45 * math.sin(t * 6.3)    return max(base, 30)  def compute_replicas(replicas, load):    # HPA 核心公式: ceil(当前副本数 * 当前指标 / 目标指标)    util = load / (replicas * 100.0) * 100.0    desired = math.ceil(replicas * util / TARGET)    return max(MIN_PODS, min(desired, MAX_PODS))  def main():    random.seed(42)    replicas = 3    cooldown = 0    print("cycle | load | util(%) | pods | action")    print("------|------|---------|------|------------")    for t in range(30):        load = current_load(t)        util = load / (replicas * 100.0) * 100.0        action = "keep"        new_count = compute_replicas(replicas, load)        if cooldown > 0:            cooldown -= 1            action = "cooling, skip"        elif new_count > replicas:            cooldown = COOLDOWN            action = "scale_up +%d" % (new_count - replicas)            replicas = new_count        elif new_count < replicas:            cooldown = COOLDOWN            action = "scale_down -%d" % (replicas - new_count)            replicas = new_count        print("%6d | %4.0f | %5.1f |  %2d  | %s" % (t, load, util, replicas, action))  if __name__ == "__main__":    main()
目的:用 40 行代码模拟一个带冷却时间的 HPA 控制器,观察负载波动下副本数如何「伸缩 - 冷却 - 再伸缩」,直观理解公式与防抖机制。
  1. util = load / (replicas * 100.0) * 100.0先算当前资源利用率,相当于看「餐位坐了几成」。
  2. desired = math.ceil(replicas * util / TARGET)HPA 核心公式:按超载比例换算目标副本数并向上取整。
  3. if cooldown > 0:冷却期内跳过一切伸缩动作,这正是防抖的关键。
  4. cooldown = COOLDOWN每次成功伸缩后重置冷却计时器。
  5. return max(MIN_PODS, min(desired, MAX_PODS))限制副本数上下界,防止缩没或扩爆。

常见误区

误区弹性伸缩当然要越快越好,指标一涨立刻扩容,晚一毫秒都是事故。把 HPA 的同步周期调到最小,冷却时间关掉,反应最灵敏。

正解伸缩过快会把瞬时噪声当成趋势信号,造成「扩容 → 缩容 → 再扩容」的抖动(thrashing)。就像厨师 10 分钟被调岗 8 次,效率反而暴跌。正确做法是保留冷却时间和稳定窗口,用「慢半拍」换「稳一步」。

为何常见:直觉上「响应快 = 体验好」,忽略了伸缩动作本身有成本——Pod 启动需要时间、重建有开销、调度有延迟。

误区把 CPU 利用率阈值配好,HPA 就万事大吉了。业务再复杂,CPU 都能代表负载吧?

正解CPU 是间接指标,很多时候 CPU 没满但请求已经超时——比如数据库连接池耗尽、消息队列积压、外部依赖变慢。生产上要配合业务自定义指标(QPS、延迟、队列深度),以及 KEDA 这类事件驱动伸缩器。

为何常见:CPU 指标开箱即用、零埋点成本,而业务指标需要改造和暴露,大家自然先挑省事的做,结果掩盖了真实瓶颈。

误区VPA 能自动调大资源,那还要 HPA 干嘛?一个 VPA 搞定所有伸缩场景。

正解VPA 调整单个 Pod 的配额,通常需要重启 Pod 才生效,扛不住突发流量尖峰;HPA 增减副本,可以秒级横向扩展。二者是互补关系而非替代关系。混用时还要避免对同一指标双控,否则会互相打架。

为何常见:两者名字都叫 Autoscaler,看起来功能重叠,初学者很容易误以为二选一,却没注意一个「改质」、一个「改量」。

误区流量一降就立刻把 Pod 全缩掉,多跑一秒都是浪费钱。缩容越快,省钱越多。

正解激进缩容会酿成「缩容雪崩」:刚缩完一波流量回流,所有请求集中打到剩余 Pod 上,瞬间打满宕机,恢复成本远高于省下的那点钱。缩容同样需要冷却和稳定窗口,还要考虑「缩完又得再扩」的来回成本。

为何常见:成本压力下只盯着账单上的节省,看不到缩容引发的大规模故障,以及故障带来的业务损失和工程师熬夜成本。

面试题

Q1. HPA 计算目标副本数的核心公式是?

单选题 · easy

  • A.目标副本数等于当前副本数乘以指标比值并向上取整← 正确答案
  • B.目标副本数等于当前副本数加上指标差值并向上取整
  • C.目标副本数等于当前副本数除以指标比值并向上取整
  • D.目标副本数等于当前副本数减去指标差值并向上取整

答案:A。HPA 按「当前指标 ÷ 目标指标」得到超载比例,再乘以当前副本数,最后向上取整。这就像餐厅按「等位人数 ÷ 可接受等位数」推算需要加几名厨师。B/C/D 的加减除操作都不符合「按比例换算」的语义。

Q2. 弹性伸缩中「冷却时间(cooldown)」的主要作用是?

单选题 · easy

  • A.加快扩容速度减少顾客等待
  • B.压缩冷却周期从而降低成本
  • C.防止频繁伸缩导致系统抖动← 正确答案
  • D.增加平均副本数量来提升性能

答案:C。冷却时间强制两次伸缩之间至少间隔一段时间,避免控制器把瞬时噪声当趋势信号反复扩缩。就像店长不会每 3 分钟调整一次厨师排班,否则后厨会乱成一团。A/B/D 都不是冷却的本意。

Q3. 关于 VPA 与 HPA 的区别,下列说法正确的是?

单选题 · mid

  • A.VPA 调整副本数而 HPA 调整资源配置
  • B.VPA 与 HPA 在功能上完全相互等价
  • C.VPA 只负责缩容而 HPA 只负责扩容
  • D.VPA 调整资源配置而 HPA 调整副本数← 正确答案

答案:D。VPA 是「质变」——调单个 Pod 的 CPU/内存配额;HPA 是「量变」——增减副本数量。就像「给厨师换大锅」与「多请几名厨师」的区别。A 说反了,B 忽略了本质差异,C 中两者都能扩能缩。

Q4. KEDA 事件驱动伸缩的核心特点是?

单选题 · mid

  • A.仅根据 CPU 内存指标自动进行伸缩
  • B.完全取代 HPA 与 VPA 的伸缩能力
  • C.仅在缩容场景下提供弹性伸缩能力
  • D.根据外部事件源驱动系统自动伸缩← 正确答案

答案:D。KEDA 监听消息队列积压、任务堆积等事件源,事件一来就触发扩容,是「看预约单提前备人」的思路。A 是 HPA 的玩法,B 中 KEDA 依赖并增强 HPA,C 中伸缩方向双向都支持。

Q5. 预测性伸缩主要依赖什么来提前扩容?

单选题 · mid

  • A.依靠实时随机数据进行未来负载预测
  • B.完全依赖人工手动配置来预留资源
  • C.利用历史负载周期规律进行预测扩容← 正确答案
  • D.根据网络带宽大小估算峰值容量

答案:C。预测性伸缩对历史负载数据建模,识别周期性规律(如每天早晚高峰、大促节奏),提前备好资源。就像店长记了三个月流水账后能预测周五晚高峰。A 的随机数毫无预测意义,B 是人工预留而非预测,D 与带宽无必然关系。

Q6. 大促期间最危险的「缩容雪崩」链条是?

单选题 · extreme

  • A.高峰扩容过快导致资源白白浪费
  • B.预测模型偏差过大导致扩容过剩
  • C.高峰缩容后流量回流导致系统雪崩← 正确答案
  • D.冷却时间过长导致扩容动作延迟

答案:C。高峰期如果缩容太激进,Pod 被回收后流量回流,剩余 Pod 瞬间被打满,引发级联故障。这就像午餐高峰把厨师放走了,客人突然涌进来只能干瞪眼。A/B/D 是扩容侧的问题,不是雪崩的核心链条。

Q7. 弹性伸缩的根本目标是?

单选题 · easy

  • A.用预测性伸缩替代全部实时监控手段
  • B.无限扩容以满足一切业务高峰需求
  • C.通过持续缩容来彻底降低所有成本
  • D.让资源的供给匹配实时的业务负载← 正确答案

答案:D。弹性伸缩的本质是用最少的资源接住最陡的浪——资源供给跟随负载动态变化。A 中预测不能替代监控,B 中无限扩容违背成本约束,C 中一味缩容会引发雪崩。

Q8. 以下哪些指标可以作为弹性伸缩的输入信号?

多选题 · hard

  • A.CPU 内存等基础计算资源利用率← 正确答案
  • B.每秒请求数等业务层的负载指标← 正确答案
  • C.消息队列中的消息积压数量指标← 正确答案
  • D.代码仓库的 Star 数等社区热度指标

答案:ABC。HPA 支持 CPU/内存基础指标,也支持 QPS、延迟等自定义业务指标,KEDA 则监听消息积压等事件源。D 的 Star 数与系统负载毫无关系,就像用店外的广告播放量来决定后厨人数一样荒谬。

Q9. 以下哪些手段可以有效避免伸缩抖动?

多选题 · mid

  • A.设置两次伸缩之间的冷却时间窗口← 正确答案
  • B.使用稳定窗口过滤掉瞬时负载尖刺← 正确答案
  • C.限制单次扩缩容的最大副本数变化← 正确答案
  • D.为每次伸缩动作添加随机延时策略

答案:ABC。冷却时间保证两次伸缩的最小间隔,稳定窗口用 N 分钟平均值滤掉尖刺,最大变化率限制单次调整幅度,三者都是成熟的防抖手段。D 的随机延时引入不可控的延迟,属于错误做法。

Q10. 关于 VPA(垂直伸缩),以下说法正确的是?

多选题 · hard

  • A.动态调整 Pod 的 CPU 内存请求值← 正确答案
  • B.调整资源后通常需要重建 Pod 生效← 正确答案
  • C.与 HPA 混用时需要规避指标冲突← 正确答案
  • D.能将物理服务器 CPU 核数直接翻倍

答案:ABC。VPA 修改 Pod 的资源请求(A),多数实现需要重启 Pod 才会生效(B),与 HPA 同时启用时若针对同一指标会造成双控打架,需要协调(C)。D 混淆了虚拟资源调度与物理硬件操作,VPA 无法直接翻倍物理机核数。