下载工作台
项目运维与部署

HPA、压测与容量运维

试读上半部分 · 解锁后可读全文

第 10 章 · HPA 压测与容量运维

本章目标:用 k6 压测基线 + HPA + 副本数公式 把「感觉要扩容」变成可计算决策;与 架构 ch09 容量公式对齐;制定 demo-mall 大促 checklist。

学时建议:2.5~3 小时(含 2 小时跟练)

前置ops-deploy ch07 监控;架构 ch09 容量规划;ch02 requests 已配置。


10.1 场景说明

项目内容
背景demo-mall 大促预估 QPS 从 50 → 267;当前 prod 3 副本, unsure 是否够
痛点上次大促手动加副本滞后 20min;曾 OOMKill
你的角色容量运维,产出压测报告 + HPA 配置
本章任务staging k6 压测填表;prod 配 HPA;CPU 加压观察扩容
约束压测仅 staging-app;prod HPA maxReplicas 需变更单

10.2 学完你能

能力验收标准
压测运行 k6 并记录 VU/QPS/P99 表
安全水位从数据得出单 Pod 安全 QPS
副本公式大促 267 QPS 算出建议副本
HPA编写 v2 HPA YAML 并解释 behavior
集群扩容HPA vs Cluster Autoscaler 分工
大促清单6 项 checklist 勾选

10.3 容量运维闭环

业务预测 → k6 压测单 Pod 极限 → 算副本数 → HPA 自动 → 大促人工复核

你应该看到:文档链:业务 QPS 预测 → 压测报告 → HPA min/max → 变更单。


10.4 逐步跟练 · 第一步:k6 压测(约 50 分钟)

准备:staging demo-api 单副本或固定 1 Pod 压测(scale down 其他便于测单 Pod 极限)。

脚本 load-test.js

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '2m', target: 20 },   // 爬坡
    { duration: '5m', target: 60 },
    { duration: '3m', target: 100 },
    { duration: '2m', target: 0 },    // 降压
  ],
  thresholds: {
    http_req_failed: ['rate<0.001'],
    http_req_duration: ['p(99)<400'],
  },
};

export default function () {
  const res = http.get('http://demo-api.staging-app.svc/api/v1/products');
  check(res, { '200': r => r.status === 200 });
  sleep(0.1);
}

运行(集群内 k6 Job 或本地 port-forward):

k6 run load-test.js

同步观察运维 → 监控告警 CPU、P99、5xx。

结果记录表(单 Pod 2C4G 示例)

VUQPSP99错误率CPU%
2095120ms0%42
40175280ms0%68
60210380ms0.1%82
80228520ms1.4%95

安全水位定义:P99 < 400ms 且错误率 < 0.1% 的最高 QPS → 本例 ≤ 180 QPS/Pod

你应该看到:VU=80 时 thresholds 失败;k6 输出红色 ✗。


10.5 逐步跟练 · 第二步:副本数公式(约 20 分钟)

副本数 = ceil(目标QPS / 单Pod安全QPS × (1 + 冗余率))
场景计算建议副本
日常 50 QPS,冗余 35%ceil(50/180×1.35)=13(跨 AZ N+1,非纯数学 1)
大促 267 QPSceil(267/180×1.35)=26~8(含 HPA headroom)

工程规则:数学 ceil 结果与 minReplicas、PDB、多 AZ 取 max。

你应该看到:书面结论「大促前 minReplicas 提至 6,maxReplicas 12」。


10.6 逐步跟练 · 第三步:HPA 配置(约 40 分钟)

应用部署 → prod-app → HPA 或 YAML:

apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
  name: demo-api-hpa
  namespace: prod-app
spec:
  scaleTargetRef:
    apiVersion: apps/v1
    kind: Deployment
    name: demo-api
  minReplicas: 3
  maxReplicas: 12
  metrics:
    - type: Resource
      resource:
        name: cpu
        target:

以下内容需解锁后阅读

试读已结束。解锁本章 ¥5.00,或开通年度会员畅读全部教程。
年度会员 ¥199.00/年; 小紫 AI 工作台有效会员 ¥99.00/年

正文仅在服务端鉴权后下发,未付费无法获取下半部分内容。