4. 性能基准测试概述:为什么需要性能基准测试,测试的关键指标

在将 Kyverno 准入策略部署到平台门户之前,必须回答一个核心问题:策略引擎对 API 服务器的延迟、集群资源的消耗以及整体吞吐量会产生多大影响? 性能基准测试正是为了量化这一影响,为容量规划、策略优化和准入控制决策提供数据支撑。

4.1 为什么需要性能基准测试

Kyverno 作为动态准入控制器(Dynamic Admission Controller),会在每个资源创建/更新请求到达 API Server 时触发策略评估。如果没有基准测试,团队可能面临以下风险:

  • 未知的延迟放大:复杂策略(如 JSON Patch 生成、外部数据查询)可能将请求延迟从毫秒级推高到秒级,导致客户端超时。
  • 资源争抢与 OOM:高并发场景下,Kyverno Pod 的 CPU/内存消耗可能失控,影响集群中其他控制面组件。
  • 吞吐量瓶颈:策略引擎的处理能力可能成为集群的短板,限制 CI/CD 流水线的部署频率。
  • 缺乏容量基线:无法回答“当前集群能承载多少条策略?”或“升级 Kyverno 版本后性能是否回退?”。
核心原则:基准测试不是一次性活动,而是伴随策略生命周期持续进行的质量门禁。每次新增策略、调整策略复杂度或升级 Kyverno 版本后,都应重新运行基准测试。

4.2 测试的关键指标

性能基准测试围绕三个维度展开:延迟(Latency)、吞吐量(Throughput) 和 资源消耗(Resource Consumption)。下表总结了各维度的定义、度量单位及在 Kyverno 场景下的关注点:

维度 定义 度量单位 Kyverno 场景关注点
延迟 从 API Server 发送 AdmissionReview 请求到收到 AdmissionResponse 的时间间隔 毫秒(ms) P50/P95/P99 延迟;策略复杂度(正则、JSON Patch、变量替换)对延迟的影响
吞吐量 单位时间内 Kyverno 成功处理的 AdmissionReview 请求数量 请求/秒(req/s) 最大稳定吞吐量;策略数量与吞吐量的衰减曲线
资源消耗 Kyverno Pod 在测试期间占用的 CPU 和内存 毫核(mCPU)、兆字节(MiB) CPU 使用率峰值、内存泄漏趋势、OOMKill 风险

4.3 延迟指标详解

延迟是用户最敏感的指标。在准入控制场景中,API Server 会等待所有准入插件(包括 Kyverno)返回结果后才将资源持久化。因此,Kyverno 的延迟会直接累加到资源创建/更新的总耗时中。

  • P50 延迟:半数请求的延迟低于此值,反映典型负载下的性能。
  • P95 延迟:95% 的请求延迟低于此值,用于评估大多数用户的体验。
  • P99 延迟:99% 的请求延迟低于此值,用于发现极端情况下的性能抖动。
注意:Kyverno 的延迟不仅包括策略规则匹配时间,还包括 Webhook 网络往返时间 和 策略缓存命中率。基准测试应尽量在真实网络拓扑下进行,避免 localhost 测试带来的乐观偏差。

4.4 吞吐量指标详解

吞吐量决定了集群在单位时间内能处理多少资源变更请求。当吞吐量低于业务需求时,API Server 会开始排队请求,最终导致客户端超时或限流。

吞吐量测试通常采用 阶梯加压 方式:从低并发开始,逐步增加请求速率,直到系统出现错误或延迟超过阈值(如 P99 > 1s)。此时的吞吐量即为 最大稳定吞吐量。

4.5 资源消耗指标详解

Kyverno 的资源消耗直接影响集群控制面的稳定性。基准测试需要采集以下数据:

资源类型 采集方式 关键阈值
CPU(mCPU) kubectl top pod 或 Prometheus container_cpu_usage_seconds_total 持续超过 80% 的 CPU Request 时需扩容
内存(MiB) kubectl top pod 或 Prometheus container_memory_working_set_bytes 接近 Memory Limit 时存在 OOMKill 风险
Go 协程数 Kyverno 自身 metrics 端点 /metrics 异常增长可能表示协程泄漏

4.6 三个维度的关联关系

延迟、吞吐量和资源消耗并非独立指标,它们之间存在典型的 性能三角 关系:

Kyverno 性能三角 延迟 (Latency) 吞吐量 (Throughput) 资源消耗 (Resources) 增加策略复杂度 → 延迟上升 → 吞吐量下降 降低资源限制 → 资源争抢 → 延迟抖动加剧

上图揭示了三个指标之间的典型权衡:

  • 延迟与吞吐量:延迟越低,单位时间内能处理的请求越多,吞吐量越高。
  • 延迟与资源消耗:分配更多 CPU/内存通常能降低延迟,但存在边际递减效应。
  • 吞吐量与资源消耗:提升吞吐量需要消耗更多资源,但资源消耗过高会触发 OOM 或限流,反而降低吞吐量。

4.7 基准测试的输入与输出

一次完整的性能基准测试需要明确以下输入,并产出结构化的输出报告:

输入:
  • 测试策略集(策略数量、复杂度等级)
  • 测试负载模型(并发数、请求速率、资源类型分布)
  • 集群环境信息(节点规格、Kyverno 版本、Pod 资源限制)
  • 测试持续时间(通常不少于 5 分钟,以消除冷启动影响)
输出:
  • 延迟分布(P50/P95/P99 及直方图)
  • 吞吐量曲线(请求速率 vs 错误率)
  • 资源消耗时序图(CPU/内存/协程数)
  • 性能基线报告(用于后续对比)

4.8 基准测试的典型流程

下图展示了 Kyverno 准入策略性能基准测试的标准化流程:

Kyverno 准入策略性能基准测试流程 1. 环境准备 2. 策略部署 3. 负载生成 4. 数据采集 5. 分析报告 6. 优化迭代 反馈循环:根据报告结果调整策略或资源

该流程强调 迭代闭环:基准测试不是一次性的,每次策略变更或环境升级后都应重新执行,确保性能基线始终有效。