4. 水位(Watermark)概念:资源水位、成本水位与风险水位定义
在 Kubecost 的准入策略体系中,水位(Watermark)是衡量集群资源利用效率、成本健康度与变更风险的核心量化指标。水位不是一个单一数值,而是从三个不同维度对集群状态进行标定:资源水位、成本水位与风险水位。理解这三个水位的定义与相互关系,是配置准入策略、拦截高风险变更的前提。
4.1 三种水位的定义与对比
| 水位类型 | 核心度量 | 典型阈值区间 | 准入策略关注点 |
|---|---|---|---|
| 资源水位 | CPU / 内存 / GPU 的请求(Request)与限制(Limit)利用率 | 低水位:< 40% 中水位:40% – 75% 高水位:> 75% |
资源是否过度预留或接近饱和 |
| 成本水位 | 每核心小时成本、命名空间月度支出、闲置成本占比 | 低水位:< 预算 60% 中水位:60% – 90% 高水位:> 90% |
变更是否导致成本超预算或浪费加剧 |
| 风险水位 | 变更影响范围、回滚复杂度、历史故障率 | 低风险:影响 < 5% 副本 中风险:影响 5% – 30% 副本 高风险:影响 > 30% 副本 |
变更是否可能引发级联故障或服务降级 |
4.2 资源水位(Resource Watermark)
资源水位反映集群中计算资源(CPU、内存、GPU)的实际使用量与预留量之间的关系。Kubecost 通过分析 Prometheus 中的容器指标,计算每个工作负载的 Request 利用率和 Limit 利用率,并聚合到节点、命名空间、集群层级。
- Request 利用率 = 实际使用量 / Request 值 × 100%
- Limit 利用率 = 实际使用量 / Limit 值 × 100%
- 节点饱和度 = 所有 Pod Request 总和 / 节点可分配资源 × 100%
当资源水位超过 75% 时,集群进入“高水位”状态,此时新增 Pod 可能因资源不足而 Pending,或导致现有 Pod 被驱逐。准入策略在此水位下会拒绝任何未设置资源限制或 Request 过高的变更。
4.3 成本水位(Cost Watermark)
成本水位衡量的是集群支出与预算的偏离程度。Kubecost 将云账单数据与 Kubernetes 资源标签关联,计算出每个命名空间、部署、标签维度的实际成本,并与预设的预算阈值进行比较。
| 成本水位等级 | 判定条件 | 准入策略动作 |
|---|---|---|
| 低水位 | 当前支出 < 预算的 60% | 允许变更,记录成本增量 |
| 中水位 | 当前支出在预算的 60% – 90% 之间 | 允许变更,但触发成本告警通知 |
| 高水位 | 当前支出 > 预算的 90% | 拦截变更,要求提供成本优化理由 |
4.4 风险水位(Risk Watermark)
风险水位评估变更操作本身对集群稳定性的潜在冲击。Kubecost 通过分析变更的 影响半径(受影响的 Pod 副本数占比)、回滚复杂度(是否涉及有状态服务、PVC、多副本)、以及 历史故障率(该命名空间或工作负载在过去 7 天的故障次数)来综合计算风险分数。
- 影响半径:变更涉及的 Pod 副本数 / 该工作负载总副本数 × 100%
- 回滚复杂度:有状态服务 +2 分,多副本 +1 分,无状态单副本 +0 分
- 历史故障率:过去 7 天故障次数 × 10 分/次
风险分数 ≥ 60 分即判定为高风险水位,准入策略将强制要求人工审批或直接拒绝变更。
4.5 三种水位的联动关系
4.6 水位在准入策略中的实际应用
在 Kubecost 准入策略中,三种水位被组合成 复合水位评分,用于决定是否允许变更通过。以下是一个典型的评分规则示例:
# 复合水位评分规则(伪代码)
def calculate_watermark_score(resource_wm, cost_wm, risk_wm):
# 每个水位等级映射为分数:低=0,中=1,高=2
total = resource_wm.score + cost_wm.score + risk_wm.score
if total >= 4: # 至少两个高水位或一个高+两个中
return "BLOCK"
elif total >= 2:
return "WARN"
else:
return "ALLOW"
4.7 水位数据的获取与更新频率
| 水位类型 | 数据源 | 更新频率 | 延迟 |
|---|---|---|---|
| 资源水位 | Prometheus (kube-state-metrics, cAdvisor) | 每 30 秒 | < 1 分钟 |
| 成本水位 | 云账单 API + Kubecost 成本模型 | 每小时 | 15 – 30 分钟 |
| 风险水位 | Kubernetes Events + Kubecost 审计日志 | 实时(变更触发时计算) | < 5 秒 |
由于成本水位的更新频率较低,准入策略在评估成本水位时,会使用最近一次有效数据并结合当前变更的资源增量进行预估计算,以确保实时性。