4. 升级前基线验证:基线环境搭建、租户资源清单、功能与性能基线采集
升级前基线验证是集群升级流程中最重要的前置环节。其核心目标是在升级操作开始前,建立一个可被精确度量的“锚点”,确保升级后任何功能或性能的偏差都能被快速识别。本节围绕基线环境的搭建、租户资源清单的梳理以及功能与性能基线的采集展开。
4.1 基线环境搭建
基线环境必须与生产环境在架构、版本、配置上保持严格一致,但流量隔离。推荐使用独立的命名空间或物理集群作为基线测试床。
| 环境组件 | 版本/配置要求 | 验证点 |
|---|---|---|
| Kubernetes 集群 | 与生产集群版本一致(如 v1.27.3) | 节点状态、etcd 健康、CNI 连通性 |
| 租户隔离插件 | 与生产一致(如 vCluster / Kiosk / Capsule) | 租户 CRD 注册、Webhook 响应 |
| 监控与日志 | Prometheus + Grafana + Loki 同版本 | 指标采集链路、日志聚合延迟 |
| 测试负载工具 | k6 / Locust / wrk 固定版本 | 脚本可执行、结果可导出 |
实践建议:基线环境建议使用 Infrastructure as Code(Terraform / Crossplane)一次性声明,避免手动搭建导致的配置漂移。搭建完成后执行一次全量 smoke test,确认环境自愈。
4.2 租户资源清单
租户资源清单是基线采集的数据基础。需要从控制面和数据面两个维度梳理每个租户的资产。
- 控制面资源:Namespace、RBAC(Role / RoleBinding / ClusterRole)、NetworkPolicy、ResourceQuota、LimitRange、ServiceAccount。
- 数据面资源:Deployment / StatefulSet / DaemonSet、ConfigMap / Secret、Service / Ingress、PVC / PV、HPA / VPA。
- 隔离边界资源:租户 CR 实例(如 Tenant / ClusterWorkspace)、准入 Webhook 配置、MutatingWebhookConfiguration。
清单采集命令示例:
# 导出指定租户的所有资源清单
kubectl get tenant my-tenant -o yaml > tenant-my-tenant.yaml
# 获取租户下所有命名空间的资源计数
kubectl get namespace --selector=tenant=my-tenant \
-o jsonpath='{range .items[*]}{.metadata.name}{"\n"}{end}' \
| xargs -I {} kubectl get all -n {} --no-headers | wc -l
# 导出租户的 NetworkPolicy 用于隔离验证
kubectl get networkpolicy -n tenant-ns-1 -o yaml > netpol-tenant-ns-1.yaml
4.3 功能基线采集
功能基线验证覆盖租户隔离的核心能力,包括网络隔离、资源配额、权限边界和自服务操作。每个功能点需定义明确的通过/失败标准。
| 功能域 | 测试用例 | 预期结果 | 采集方式 |
|---|---|---|---|
| 网络隔离 | 跨租户 Pod 连通性 | 默认拒绝,显式允许例外 | kubectl exec + curl / ping |
| 资源配额 | 租户内创建超过 ResourceQuota 的 Pod | API Server 返回 403 Forbidden | kubectl apply 验证错误码 |
| 权限边界 | 租户 A 用户查看租户 B 的 Pod | 返回空列表或 403 | kubectl auth can-i 模拟 |
| 自服务操作 | 租户管理员创建子 Namespace | 成功创建,受父租户配额约束 | kubectl create ns 验证 |
注意:功能基线采集必须使用与生产一致的认证凭据(ServiceAccount / OIDC ),避免使用集群管理员权限绕过隔离逻辑。采集结果应输出为 JSON 格式,便于后续自动化比对。
4.4 性能基线采集
性能基线关注升级对租户隔离带来的额外开销,包括 API Server 响应延迟、网络吞吐、调度延迟和资源隔离开销。
- API Server 延迟:使用
kubectl get pods --all-namespaces --=<tenant->测量 P99 响应时间。 - 网络吞吐:在租户内启动 iperf3 客户端-服务端,记录 TCP 吞吐量(Gbps)。
- 调度延迟:记录从创建 Pod 到 Pod 进入 Running 状态的时间差(秒)。
- 隔离开销:对比基线环境与无隔离集群的相同负载下的 CPU 和内存增量。
性能基线采集脚本片段:
#!/bin/bash
# 采集 API Server 响应延迟(P99)
for i in {1..100}; do
time kubectl get pods -n tenant-ns-1 \
--=$(cat tenant-.txt) \
--request-timeout=5s 2>&1 | grep real | awk '{print $2}'
done | sort -n | awk '{all[NR]=$1} END{print all[int(NR*0.99)]}'
4.5 基线数据归档与版本化
所有基线数据必须版本化存储,与集群版本、租户隔离插件版本、测试时间戳关联。推荐使用 Git LFS 或对象存储管理基线快照。
归档结构示例:
baselines/
├── v1.27.3/
│ ├── tenant-resource-list.json
│ ├── functional-baseline.json
│ └── performance-baseline.json
├── v1.28.0/
│ └── ...
└── baseline-manifest.yaml
归档完成后,执行一次基线校验脚本,确保所有采集点数据完整、格式正确,并生成一份基线报告摘要。