3. 压测数据集群环境搭建:使用 Kind 或 K3s 快速搭建多节点压测集群,配置 Prometheus + Grafana 监控栈
压测数据集群是证书轮换作业容量基线校准的基础设施。本章将指导你使用 Kind(Kubernetes in Docker)或 K3s(轻量级 Kubernetes)快速搭建多节点集群,并部署 Prometheus + Grafana 监控栈,为后续压测提供可观测性支撑。
3.1 集群方案选型对比
根据压测场景的资源需求与运维复杂度,推荐以下两种方案:
| 特性 | Kind | K3s |
|---|---|---|
| 底层依赖 | Docker 容器模拟节点 | 原生进程 + containerd |
| 节点数量 | 单机多节点(1 控制面 + N Worker) | 单机或跨主机多节点 |
| 资源占用 | 中等(每个节点一个容器) | 低(约 512MB 内存即可运行) |
| 网络方案 | 内置 CNI(默认 kindnetd) | 内置 Flannel 或 Cilium |
| 适用场景 | CI/CD 压测、快速原型 | 边缘压测、资源受限环境 |
| 证书轮换模拟 | 支持(需手动挂载证书目录) | 支持(原生证书管理) |
推荐策略: 本地开发与 CI 环境使用 Kind(3 节点:1 control-plane + 2 worker);边缘或资源受限环境使用 K3s(1 server + 2 agent)。本课程后续压测均基于 Kind 集群进行。
3.2 使用 Kind 搭建 3 节点集群
Kind 通过 YAML 配置文件定义集群拓扑。以下配置创建一个 1 控制面 + 2 Worker 的多节点集群:
# kind-3nodes.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 30080
protocol: TCP
- role: worker
- role: worker
networking:
podSubnet: "10.244.0.0/16"
serviceSubnet: "10.96.0.0/12"
执行以下命令创建集群:
# 创建集群
kind create cluster --config kind-3nodes.yaml --name argo-perf-cluster
# 验证节点状态
kubectl get nodes -o wide
# 预期输出(示例)
NAME STATUS ROLES AGE VERSION
argo-perf-cluster-control-plane Ready control-plane 2m v1.30.0
argo-perf-cluster-worker Ready <none> 1m v1.30.0
argo-perf-cluster-worker2 Ready <none> 1m v1.30.0
注意: 压测集群需要预留足够的资源。建议 Docker 分配至少 4 核 CPU、8GB 内存。如果使用 K3s,请确保宿主机 cgroup 版本为 v2(可通过
stat -fc %T /sys/fs/cgroup/ 检查)。
3.3 集群架构示意
下图展示了 Kind 集群的节点角色与网络拓扑:
3.4 部署 Prometheus + Grafana 监控栈
使用 kube-prometheus-stack Helm Chart 一键部署完整的监控体系:
# 添加 Helm 仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
# 创建监控命名空间
kubectl create namespace monitoring
# 安装 kube-prometheus-stack
helm install prometheus-stack prometheus-community/kube-prometheus-stack \
--namespace monitoring \
--set grafana.enabled=true \
--set grafana.service.type=NodePort \
--set grafana.service.nodePort=30080 \
--set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false \
--set prometheus.prometheusSpec.podMonitorSelectorNilUsesHelmValues=false
# 验证部署状态
kubectl get pods -n monitoring -o wide
# 预期输出(示例)
NAME READY STATUS RESTARTS AGE
prometheus-stack-grafana-7d8f9b5c6f-abc12 3/3 Running 0 2m
prometheus-stack-kube-state-metrics-6f9c7d8b9d-def34 1/1 Running 0 2m
prometheus-stack-prometheus-node-exporter-2k3l4 1/1 Running 0 2m
prometheus-stack-prometheus-node-exporter-5m6n7 1/1 Running 0 2m
prometheus-stack-prometheus-node-exporter-8p9q0 1/1 Running 0 2m
prometheus-stack-prometheus-0 2/2 Running 0 2m
关键配置说明:
serviceMonitorSelectorNilUsesHelmValues=false:允许监控所有命名空间的 ServiceMonitor,便于后续压测时自动发现指标端点。grafana.service.type=NodePort+nodePort=30080:通过宿主机 30080 端口访问 Grafana,与 Kind 的 extraPortMappings 对应。- Node Exporter 自动部署到每个节点,采集 CPU、内存、磁盘、网络等基础指标。
3.5 访问 Grafana 并导入压测仪表盘
Grafana 默认管理员账号为 admin,密码通过 Secret 获取:
# 获取 Grafana 管理员密码
kubectl get secret prometheus-stack-grafana -n monitoring -o jsonpath="{.data.admin-password}" | base64 --decode
# 访问 Grafana(浏览器打开)
# http://localhost:30080
# 登录后导入 Argo CD 压测专用仪表盘(Dashboard ID: 1860)
# 或手动创建以下关键面板:
# - 集群资源总览(CPU / Memory / Network)
# - 证书轮换作业延迟(P99 / P95 / P50)
# - Argo CD 应用同步状态
# - 证书过期时间分布
3.6 监控栈架构与数据流
下图展示了 Prometheus + Grafana 监控栈的组件关系与数据采集路径:
3.7 验证监控栈可用性
部署完成后,执行以下验证步骤确保监控栈正常工作:
- 检查 Prometheus Target 状态: 访问 Prometheus Web UI(端口 9090),确认所有 Target 为 UP 状态。
- 查询测试指标: 在 Prometheus 中执行
up{job="node-exporter"},应返回 3 个节点指标。 - Grafana 数据源验证: 在 Grafana 中进入 Configuration → Data Sources,确认 Prometheus 数据源连接正常。
- 导入压测仪表盘: 使用 Grafana Dashboard ID 1860(Argo CD 压测专用)或手动创建关键面板。
快速验证命令:
# 查看 Prometheus Target
kubectl port-forward svc/prometheus-stack-prometheus -n monitoring 9090:9090
# 浏览器访问 http://localhost:9090/targets
# 查看 Grafana 是否可访问
curl -s http://localhost:30080/api/health | jq .
3.8 集群清理与重置
压测结束后,如需重建集群环境,执行以下清理操作:
# 删除 Kind 集群
kind delete cluster --name argo-perf-cluster
# 清理 Docker 残留容器
docker system prune -f
# 如需保留监控数据,先备份 PVC
kubectl get pvc -n monitoring -o yaml > pvc-backup.yaml
# 删除 Helm 部署
helm uninstall prometheus-stack -n monitoring
kubectl delete namespace monitoring
注意: 证书轮换压测会产生大量证书事件,建议监控数据保留周期设置为 15 天,避免 PVC 存储溢出。可通过修改 Prometheus 的
retention 参数调整。