4. 性能基准测试方法:使用 kube-burner 模拟负载、Prometheus 指标采集、关键性能指标(KPI)定义
性能基准测试是量化 Kyverno 策略冷启动影响的核心手段。本章定义一套可复现的测试方法,涵盖负载生成、指标采集与 KPI 定义,确保每次测试结果具备可比性与可审计性。
4.1 测试拓扑与组件关系
下图展示了基准测试环境中各组件之间的数据流与依赖关系:
4.2 负载生成:kube-burner 配置
kube-burner 是一个 Kubernetes 原生负载生成工具,支持声明式配置。以下配置模拟策略冷启动场景:
# kube-burner-config.yaml
apiVersion: kube-burner.io/v1alpha1
kind: Config
metadata:
name: kyverno-coldstart-benchmark
spec:
global:
writeToFile: true
metricsDirectory: collected-metrics
jobs:
- name: create-pods-with-policies
jobIterations: 500
qps: 50
burst: 100
namespacedIterations: true
namespace: kyverno-bench-{{.iteration}}
waitFor: ["PodReady"]
maxWaitTimeout: 120s
objects:
- objectTemplate: pod-template.yaml
replicas: 1
inputVars:
image: nginx:1.25
label: "app=benchmark"
cleanup: true
preLoadImages: false
参数调优建议: jobIterations 控制总负载量,建议从 100 开始逐步递增至 1000,观察 Kyverno 响应延迟的拐点。qps/burst 应匹配生产环境准入请求速率。
4.3 Prometheus 指标采集配置
Prometheus 通过 ServiceMonitor 自动发现 Kyverno 暴露的指标端点。关键采集配置如下:
# prometheus-additional-scrape-config.yaml
- job_name: 'kyverno-metrics'
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- kyverno
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
regex: kyverno
action: keep
- source_labels: [__meta_kubernetes_pod_container_port_number]
regex: "8000"
action: keep
metrics_path: /metrics
scrape_interval: 10s
scrape_timeout: 5s
| 指标名称 | 类型 | 说明 | 采集频率 |
|---|---|---|---|
| kyverno_policy_rule_duration_seconds | Histogram | 策略规则执行耗时分布 | 10s |
| kyverno_admission_webhook_latency_seconds | Summary | 准入 Webhook 延迟分位数 | 10s |
| kyverno_policy_changes_total | Counter | 策略变更事件计数 | 10s |
| process_cpu_seconds_total | Counter | Kyverno 容器 CPU 使用 | 15s |
| container_memory_working_set_bytes | Gauge | Kyverno 容器内存工作集 | 15s |
4.4 关键性能指标(KPI)定义
为量化冷启动瓶颈,定义以下四类 KPI:
KPI 分类体系:
- 延迟类:P50/P95/P99 准入延迟、策略规则执行耗时
- 吞吐类:每秒处理准入请求数、策略评估吞吐量
- 资源类:CPU 使用率峰值、内存增长斜率、OOM 事件频率
- 稳定性类:超时请求占比、错误响应率、Webhook 重启次数
4.5 测试执行流程
完整的基准测试按以下阶段顺序执行:
- 预热阶段(30s):发送 50 个低负载请求,触发策略缓存初始化
- 基线采集(60s):空载状态下采集 Prometheus 指标,建立基线
- 负载注入(120s):kube-burner 按配置发送请求,持续采集指标
- 冷却观察(60s):停止负载后继续采集,观察资源回收与缓存衰减
- 数据导出:导出 Prometheus 原始数据与 kube-burner 日志
4.6 数据采集与处理命令
以下命令用于启动测试与导出指标:
# 启动 kube-burner 测试
kube-burner init -c kube-burner-config.yaml
# 导出 Prometheus 原始指标(使用 promtool)
promtool query range \
--start=2025-01-15T10:00:00Z \
--end=2025-01-15T10:05:00Z \
--step=10s \
'histogram_quantile(0.99, rate(kyverno_admission_webhook_latency_seconds_bucket[1m]))' \
> p99-latency.csv
# 导出 kube-burner 内置指标
kube-burner check -d collected-metrics/ --timeout 30s
注意事项: 每次测试前需确保 Kyverno 策略已全部加载完毕,可通过
kyverno_policy_changes_total 指标确认策略计数稳定。测试环境应隔离,避免其他工作负载干扰指标采集。
4.7 结果判定标准
| KPI 名称 | 健康阈值 | 警告阈值 | 故障阈值 |
|---|---|---|---|
| P99 准入延迟 | < 500ms | 500ms - 2s | > 2s |
| 策略评估吞吐量 | > 200 req/s | 100 - 200 req/s | < 100 req/s |
| 内存增长斜率 | < 50 MB/min | 50 - 150 MB/min | > 150 MB/min |
| 超时请求占比 | < 0.1% | 0.1% - 1% | > 1% |