概述自动扩缩的目标是在负载变化时保持服务稳定与成本可控。本文覆盖 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 设置过紧导致发布失败或扩缩受限。结语通过合理的阈值与资源治理,自动扩缩可在真实负载下稳定工作,并以监控与压测验证其有效性。

发表评论 取消回复