---
title: Kubernetes自动扩缩与资源配额实践
keywords:
- Kubernetes
- HPA
- VPA
- ResourceQuota
- LimitRange
- Requests
- Limits
- metrics-server
- Pod
- 资源配额
description: 通过 HPA/VPA 与资源配额(ResourceQuota、LimitRange)实现稳定的自动扩缩与资源治理,附可运行示例与验证方法。
date: 2025-11-25
categories:
- 文章资讯
- 技术教程
---
概述
自动扩缩的目标是在负载变化时保持服务稳定与成本可控。本文覆盖 HPA/VPA 的启用与参数选择,以及 ResourceQuota/LimitRange 的治理方法,确保在生产环境中可度量、可复现。
前置条件(已验证)
- 安装 metrics-server,保证
kubectl top可用。 - 为部署设置
resources.requests/limits:CPU 使用 millicores(如250m),内存使用 Mi/Gi(如512Mi)。
HPA(水平自动扩缩)
建议阈值
- CPU 目标利用率:60%–70%(以 P75 负载为参照进行验证)。
- 副本上限:按峰值 QPS 与单 Pod 极限吞吐估算,预留 20% 裙带。
示例(Deployment + HPA)
apiVersion: apps/v1
kind: Deployment
metadata:
name: web
spec:
replicas: 2
selector:
matchLabels: { app: web }
template:
metadata: { labels: { app: web } }
spec:
containers:
- name: web
image: nginx:1.25
resources:
requests: { cpu: "250m", memory: "256Mi" }
limits: { cpu: "500m", memory: "512Mi" }
---
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web
minReplicas: 2
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 65
VPA(垂直自动扩缩)
- 在静态或低并发服务中,使用 VPA 建议值辅助确定
requests/limits,避免频繁重启。 - 与 HPA 同时启用需谨慎:避免相互干扰,常见做法是 HPA 主、VPA 仅建议或只调内存。
资源治理
LimitRange(命名空间内默认资源范围)
apiVersion: v1
kind: LimitRange
metadata:
name: ns-default-limits
spec:
limits:
- type: Container
default: { cpu: "500m", memory: "512Mi" }
defaultRequest: { cpu: "250m", memory: "256Mi" }
ResourceQuota(命名空间配额)
apiVersion: v1
kind: ResourceQuota
metadata:
name: ns-quota
spec:
hard:
requests.cpu: "4"
limits.cpu: "8"
requests.memory: "8Gi"
limits.memory: "16Gi"
pods: "50"
验证流程
- 压测前后使用
kubectl top pods与 HPA 事件确认扩缩行为。 - 观察
maxReplicas是否达到上限;评估是否需提升上限或优化单 Pod 资源。 - 记录发布前后 P95/P99 响应时间与错误率,确保扩缩改善体验而非破坏稳定性。
常见误区
- 未设置
requests/limits导致 HPA 无法准确计算目标利用率。 - 过度依赖 HPA 忽略长 GC/IO 峰值,应配合限流与队列缓冲。
- ResourceQuota 设置过紧导致发布失败或扩缩受限。
结语
通过合理的阈值与资源治理,自动扩缩可在真实负载下稳定工作,并以监控与压测验证其有效性。

发表评论 取消回复