4. 资源画像概念:什么是资源画像?

资源画像(Resource Profile)是对 Kubernetes Pod 在运行周期内资源使用行为的数字化建模。它不再依赖 Pod 的 Request/Limit 静态声明,而是通过采集历史监控数据,为每个 Pod 生成一组描述其 CPU、内存、网络 I/O 随时间变化规律的特征向量。资源画像是实现节点碎片整理与 FinOps 标签治理的数据基座。

核心定义:资源画像 = 时间序列指标 × 统计特征提取 × 行为模式分类。它回答“Pod 真正用了多少资源?怎么用的?什么时候用的?”三个关键问题。

4.1 资源画像的三维建模维度

一个完整的资源画像从三个核心维度对 Pod 进行建模,每个维度对应不同的 FinOps 优化策略:

维度 采集指标 建模输出 FinOps 价值
CPU 画像 container_cpu_usage_seconds_total
container_cpu_cfs_throttled_seconds_total
P50/P95/P99 利用率、突发系数、节流率 识别超卖风险、优化 Request 设置
内存画像 container_memory_working_set_bytes
container_memory_rss
常驻集大小、峰值/谷值、增长斜率 避免 OOMKill、减少资源预留浪费
网络画像 container_network_receive_bytes_total
container_network_transmit_bytes_total
吞吐量基线、连接数模式、突发窗口 网络带宽成本分摊、流量标签治理

4.2 基于历史指标的行为建模流程

资源画像的生成遵循“采集 → 清洗 → 聚合 → 建模 → 分类”五步流水线。以下是一个典型的建模流程:

  1. 数据采集:通过 Prometheus/cAdvisor 以 15s~60s 间隔拉取 Pod 级容器指标,保留至少 7 天历史窗口。
  2. 数据清洗:剔除冷启动阶段(前 5 分钟)、OOM 重启前后、节点故障等异常数据点。
  3. 时间窗口聚合:按 1h/6h/24h 粒度计算 P50、P95、P99 分位数,生成“日周期特征向量”。
  4. 行为模式提取:使用滑动窗口检测“突发峰值”、“稳态运行”、“周期性波动”三类基础模式。
  5. 画像标签生成:输出结构化的 JSON 画像记录,写入 CRD 或标签系统。
实践建议:推荐使用 14 天历史数据作为建模基线。少于 7 天会导致画像不稳定,超过 30 天则引入过多噪声。对于无状态批处理作业,应单独设置“作业级画像”而非“Pod 级画像”。

4.3 资源画像的典型输出结构

以下是一个经过建模后的资源画像 JSON 示例,展示了 CPU 和内存维度的特征向量:

{
  "pod": "nginx-ingress-controller-7d8b9c",
  "namespace": "ingress-nginx",
  "profile_version": "v2",
  "cpu": {
    "request_ratio": 0.42,
    "limit_ratio": 0.18,
    "p50_utilization": 0.35,
    "p95_utilization": 0.68,
    "p99_utilization": 0.82,
    "burst_factor": 2.34,
    "throttle_percent": 1.2,
    "pattern": "periodic_burst"
  },
  "memory": {
    "working_set_p50_mb": 128,
    "working_set_p95_mb": 256,
    "working_set_p99_mb": 384,
    "rss_base_mb": 96,
    "growth_rate_mb_per_hour": 0.5,
    "pattern": "stable"
  },
  "network": {
    "ingress_mbps_p50": 15.2,
    "egress_mbps_p50": 8.7,
    "connection_count_p50": 120,
    "pattern": "steady_flow"
  }
}

4.4 资源画像与静态声明的对比

传统 Kubernetes 资源管理依赖 Request/Limit 的静态声明,而资源画像提供了动态、数据驱动的视角。两者的关键差异如下:

对比维度 静态声明(Request/Limit) 资源画像(动态建模)
数据来源 开发者手动填写 历史监控指标自动采集
时间维度 无时间概念,固定值 包含时间序列、周期、趋势
精度 粗粒度,通常过度预留 50%~200% 细粒度,P50/P95/P99 分位精确描述
异常感知 无法感知资源浪费或超卖 可识别闲置、突发、节流等异常模式
FinOps 能力 仅用于调度和限额 支持成本分摊、碎片整理、标签治理

4.5 资源画像驱动的行为模式分类

基于历史指标建模后,Pod 的资源行为可归纳为四种典型模式。每种模式对应不同的节点碎片整理策略:

  • 稳态型(Stable):CPU/内存使用率波动 < 15%,适合与同类 Pod 共置,碎片风险低。
  • 周期突发型(Periodic Burst):每天固定时段出现 2~5 倍峰值,适合错峰调度,利用碎片窗口。
  • 随机尖刺型(Spiky):峰值不可预测,P99 利用率 > 3× P50,需要预留安全缓冲,碎片整理优先级高。
  • 闲置型(Idle):长期利用率 < 5%,是碎片整理和成本回收的首要目标。
注意:不要将“闲置型”Pod 直接删除。应先通过 FinOps 标签标记为“可回收”,观察 48 小时确认无业务影响后,再执行缩容或驱逐操作。资源画像应每 7 天重新计算一次,以捕捉业务模式变化。
资源画像建模流程与行为模式分类 资源画像建模流程与行为模式分类 ① 数据采集 Prometheus / cAdvisor ② 数据清洗 剔除异常 / 冷启动 ③ 时间窗口聚合 1h / 6h / 24h 分位数 ④ 行为模式提取 滑动窗口 / 模式匹配 ⑤ 画像标签生成 CRD / 标签系统 稳态型 波动 < 15% · 低碎片风险 周期突发型 定时峰值 · 错峰调度 随机尖刺型 P99 > 3×P50 · 高优先级 闲置型 利用率 < 5% · 可回收 💡 资源画像每 7 天重新计算,结合 FinOps 标签实现自动化碎片整理与成本优化 数据源:container_cpu_usage_seconds_total · container_memory_working_set_bytes · container_network_receive_bytes_total

4.6 资源画像在 FinOps 标签治理中的角色

资源画像的输出可以直接映射为 FinOps 标签,实现“画像驱动标签、标签驱动治理”的闭环:

  • profile/pattern=stable|burst|spiky|idle:行为模式标签,用于调度策略和碎片整理优先级。
  • profile/cpu_burst_factor=2.34:CPU 突发系数标签,用于 Overcommit 比例计算。
  • profile/memory_stability=high:内存稳定性标签,用于内存超卖决策。
  • profile/optimization_target=reclaim|resize|reshcedule:优化动作标签,驱动自动化工具链。
最佳实践:在集群中部署 goldilocks 或 kube-resource-optimizer 等开源工具,自动生成资源画像并写入 Pod 标签。结合 OPA/Gatekeeper 策略,实现“画像标签缺失 → 拒绝调度”的治理规则。