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

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部