2. 环境准备:搭建压测沙盘所需的硬件与软件清单、Kubernetes集群部署、Prometheus与Grafana基础部署

本章将搭建完整的压测沙盘环境,作为后续所有压测与水位复核实验的基础设施。沙盘环境包含三个核心层:硬件资源层、Kubernetes 集群层、可观测性平台层。以下按步骤展开。

2.1 硬件与软件清单

沙盘环境采用混合部署模式:控制面与数据面分离,Prometheus 与 Grafana 独立部署在专用节点上,避免资源争抢影响压测数据准确性。

角色 配置要求 数量 操作系统 备注
K8s Master 节点 4 vCPU / 8 GB RAM / 50 GB SSD 1 Ubuntu 22.04 LTS 运行 etcd、kube-apiserver、scheduler、controller-manager
K8s Worker 节点 8 vCPU / 16 GB RAM / 100 GB SSD 3 Ubuntu 22.04 LTS 运行压测负载 Pod 与日志采集器
Prometheus 节点 4 vCPU / 8 GB RAM / 200 GB SSD 1 Ubuntu 22.04 LTS 独立部署,接收远端写入,存储压测指标
Grafana 节点 2 vCPU / 4 GB RAM / 50 GB SSD 1 Ubuntu 22.04 LTS 可视化面板,与 Prometheus 同网段
硬件选型说明:Worker 节点配置高于 Master 节点,是因为压测期间每个 Worker 需要运行多个日志生成器与 Fluent Bit 采集器,CPU 和磁盘 IO 消耗较大。Prometheus 节点配备 200 GB SSD,用于存储压测期间的高频写入指标数据,避免因磁盘空间不足导致写入失败。

2.2 软件版本清单

所有软件版本经过交叉验证,确保兼容性。版本锁定是沙盘可复现性的关键。

软件 版本 安装方式 关键配置项
Kubernetes v1.28.2 kubeadm --pod-network-cidr=10.244.0.0/16
etcd v3.5.9 K8s 内置 --quota-backend-bytes=8GB
Prometheus v2.47.0 二进制部署 --storage.tsdb.retention.time=7d
Grafana v10.1.2 APT 仓库 GF_SERVER_HTTP_PORT=3000
Calico (CNI) v3.26.1 manifest 部署 IPIP 模式
Fluent Bit v2.1.8 Helm chart 输出到 stdout + 文件

2.3 Kubernetes 集群部署步骤

使用 kubeadm 工具完成集群初始化。以下为 Master 节点初始化命令:

# Master 节点初始化
sudo kubeadm init \
  --kubernetes-version=v1.28.2 \
  --pod-network-cidr=10.244.0.0/16 \
  --apiserver-advertise-address=192.168.1.10 \
  --control-plane-endpoint=192.168.1.10

# 配置 kubectl
mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

# 安装 Calico 网络插件
kubectl apply -f https://raw.githubusercontent.com/projectcalico/calico/v3.26.1/manifests/calico.yaml

Worker 节点加入集群:

# 在 Worker 节点上执行( 从 Master 初始化输出获取)
sudo kubeadm join 192.168.1.10:6443 -- <> \
  --discovery--ca-cert-hash sha256:<hash>
注意:生产环境不建议将 etcd 与 kube-apiserver 部署在同一节点。本沙盘为简化网络拓扑,采用单 Master 单 etcd 架构。压测期间需监控 etcd 的磁盘 IO 和内存使用,避免因资源争抢导致集群不稳定。

2.4 Prometheus 基础部署

Prometheus 采用二进制方式独立部署在专用节点上,不运行在 K8s 集群内。这样做的好处是:压测期间 K8s 集群故障不会影响 Prometheus 的数据采集,且远端写入的流量路径更清晰。

# 下载并解压 Prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.47.0/prometheus-2.47.0.linux-amd64.tar.gz
tar xvf prometheus-2.47.0.linux-amd64.tar.gz
cd prometheus-2.47.0.linux-amd64

# 创建基础配置文件 prometheus.yml
cat > prometheus.yml << 'EOF'
global:
  scrape_interval: 15s
  evaluation_interval: 15s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'kubernetes-nodes'
    kubernetes_sd_configs:
      - role: node
    relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):10250'
        replacement: '${1}:9100'
        target_label: __address__
EOF

# 启动 Prometheus(启用远端写入接收)
./prometheus \
  --config.file=prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.enable-remote-write-receiver \
  --storage.tsdb.retention.time=7d &
关键参数说明:--web.enable-remote-write-receiver 是启用 Prometheus 远端写入接收能力的开关。没有这个参数,Prometheus 将拒绝任何来自 Fluent Bit 或其他采集器的 Remote Write 请求。压测期间务必确认该参数已生效。

2.5 Grafana 基础部署

Grafana 同样独立部署,用于可视化压测指标。安装完成后配置 Prometheus 数据源。

# 安装 Grafana
sudo apt-get install -y software-properties-common
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install -y grafana=10.1.2

# 启动 Grafana
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl start grafana-server

# 验证服务状态
curl http://localhost:3000/api/health

Grafana 启动后,通过浏览器访问 http://<Grafana-IP>:3000,默认用户名/密码为 admin/admin。首次登录后添加 Prometheus 数据源:

  • URL: http://<Prometheus-IP>:9090
  • Access: Browser
  • Scrape interval: 15s
  • 保存并测试,确认 "Data source is working"

2.6 环境架构总览

下图展示了压测沙盘的整体部署架构,包括数据流与控制流路径:

压测沙盘环境架构总览 K8s Master 节点 etcd (v3.5.9) kube-apiserver K8s Worker 节点 x3 日志生成器 Pod Fluent Bit DaemonSet Remote Write 客户端 Prometheus 节点 v2.47.0 独立部署 远端写入接收器 Grafana 节点 v10.1.2 独立部署 Prometheus 数据源 数据流方向 Worker → Prometheus Prometheus → Grafana 图例 控制面节点 数据面节点 监控存储节点 可视化节点

2.7 环境验证清单

部署完成后,执行以下验证步骤,确保沙盘环境就绪:

验证项 验证命令 预期结果
K8s 集群节点状态 kubectl get nodes 1 Master + 3 Worker 均为 Ready
etcd 健康检查 kubectl get pods -n kube-system | grep etcd etcd Pod 运行中,无重启
Prometheus 远端写入端点 curl -X POST http://<Prom-IP>:9090/api/v1/write 返回 204 No Content
Grafana 数据源连通性 Grafana UI → Data Sources → 测试 显示 "Data source is working"
Fluent Bit 部署 kubectl get pods -n logging Fluent Bit DaemonSet 所有 Pod 运行中
环境就绪标志:当上述 5 项验证全部通过,且 Prometheus 的 /api/v1/write 端点返回 204 时,压测沙盘环境准备完成。下一阶段将开始配置 Fluent Bit 的 Remote Write 输出插件,向 Prometheus 发送压测指标数据。