想象你在城市最繁华的地段经营一家云上餐厅。工作日中午只有零散几桌客人,你却按周末高峰雇了10位厨师,大伙儿大部分时间都在擦灶台;真到了节假日,门口排起长龙,10个工位又忙不过来,上菜慢、差评不断。这座餐厅的困境,正是许多 Kubernetes 集群的真实写照:Pod 资源在低峰期闲置浪费,高峰期又扛不住压力。聪明的你引入两套自动化系统:第一套叫 HPA,它像前台经理,时刻盯着门口排队人数,人多了就加开厨师工位,人少了就关闭多余工位;第二套叫 VPA,它像后厨主厨,根据每道菜的复杂程度,校准每个工位的灶台数量和食材储备。两者配合,让餐厅在“不浪费”与“不拒客”之间找到完美平衡。这篇教程,我们借这座云上餐厅的故事,把 HPA 与 VPA 的原理、配置、协同实践讲透。
掌握HPA/VPA是AI推理服务成本优化的核心技能。学完这篇,你将能独立设计集群弹性伸缩方案,让每一份CPU和GPU算力都花在刀刃上。
可视化演示
对比HPA水平扩Pod与VPA垂直调requests两种伸缩维度、三类指标来源触发机制、以及HPA与VPA组合下的负载自适应伸缩效果。
本节配有交互动效(进入视口后自动加载,约 3KB)。
HPA水平与VPA垂直伸缩 HPA按CPU或自定义指标扩减Pod VPA调整Pod的requests垂直扩缩 HPA+x / VPA+y 水平近无上限垂直需重启Pod
弹性伸缩概念
你的云上餐厅开业半年,账本让财务头疼:按照周末客流雇了10个厨师,结果工作日中午只有两三桌客人,大半厨师闲着擦灶台;真到节假日高峰,10个工位又忙不过来,上菜极慢,客人抱怨不断。这座餐厅的困境,正是许多Kubernetes集群的真实写照:为应对峰值而固定分配资源,低峰期必然产生大量闲置;而为了节省成本把资源配小,高峰期又会拖垮服务。生活总是这样教育我们:静态规划永远追不上动态的需求曲线。
Kubernetes里的每个Pod就像一个厨师工位:要跑业务,就要占用CPU和内存。负载低时,一堆Pod在空转浪费资源;负载高时,现有Pod又扛不住。传统的做法是提前按峰值容量固定副本数——相当于永远按周末的10个工位配置,成本极高。于是K8s提供了弹性伸缩机制,让集群能像聪明的餐厅一样,根据“客流”动态调整资源配置,既保证高峰期不拒客,又避免低峰期养闲人。
这套机制有两个方向。第一种叫Horizontal Pod Autoscaler(HPA),负责水平伸缩——像前台经理根据排队人数增减工位数,即调整Deployment的副本数。第二种叫Vertical Pod Autoscaler(VPA),负责垂直伸缩——像主厨调整每个工位的灶台和食材储备,即修改Pod的resources.requests和limits。两者一个管“数量”、一个管“容量”,共同构成K8s弹性伸缩的完整拼图。
理解了这个餐厅故事,你就掌握了弹性伸缩的核心:HPA把副本数从“拍脑袋固定值”变成“跟随负载的变量”,VPA把单个Pod的资源从“拍脑袋固定值”变成“有数据支撑的推荐值”。接下来我们分别看看这两个系统的看家本领,以及它们如何像经理与主厨那样默契配合。
HPA机制原理
HPA就像餐厅的前台经理。他的办公桌上放着一块仪表盘,实时显示门口排队人数。经理设了一条红线:排队超过10人就加开一个工位,排队少于3人就关掉一个工位。他每隔15秒刷新一次仪表盘,每次加完工位后还要等5分钟才允许撤工位,防止刚加完又要撤的忙乱。这套“看指标、做决策、留冷静”的循环,正是HPA的全部秘密。
在Kubernetes中,HPA控制器周期性地读取Pod的监控指标,与设定的目标值比对。最常见的指标是CPU利用率,也可以扩展到内存、QPS等自定义指标。它通过Metrics Server采集数据,得到一个平均值,再代入一个简洁公式计算目标副本数。这个公式初学者看着像天书,拆开看就是小学比例题:负载翻倍,工位翻倍;负载减半,工位减半。
值得注意的还有两个关键参数:minReplicas和maxReplicas。它们定义了副本数的“地板”和“天花板”,防止极端情况下把一个微服务扩到整个集群都装不下,或者缩到零导致服务不可用。冷却时间保证伸缩不抖动,避免“过山车”式的副本震荡——就像经理刚加完窗口,不会因为5分钟内排队人数又少了两个就立刻撤掉一个窗口,那样顾客会被反复折腾。前台经理虽然勤快,但他只管工位数量,不管每个工位的配置。如果一个工位本应该放5个灶头却只放了2个,他即使加了工位也忙不过来——这就是VPA的用武之地。
- 当前副本数(currentReplicas)当前正在运行的Pod副本数量,相当于餐厅现在的工位数,是计算的基准值。
- 当前指标值(currentMetricValue)最近采集到的实际负载指标,比如CPU平均利用率,相当于现在门口排队的人数。
- 目标指标值(desiredMetricValue)运维人员设定的期望负载水平,比如50%利用率,相当于经理设定的“排队超过10人就加窗口”红线。
- 比例计算与向上取整将副本数按负载超标比例缩放,结果向上取整,保证小数字算不出小数Pod,餐厅也不会开出“半个工位”。
VPA机制原理
如果说HPA是前台经理,VPA就是后厨主厨。主厨不关心门口排了多少人,他关心的是每个厨师工位台面够不够。他翻出一周的出餐记录:张师傅负责的蒸菜档口,燃气一直在高负荷运转,台面小了;李师傅的凉菜档口,高峰期也不过用了两个灶头,台面却铺了四个。于是主厨重新给每个工位尺寸定了标准。VPA中的Recommender组件干的就是主厨的活儿:翻历史记录,算推荐值,定期校准。
VPA持续采集Pod的历史资源使用数据,通过统计方法计算一个推荐值。这个推荐值不是简单取平均——平均会被大量低负载时段拉低,导致高峰打穿——而是取一段时间内的较高分位数,同时叠加一个安全裕度。你可以把这个过程理解为:主厨不看“平均出餐量”,而是看“过去90%的忙碌时段里,这个灶头最大用到了多少火”,再留出10%的余量,保证绝大多数高峰期都罩得住。
VPA有四种更新模式:Auto模式会自动修改Pod的resources并重建Pod,效果最好但会造成短暂重启;Recreate模式与Auto类似但只在Pod重建时生效;Initial模式只在Pod启动时注入推荐值,适合不允许中断的服务;Off模式只做推荐不自动执行,适合运维人员人工审核后再应用。实际生产中,Auto模式最省心,但要为Pod重启预留一定的服务中断容忍度。主厨把工位尺寸调准时,厨房里正在忙的师傅需要暂时停一下手——对应VPA重建Pod。所以主厨和经理必须错峰工作,否则菜就断了。下一节我们看看如何让这两位配合默契。
- 历史资源峰值序列VPA把过去一段时间内每个采样点的资源用量收集成一个序列,相当于主厨记录的一周出餐火力日志。
- 第90百分位数(percentile_90)将序列从小到大排序,取90%位置的值。意思是“90%的时段用量都在这个值以下”,避免被极端尖峰绑架。
- 安全裕度乘以(1+裕度),通常取10%-15%,为突发流量留出缓冲,就像工位多备一袋食材应急。
- 最终推荐值两者相乘,得到VPA建议写入Pod的resources.requests值。
协同组合策略
有一天,前台经理和主厨同时发现蒸菜档口的燃气压力报警,都冲了过去。经理说人多,得加工位;主厨说不对,是灶头不够大,得换大灶头。两个人各调各的,反而把档口弄得一团糟。这一幕,就是HPA和VPA同时盯着CPU指标时的经典冲突。HPA把副本数加到4,单Pod平均负载降下来了;VPA一看负载变低,立刻把request调低;HPA发现利用率又飙高,继续加副本……如此反复,集群陷入“振荡”的旋涡。
业界的主流策略是“先VPA后HPA”:先让VPA根据历史用量把资源基线校准,再让HPA基于这个稳定基线去应对实时流量波动。这就好比餐厅先由主厨把所有工位的灶台尺寸定好,前台经理再在这个基础上灵活增减工位数量。如果工位本身忽大忽小,经理的增减判断就全乱套了。VPA调整后的request值会成为HPA计算利用率的新分母。
更稳妥的协同方式还有两个:一是让VPA只管内存、HPA只管CPU,两者各司其职互不干扰,相当于主厨只调菜量、经理只看客流;二是为VPA设置podUpdatePolicy.Recreate,避免Auto模式不断重建Pod打断HPA扩容节奏。部署时务必给两者都设合理的min/max边界,并开启Metrics Server与VPA Admission Controller。经理管“几个工位”,主厨管“多大工位”,只要分工明确、动线错开,云上餐厅就能既上菜快又不浪费。这套配合跑通后,别急着宣布大功告成——还需要一套科学的KPI评估它到底带来了多少收益。
- 实际CPU使用量Pod运行时真实消耗的CPU核数或时间片,相当于厨师实际开出的火候。
- VPA调整后的Request值VPA根据历史用量校准后的资源申请量,相当于主厨重新设定的灶台标准尺寸。
- 相除并乘100%得到HPA判定扩容/缩容的百分比依据。如果实际用量接近或超过这个Request值,HPA就会启动扩容。
性能影响评估
餐厅老板想知道这套“经理+主厨”组合是否真的省钱又增效。他拿出三张报表:第一张是客流从低到高再到低,工位数量多久才能跟上;第二张是工位数是否一直在抖,让人眼花缭乱;第三张是工资成本同比到底省了多少。评估弹性伸缩方案,同样看三个维度:伸缩延迟、稳定性、成本效益。伸缩延迟决定负载尖峰来临时,服务能否及时跟上;稳定性决定副本数是否反复横跳,影响下游缓存和连接池;成本效益直接回答“省了多少钱”。
伸缩延迟是一条完整链条:从指标超阈值开始,到采集器上报、控制器计算、新Pod创建、调度到节点、拉取镜像、容器启动、探针通过、加入Service负载均衡——每个环节都在贡献延迟。最容易忽略的是Pod启动环节,如果镜像很大或启动探针超时,整个扩容周期可能长达数分钟。理解这条链路,才能定位“流量高峰来了但扩容跟不上”的瓶颈到底在哪个环节。
评估时建议持续采集三个经典信号:P99扩容延迟(即99%的扩容动作都能落在这个耗时以内)、副本抖动率(单位时间内扩缩方向切换次数)、资源闲置率(已分配与真实使用之差)。将评估接入Prometheus与Grafana持续观测,能及时发现冷却时间是否过长、请求峰值是否被低估等问题。三张报表看完,老板心里有了底:扩缩跟得上节奏、工位不抖、账本省钱,这套机制才算合格。最后,不同规模的餐厅该用哪种配置组合,我们给出针对性建议。
- T_指标采集Metrics Server轮询Pod指标的时间间隔,默认十几秒到几十秒,相当于经理刷新仪表盘的速度。
- T_同步周期HPA控制器按固定周期比对当前指标与目标的时间窗口,默认15秒一次,相当于经理每次看完仪表盘后思考多久。
- T_Pod就绪新Pod从创建、调度、拉镜像、启动到通过探针Ready的总时间,相当于新工位从搭好到厨师真正能出菜的准备时间。
案例与适配建议
景区门口的网红小吃店和城区里的连锁中央厨房,管理方式显然不同。小吃店只需要在周末加两张桌子;中央厨房则需要统筹采购、菜品配送、多门店调拨——规模不同,弹性伸缩的策略也不同。在Kubernetes中,小规模集群通常用HPA搭配固定的资源request就够用了,配置简单、收益直接;中大规模集群则要引入VPA做资源画像、多指标HPA做容量保障,并配套完整的监控告警。
一个小规模AI推理服务的HPA可以这样配置:对部署了模型推理服务的Deployment设置最小2个副本、最大8个副本,当CPU平均利用率超过60%时自动扩容。这个配置像极了小吃店的周末预案:平时2个窗口够用,节假日最多开8个窗口,中间全自动。
这段配置告诉HPA:盯着ai-inference这个Deployment的CPU利用率,超过60%就开始按比例加副本,但不超过8个;低于60%就逐步缩容,但不少于2个。对于有经验的团队,还可以为Deployment配置内存、GPU或Kafka消费延迟等自定义指标,在YAML中增加一条metrics条目即可。中大规模集群则要把VPA纳入体系,让VPA每24小时推荐一次资源基线,并在业务低峰窗口由CronJob统一触发Pod滚动重建,应用新的资源设置。
无论规模大小,核心原则不变:先量化流量曲线,再定伸缩策略,最后用监控数据验证效果。从最小的HPA起步,逐步叠加VPA和多指标,就能让集群像中央厨房一样,把每一份算力都用在出餐的刀刃上。
apiVersion: autoscaling/v2kind: HorizontalPodAutoscalermetadata: name: ai-inference-hpaspec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: ai-inference minReplicas: 2 maxReplicas: 8 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 60
AI 应用场景
AI推理服务的在线弹性伸缩
阶段:模型部署与在线推理
解决的问题:AI推理Pod平时占用GPU/CPU资源,但请求量在一天内波动极大。静态部署按峰值分配算力,夜间与凌晨大量资源闲置;按均值分配又会在高峰期打满CPU、拖慢推理响应。HPA按CPU利用率与QPS双指标动态调整副本数,VPA则基于历史用量画像为每个Pod推荐合理的内存与GPU请求,两者协同将闲置与超卖同时压到最低。
具体案例:一家人脸识别公司部署了门禁检测服务,工作日白天办公园区请求峰值可达2000 QPS,夜间几乎归零。团队为推理Deployment配置了minReplicas=2、maxReplicas=10的HPA,同时让VPA每24小时重新校准Pod的resources。运行一个月后,GPU平均利用率从35%提升到71%,云账单成本下降约40%。
离线批处理作业的资源画像
阶段:模型训练数据预处理
解决的问题:数据处理作业每天跑同一批Pipeline,但每份作业的数据量和计算复杂度不同。手动为每个作业设置资源请求,要么设太大浪费排队空间,要么设太小OOM Killer频繁触发。VPA会自动收集每次作业的历史用量,在新作业提交时给出经过校准的资源推荐,让作业能更快调度、更少失败。
具体案例:某推荐算法团队每天处理约1TB用户行为日志。引入VPA Off模式后,VPA对每个预处理作业输出推荐资源值,调度系统按推荐值自动填充作业的requests字段。一周后作业平均排队时间下降52%,OOM导致的失败重跑减少六成。
金融级混合负载平台的容量保障
阶段:多团队共享K8s集群的资源调度
解决的问题:多个AI团队共用一套K8s集群,在线推理、模型训练、数据分析负载互相争抢资源。需要一套既保证核心交易链路优先扩容,又让非核心作业合理利用闲散算力的调度机制。HPA支持自定义指标与优先级配置,VPA则为不同负载提供差异化资源画像。
具体案例:某金融科技公司的K8s集群同时运行风控推理服务、量化策略回测与特征工程任务。平台团队为风控服务配置了基于P99延迟的自定义指标HPA,优先级设为最高;对回测与特征工程任务采用VPA推荐+抢占式节点池,充分利用Spot实例的空闲容量。上线半年集群整体算力利用率提升25%,核心链路SLA保持在99.99%。
Python 演示
"""模拟 HPA / VPA 弹性伸缩行为的小工具, 展示核心计算逻辑.""" import math class ElasticScaler: """一个同时演示 HPA 与 VPA 逻辑的简化集群伸缩器.""" def __init__(self, min_replicas, max_replicas, target_util): self.min_replicas = min_replicas self.max_replicas = max_replicas self.target_util = target_util self.replicas = min_replicas self.cpu_history = [] def observe(self, cpu_usage): self.cpu_history.append(cpu_usage) if len(self.cpu_history) > 60: self.cpu_history.pop(0) def hpa_scale(self, current_util): if current_util <= 0: return self.replicas ratio = current_util / self.target_util desired = math.ceil(self.replicas * ratio) return max(self.min_replicas, min(self.max_replicas, desired)) def vpa_recommend(self, percentile=90, margin=0.1): if not self.cpu_history: return self.target_util sorted_data = sorted(self.cpu_history) idx = min(len(sorted_data) - 1, int(percentile / 100 * len(sorted_data))) return int(sorted_data[idx] * (1 + margin)) def main(): scaler = ElasticScaler(min_replicas=2, max_replicas=8, target_util=50) loads = [30, 45, 60, 85, 95, 70, 50, 35, 40, 55, 75, 90, 60, 42, 28, 38, 52, 68, 82, 58] print("t(min) 负载(%) 副本变化 VPA推荐request") for minute, load in enumerate(loads): scaler.observe(load) old = scaler.replicas scaler.replicas = scaler.hpa_scale(load) action = "扩容" if scaler.replicas > old else "缩容" if scaler.replicas < old else "稳定" rec = scaler.vpa_recommend() print(f"{minute:5d} {load:5d} {old} -> {scaler.replicas} [{action}] {rec}m") if __name__ == "__main__": main()
class ElasticScaler:定义一个模拟弹性伸缩器的类,同时封装HPA与VPA行为self.replicas = min_replicas初始副本数设为最小值,相当于餐厅先开2个工位self.cpu_history = []维护历史负载样本列表,供VPA计算推荐值ratio = current_util / self.target_util计算当前负载与目标利用率的比值,这是HPA的核心决策依据desired = math.ceil(self.replicas * ratio)按比例缩放副本数并向上取整,确保Pod数是完整整数return max(self.min_replicas, min(self.max_replicas, desired))将结果夹在min和max之间,防止扩到失控或缩到零sorted_data = sorted(self.cpu_history)对历史样本排序,为计算百分位数做准备idx = min(len(sorted_data) - 1, int(percentile / 100 * len(sorted_data)))定位90分位在排序后列表中的索引scaler.observe(load)将当前负载记录进历史,相当于主厨记下今天的火力档位scaler.replicas = scaler.hpa_scale(load)应用HPA计算结果,更新当前副本数
常见误区
误区我配置了HPA后,Pod会自动扩容缩容,资源问题不就全解决了吗?为什么还要再学一个VPA?平时也不见它有什么动静。
正解HPA只解决“开几个工位”的问题,完全不关心“每个工位够不够大”。如果Pod的requests设得过大,HPA从1个副本扩到2个就以为能消化两倍流量,实际每个Pod都闲着大半个CPU;如果requests设得过小,HPA会拼命扩容,导致副本数虚高。VPA负责把“每个工位”校准到合理尺寸,是HPA判断正确的先决条件。
为何常见:HPA名字里带"Autoscaler"且效果立竿见影(副本数肉眼可见地增减),容易让人误以为它就是弹性伸缩的全部。
误区我同时打开了HPA和VPA,两者都盯着CPU指标,Kubernetes应该会自动处理它们的优先级吧?结果集群副本数像心跳一样上下波动,谁也劝不住。
正解HPA的扩缩会改变单Pod平均负载,VPA的推荐值也会改变分子的基准——两者同时干预同一指标,形成典型的负反馈振荡。正确做法是“先VPA后HPA”:先用VPA校准资源基线,再让HPA基于新基线做动态扩缩;或者干脆让VPA管内存、HPA管CPU,各管各的维度。
为何常见:K8s官方文档分别介绍了HPA和VPA,但很少有人把“两者共用同一指标会打架”这条禁忌写在开头,新手组合使用就踩坑。
误区我用VPA的Auto模式改资源,以为它会像云硬盘扩容那样热插拔,Pod不用重启就能生效。结果业务低谷期Pod一个个重建,我一脸懵。
正解VPA调整resources字段后,需要重建Pod才能让新的requests/limits生效。Auto模式会自动执行“删除-重建”流程,所以必然带来短暂的中断。如果业务完全不能容忍重启,应改用Initial模式,或在业务低峰窗口配合CronJob统一滚动重启。
为何常见:很多云数据库和中间件提供了“在线扩容”能力,让人误以为K8s的资源调整也是无感知的,忽略了Pod是“不可变基础设施”这一前提。
误区我把HPA的min/max、目标利用率都设好了,还加了冷却时间,应该能稳定运行很久吧?后来发现流量翻倍后扩容还是跟不上,或者副本一直卡在上限。
正解弹性伸缩的配置需要持续校准。目标利用率设得太低会频繁扩容,设得太高会导致扩容滞后;镜像变大变重会拉长Pod就绪时间;业务流量模式变化也会让原本的推荐值失效。应该用Prometheus持续观测伸缩延迟、副本抖动率与资源闲置率,定期复盘并调整配置。
为何常见:弹性伸缩表面上是“设置完就自动跑”的机制,容易被忽略的是它依赖的指标、镜像、流量模式都在不断变化,需要像运营餐厅一样周期性翻台复盘。
面试题
Q1. 关于HPA的职责,下列说法正确的是?
- A.按负载调整Pod副本数← 正确答案
- B.按负载更新镜像版本号
- C.按负载修改应用代码
- D.按负载调整网络路由表
答案:A。HPA全称Horizontal Pod Autoscaler,水平Pod自动伸缩器,核心职责就是根据负载指标自动调整Deployment的副本数。它不负责改代码、换镜像、调网络;这些分别属于CI/CD和网络插件的工作。就像前台经理只管开几个工位,不会去改菜谱。
Q2. HPA计算期望副本数时采用的核心公式是?
- A.副本数乘以负载数再除以目标值← 正确答案
- B.副本数除以负载数再乘以目标值
- C.目标值除以负载数再乘以副本数
- D.负载数除以目标值再除以副本数
答案:A。HPA的核心公式是desiredReplicas = ceil(currentReplicas × currentMetricValue / desiredMetricValue)。负载是分子、目标是分母,比例大于1就扩容,小于1就缩容。把它想成“排队人数超过红线的倍数”就能记住:排队是分子,红线是分母。
Q3. VPA的四种更新模式中,哪种会在Pod创建时注入推荐值?
- A.初始化模式← 正确答案
- B.自动更新模式
- C.关闭提醒模式
- D.手动调整模式
答案:A。Initial模式只在Pod创建时注入VPA推荐值,后续不再更新,适合不允许中断的服务。Auto模式会自动重建Pod以应用新值;Off模式只出推荐不执行;没有“关闭提醒模式”这种说法。类比主厨只在开工前定一次灶台尺寸,就是Initial模式。
Q4. HPA默认的指标同步周期和缩容冷却时间分别是?
- A.15秒同步与300秒冷却← 正确答案
- B.30秒同步与120秒冷却
- C.60秒同步与180秒冷却
- D.5秒同步与30秒冷却
答案:A。HPA默认每15秒从Metrics Server同步一次指标,扩容不受冷却限制,但缩容默认有300秒(5分钟)冷却窗口。这个不对称设计是为了防止刚缩完容流量又回来,造成副本数抖动的“过山车”现象,相当于经理加完窗口要稳定一会儿再考虑撤。
Q5. HPA支持配置的常见指标包括哪些?
- A.CPU利用率指标← 正确答案
- B.内存利用率指标← 正确答案
- C.自定义业务指标← 正确答案
- D.镜像构建时长指标
答案:ABC。HPA v2支持三类指标:Resource指标(CPU/内存)、Pod与Object自定义指标(如QPS、请求延迟)、External外部指标(如Kafka积压量)。镜像构建时长属于CI/CD范畴,与运行时弹性伸缩无关。就像经理既看排队人数,也可以看翻台率,但不会关心采购员买菜花了多久。
Q6. 当VPA采用自动更新模式调整Pod资源时会发生什么?
- A.副本数量自动增加一倍
- B.镜像版本回滚到上一个
- C.Pod重建以应用新资源← 正确答案
- D.运行资源立即热更新
答案:C。Auto模式下VPA会调用API修改PodTemplate的resources字段,然后逐个删除并重建Pod,让新配置生效。这个过程必然伴随短暂中断。副本数由HPA或Deployment策略决定,VPA不会直接改副本数量,Pod资源也不支持热更新。就像主厨要换灶台,厨师得先停工片刻。
Q7. 为什么HPA与VPA同时使用CPU指标会发生振荡?
- A.两者会改变副本数的基础比例
- B.两者基于同一指标持续反复调节← 正确答案
- C.两者都会重启Pod导致服务中断
- D.两者会覆盖集群默认的资源设置
答案:B。HPA调整副本数改变“分摊到每个Pod的负载”,VPA调整request改变“利用率计算的基准线”,两者都在动CPU指标的分母或分子,形成负反馈循环:VPA调大request→利用率下降→HPA缩容→Pod变少→负载重新升高→VPA继续调大……映射到餐厅就是经理和主厨同时干预同一道菜的火候,永远达不成稳态。
Q8. 以下哪些组合策略有助于HPA和VPA协同?
- A.先用VPA校准资源基线← 正确答案
- B.VPA管内存HPA管CPU指标← 正确答案
- C.同时基于CPU自动反复调节
- D.配置Pod重启的安全窗口← 正确答案
答案:ABD。“先VPA后HPA”是主流实践,让资源基线稳定后再做副本弹性;让VPA管内存、HPA管CPU可以彻底避免指标冲突;配置Pod重启安全窗口(如仅在低峰期重建)能减少VPA重建对业务的影响。选项C同时基于CPU自动调节正是引发振荡的根源,应当避免。
Q9. 评估弹性伸缩稳定性时重点观察哪个指标?
- A.集群总节点数量的规模
- B.应用代码提交的频繁度
- C.网络带宽的吞吐利用率
- D.副本数短期内的抖动次数← 正确答案
答案:D。弹性伸缩的稳定性核心看“副本抖动率”——单位时间内扩缩方向切换的次数。抖动率高说明策略对指标过于敏感,会导致下游连接、缓存、负载均衡器反复重建。集群规模、代码提交频率和网络吞吐是其他维度的指标,不代表伸缩稳定性。相当于经理一分钟内加了又撤三个工位,客人肯定被折腾疯。
Q10. 关于不同规模场景的HPA/VPA适配建议,正确的有哪些?
- A.小规模从HPA基础配置起步← 正确答案
- B.大规模采用多维指标协同← 正确答案
- C.所有场景都强制用VPA自动
- D.运维能力有限先选简单方案← 正确答案
答案:ABD。小规模集群用HPA加固定requests就足够简单有效;大规模集群需要VPA资源画像、多指标HPA、监控告警等协同工作;运维能力有限时应优先选择复杂度最低的配置。选项C过于绝对,VPA Auto模式会重建Pod,很多允许中断敏感的业务并不适用。弹性伸缩没有银弹,只有与场景匹配的方案。