4. 性能基准测试方法:使用 kube-burner 模拟负载、Prometheus 指标采集、关键性能指标(KPI)定义

性能基准测试是量化 Kyverno 策略冷启动影响的核心手段。本章定义一套可复现的测试方法,涵盖负载生成、指标采集与 KPI 定义,确保每次测试结果具备可比性与可审计性。

4.1 测试拓扑与组件关系

下图展示了基准测试环境中各组件之间的数据流与依赖关系:

性能基准测试组件拓扑 kube-burner 负载生成器 Kubernetes API 准入控制器 Kyverno Webhook 引擎 Prometheus 指标采集 Thanos / Grafana 存储与可视化 关键说明 kube-burner 直接向 API 发送资源创建请求 触发 Kyverno 准入 Webhook

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 测试执行流程

完整的基准测试按以下阶段顺序执行:

  1. 预热阶段(30s):发送 50 个低负载请求,触发策略缓存初始化
  2. 基线采集(60s):空载状态下采集 Prometheus 指标,建立基线
  3. 负载注入(120s):kube-burner 按配置发送请求,持续采集指标
  4. 冷却观察(60s):停止负载后继续采集,观察资源回收与缓存衰减
  5. 数据导出:导出 Prometheus 原始数据与 kube-burner 日志
基准测试执行时间线 预热 30s 基线采集 60s 负载注入 120s 冷却观察 60s 数据导出 30s T+0s T+30s T+90s T+210s T+270s T+300s

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%