2. 环境准备:部署etcd集群(3节点)、部署Cilium CNI、安装压测工具(benchmark/ghz)、配置监控(Prometheus + Grafana)
本章将搭建完整的压测沙盘环境,包括3节点etcd集群、Cilium CNI网络插件、压测工具链以及Prometheus+Grafana监控体系。所有组件均部署在同一Kubernetes集群中,便于后续注入网络故障并观察etcd性能变化。
2.1 整体环境架构
下图展示了压测沙盘各组件的逻辑关系:etcd集群作为数据平面,Cilium负责网络策略与可观测性,压测工具生成负载,监控系统采集指标。
设计要点: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接口)。
| 工具 | 用途 | 安装方式 |
|---|---|---|
| benchmark | etcd KV读写压测 | 二进制下载或容器镜像 |
| ghz | gRPC接口压测 | 二进制下载或容器镜像 |
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:
然后将benchmark和ghz二进制拷贝至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集群监控 | 3070 | Prometheus |
| Cilium Agent监控 | 16611 | Prometheus |
| Cilium Hubble | 16612 | Prometheus |
关键指标: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 环境验证清单
完成部署后,执行以下验证步骤确保环境就绪:
- etcd集群健康检查:执行
etcdctl endpoint health --cluster确认所有节点健康。 - Cilium连通性测试:使用
cilium connectivity test验证Pod间网络正常。 - 压测工具可用性:执行
benchmark --endpoints=http://etcd-cluster:2379 put --key-size=8 --val-size=256 --total=100验证写入正常。 - 监控数据采集:在Grafana中查看etcd和Cilium仪表盘,确认指标数据正常展示。
常见问题:如果Cilium连通性测试失败,检查内核版本是否≥5.10,以及是否启用了
CONFIG_BPF和CONFIG_BPF_SYSCALL内核选项。如果etcd指标未出现在Grafana中,确认ServiceMonitor的namespaceSelector和labelSelector是否正确匹配。