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 集群的节点角色与网络拓扑:

Kind 3 节点压测集群架构 Control Plane kube-apiserver etcd / scheduler controller-manager Worker 1 kubelet / kube-proxy 压测 Pod (Argo CD) Prometheus Node Exporter Worker 2 kubelet / kube-proxy 压测 Pod (证书轮换) Grafana Agent Docker 网络层(kindnetd CNI) Pod CIDR: 10.244.0.0/16 | Service CIDR: 10.96.0.0/12 Prometheus + Grafana 监控栈 kube-prometheus-stack Helm Chart 指标采集 → 存储 → 可视化 → 告警 说明:控制面负责集群管理,Worker 节点运行压测负载,监控栈部署在集群内采集全量指标

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 监控栈的组件关系与数据采集路径:

Prometheus + Grafana 监控栈数据流 数据源 Node Exporter kube-state-metrics Argo CD Metrics Prometheus 指标采集 告警规则评估 TSDB 存储 Grafana 仪表盘渲染 告警通知 数据查询 Alertmanager 告警去重 / 分组 通知路由 持久化存储 PVC (Retain 策略) 数据保留 15 天 用户 / 运维 浏览器访问 API 查询 压测关键指标采集路径 Argo CD Metrics → ServiceMonitor → Prometheus → Grafana Dashboard 证书轮换延迟、应用同步状态、集群资源水位实时可视化

3.7 验证监控栈可用性

部署完成后,执行以下验证步骤确保监控栈正常工作:

  1. 检查 Prometheus Target 状态: 访问 Prometheus Web UI(端口 9090),确认所有 Target 为 UP 状态。
  2. 查询测试指标: 在 Prometheus 中执行 up{job="node-exporter"},应返回 3 个节点指标。
  3. Grafana 数据源验证: 在 Grafana 中进入 Configuration → Data Sources,确认 Prometheus 数据源连接正常。
  4. 导入压测仪表盘: 使用 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 参数调整。