为什么需要自动扩缩容
负载具有波动性,合理的自动扩缩容能在保障 SLO 的前提下降低成本。Kubernetes 提供 HPA(水平)与 VPA(垂直)两种机制,搭配资源 Requests/Limits 与配额可实现稳定弹性。
核心概念
- Requests/Limits:调度与资源上限控制的基础。Requests 影响调度与 QoS,Limits 限制实际可用上限。
- HPA:依据指标(CPU、内存、或自定义 Prometheus 指标)动态调整副本数。
- VPA:根据历史与当前资源使用建议容器的 Requests/Limits(部分场景与 HPA 不建议同时强绑定)。
实施步骤
- 明确服务 SLO 与关键指标(如 p95 延迟、错误率)
- 暴露 Prometheus 指标并接入 Metrics Server/Adapter
- 设定 HPA 目标与最小/最大副本,评估扩缩容冷却时间
- 启用 VPA(推荐先处于 `recommendation` 模式,观察建议)
- 结合命名空间资源配额(ResourceQuota)防止资源挤兑
验证与观测
- 使用负载生成器(如 k6)进行压测,观察 HPA 反应与系统稳定性
- 监控扩容事件与 Pod 重启,检查是否因 Limits 触发 OOMKill
常见实践
- 以 CPU 利用率驱动 HPA,配合自定义业务 QPS/延迟指标做多维评估
- 将批处理任务与在线服务隔离命名空间,设置独立配额
注意事项
- 过低的 Requests 导致调度不稳定;过高的 Limits 容易资源抢占
- VPA 与 HPA 同时调优需谨慎,避免“拉扯”效应

发表评论 取消回复