2. 环境准备:部署etcd集群(3节点)、部署Cilium CNI、安装压测工具(benchmark/ghz)、配置监控(Prometheus + Grafana)

本章将搭建完整的压测沙盘环境,包括3节点etcd集群、Cilium CNI网络插件、压测工具链以及Prometheus+Grafana监控体系。所有组件均部署在同一Kubernetes集群中,便于后续注入网络故障并观察etcd性能变化。

2.1 整体环境架构

下图展示了压测沙盘各组件的逻辑关系:etcd集群作为数据平面,Cilium负责网络策略与可观测性,压测工具生成负载,监控系统采集指标。

压测沙盘环境架构 etcd 集群 节点1 (10.0.1.1) 节点2 (10.0.1.2) 节点3 (10.0.1.3) Cilium CNI eBPF数据平面 网络策略 可观测性 压测工具 benchmark (etcd) ghz (gRPC) 监控系统 Prometheus Grafana etcd 客户端直连 压测工具 → etcd:2379
设计要点:etcd集群与压测工具部署在同一Kubernetes集群的不同Namespace中,Cilium负责管理Pod间网络通信。监控系统独立部署,通过ServiceMonitor自动发现etcd和Cilium的指标端点。

2.2 部署3节点etcd集群

使用etcd Operator或Helm Chart部署高可用etcd集群。推荐配置如下:

参数推荐值说明
集群大小3节点容忍1节点故障,满足多数派写入
存储后端SSD + ext4/xfs避免btrfs/zfs导致的性能抖动
心跳间隔100ms默认值,网络延迟敏感场景可调至200ms
选举超时1000ms默认10倍心跳间隔
快照数保留5个避免磁盘空间暴涨

2.2.1 使用Helm部署etcd集群

# 添加etcd Helm仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo update

# 创建命名空间
kubectl create namespace etcd-bench

# 部署3节点etcd集群
helm install etcd-cluster bitnami/etcd \
  --namespace etcd-bench \
  --set replicaCount=3 \
  --set persistence.size=10Gi \
  --set resources.requests.cpu=500m \
  --set resources.requests.memory=1Gi \
  --set resources.limits.cpu=2 \
  --set resources.limits.memory=4Gi \
  --set auth.rbac.enabled=false \
  --set metrics.enabled=true
注意:压测场景下建议关闭RBAC认证以减少请求延迟。生产环境必须开启认证并配置TLS。

2.2.2 验证集群状态

# 查看Pod状态
kubectl get pods -n etcd-bench -l app.kubernetes.io/name=etcd

# 检查集群成员
kubectl exec -n etcd-bench etcd-cluster-0 -- etcdctl member list

# 测试写入
kubectl exec -n etcd-bench etcd-cluster-0 -- etcdctl put /test/key "hello"

# 测试读取
kubectl exec -n etcd-bench etcd-cluster-0 -- etcdctl get /test/key

2.3 部署Cilium CNI

Cilium作为eBPF驱动的CNI插件,提供高性能网络和可观测性。部署前确保内核版本≥5.10。

2.3.1 安装Cilium

# 使用Cilium CLI安装
cilium install \
  --version 1.15.0 \
  --set kubeProxyReplacement=true \
  --set ipam.mode=kubernetes \
  --set hubble.enabled=true \
  --set hubble.relay.enabled=true \
  --set hubble.ui.enabled=true \
  --set prometheus.enabled=true \
  --set operator.prometheus.enabled=true

# 验证安装
cilium status --wait

2.3.2 验证Cilium网络

# 检查Cilium Agent状态
kubectl get pods -n kube-system -l k8s-app=cilium

# 测试Pod间连通性
kubectl run test-pod --image=busybox --rm -it -- sh
# 在Pod内执行:ping <etcd-pod-ip>
关键配置:启用Hubble可观测性组件,后续故障诊断时将使用Hubble flow监控网络流量。启用Prometheus指标暴露,便于Grafana展示网络延迟和丢包数据。

2.4 安装压测工具

压测工具分为两类:etcd原生benchmark工具(模拟KV操作)和通用gRPC压测工具ghz(模拟etcd gRPC接口)。

工具用途安装方式
benchmarketcd KV读写压测二进制下载或容器镜像
ghzgRPC接口压测二进制下载或容器镜像

2.4.1 安装benchmark工具

# 下载etcd benchmark二进制
wget https://github.com/etcd-io/etcd/releases/download/v3.5.12/etcd-v3.5.12-linux-amd64.tar.gz
tar -xzf etcd-v3.5.12-linux-amd64.tar.gz
sudo cp etcd-v3.5.12-linux-amd64/benchmark /usr/local/bin/

# 验证安装
benchmark --version

2.4.2 安装ghz工具

# 下载ghz二进制
wget https://github.com/bojand/ghz/releases/download/v0.120.0/ghz-linux-x86_64.tar.gz
tar -xzf ghz-linux-x86_64.tar.gz
sudo cp ghz /usr/local/bin/

# 验证安装
ghz --version
提示:压测工具建议部署在独立的压测Pod中,避免与etcd集群争抢宿主机资源。可使用以下命令创建压测Pod:
kubectl run benchmark-pod --image=alpine:3.19 --command -- sleep infinity
然后将benchmark和ghz二进制拷贝至Pod内。

2.5 配置监控(Prometheus + Grafana)

监控体系用于采集etcd集群性能指标、Cilium网络指标以及系统资源使用情况。

2.5.1 部署Prometheus

# 使用kube-prometheus-stack部署
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

helm install prometheus-stack prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace \
  --set prometheus.prometheusSpec.serviceMonitorSelectorNilUsesHelmValues=false

2.5.2 配置etcd ServiceMonitor

cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: etcd-cluster-monitor
  namespace: monitoring
spec:
  selector:
    matchLabels:
      app.kubernetes.io/name: etcd
  namespaceSelector:
    matchNames:
      - etcd-bench
  endpoints:
  - port: metrics
    interval: 15s
    path: /metrics
EOF

2.5.3 配置Cilium ServiceMonitor

cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: cilium-agent-monitor
  namespace: monitoring
  labels:
    release: prometheus-stack
spec:
  selector:
    matchLabels:
      k8s-app: cilium
  namespaceSelector:
    matchNames:
      - kube-system
  endpoints:
  - port: prometheus
    interval: 15s
    path: /metrics
EOF

2.5.4 配置Grafana仪表盘

导入以下预置仪表盘ID:

仪表盘ID数据源
etcd集群监控3070Prometheus
Cilium Agent监控16611Prometheus
Cilium Hubble16612Prometheus
关键指标:etcd方面关注etcd_server_leader_changes_seen_total(领导者变更)、etcd_disk_wal_fsync_duration_seconds(磁盘写入延迟)、etcd_network_client_grpc_sent_bytes_total(网络吞吐)。Cilium方面关注cilium_endpoint_regenerations_total(端点重建)、cilium_forward_count_total(转发计数)、cilium_drop_count_total(丢包计数)。

2.6 环境验证清单

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

  1. etcd集群健康检查:执行etcdctl endpoint health --cluster确认所有节点健康。
  2. Cilium连通性测试:使用cilium connectivity test验证Pod间网络正常。
  3. 压测工具可用性:执行benchmark --endpoints=http://etcd-cluster:2379 put --key-size=8 --val-size=256 --total=100验证写入正常。
  4. 监控数据采集:在Grafana中查看etcd和Cilium仪表盘,确认指标数据正常展示。
环境验证流程 etcd健康检查 Cilium连通性 压测工具验证 监控确认 全部验证通过后,环境准备完成 可进入下一章:etcd基准性能测试
常见问题:如果Cilium连通性测试失败,检查内核版本是否≥5.10,以及是否启用了CONFIG_BPF和CONFIG_BPF_SYSCALL内核选项。如果etcd指标未出现在Grafana中,确认ServiceMonitor的namespaceSelector和labelSelector是否正确匹配。