2. 环境准备:部署etcd集群(3节点)与Cilium CNI(k8s 1.28+)

本章是压测沙盘的物理基础。我们将在一套 Kubernetes 1.28+ 集群上,部署一个 3 节点的 etcd 集群,并安装 Cilium 作为 CNI 插件。整个环境将作为后续网络延迟分析与调优的固定实验平台。

2.1 整体架构概览

下图展示了本次压测沙盘的物理与逻辑拓扑。3 个 etcd 节点分别运行在 3 台独立的 Kubernetes Worker 节点上,Cilium 通过 eBPF 提供节点间高速网络通信。

etcd 压测沙盘整体架构图 etcd 压测沙盘 — 环境架构图 Kubernetes 集群 (v1.28+) Worker Node 1 etcd Pod (member-1) Cilium Agent eBPF 数据面 Worker Node 2 etcd Pod (member-2) Cilium Agent eBPF 数据面 Worker Node 3 etcd Pod (member-3) Cilium Agent eBPF 数据面 图例说明 Worker 节点 + etcd Pod etcd 成员间 Raft 通信 压测客户端(后续章节部署) Cilium Service Mesh / 策略路径
设计要点:每个 etcd 成员独立运行在专属 Worker 节点上,避免资源争抢;Cilium 以 DaemonSet 形式在每个节点上运行 Agent,通过 eBPF 直接接管网络数据面,绕开传统 iptables 转发链。

2.2 环境需求清单

在开始部署前,请确保以下资源已就绪:

资源项 规格要求 数量 说明
Kubernetes 集群 v1.28+ 1 套 建议至少 4 节点(3 Worker + 1 Control Plane)
Worker 节点 4 vCPU / 8 GB RAM / 50GB SSD 3 每个节点运行一个 etcd Pod
etcd 版本 v3.5.x 3 实例 使用 Bitnami 或官方 Helm Chart 部署
Cilium 版本 v1.15+ 1 套 启用 eBPF Host-Routing 与 Bandwidth Manager
操作系统 Ubuntu 22.04 / Rocky Linux 9 — 内核 ≥ 5.10,推荐 6.x 以支持完整 eBPF 特性

2.3 部署步骤

2.3.1 部署 etcd 集群(3 节点)

我们使用 Bitnami etcd Helm Chart 进行部署,便于快速调整参数。以下命令在集群的 Control Plane 节点上执行。

# 添加 Bitnami 仓库
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
关键参数说明:replicaCount=3 保证 Raft 多数派可用;metrics.enabled=true 为后续压测监控提供 Prometheus 指标端点;生产环境务必启用 auth.rbac。

验证 etcd 集群状态:

# 查看 Pod 状态
kubectl get pods -n etcd-bench -o wide

# 预期输出示例:
# NAME                          READY   STATUS    RESTARTS   AGE   IP              NODE
# etcd-cluster-0                1/1     Running   0          2m    10.0.1.10       worker-1
# etcd-cluster-1                1/1     Running   0          2m    10.0.2.10       worker-2
# etcd-cluster-2                1/1     Running   0          2m    10.0.3.10       worker-3

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

2.3.2 部署 Cilium CNI

Cilium 安装前需确保集群已移除其他 CNI(如 Calico、Flannel)。我们使用 Cilium CLI 进行安装,并开启关键性能特性。

# 下载并安装 Cilium CLI
curl -L --remote-name-all https://github.com/cilium/cilium-cli/releases/latest/download/cilium-linux-amd64.tar.gz
sudo tar xzvfC cilium-linux-amd64.tar.gz /usr/local/bin
rm cilium-linux-amd64.tar.gz

# 安装 Cilium(启用 eBPF Host-Routing 与 Bandwidth Manager)
cilium install \
  --version 1.15.5 \
  --set bpf.masquerade=true \
  --set bandwidthManager.enabled=true \
  --set routingMode=native \
  --set autoDirectNodeRoutes=true \
  --set ipv4NativeRoutingCIDR=10.0.0.0/8

# 验证安装状态
cilium status --wait
性能调优预配置:routingMode=native 结合 autoDirectNodeRoutes=true 让 Cilium 直接编程节点路由表,避免隧道封装开销;bandwidthManager.enabled=true 启用 eBPF 带宽管理,为后续压测提供精确的流量整形能力。

2.4 验证网络连通性与延迟基线

部署完成后,必须验证 etcd 成员间通过 Cilium 网络的通信质量。我们使用 ping 和 iperf3 建立延迟基线。

验证项 命令示例 预期指标
跨节点延迟 kubectl exec -n etcd-bench etcd-cluster-0 -- ping -c 10 <etcd-cluster-1 IP> 平均延迟 < 1ms(同机房)
带宽测试 在 Pod 间运行 iperf3 线速(取决于节点网络带宽)
etcd 健康检查 etcdctl endpoint health --cluster 所有端点 healthy
Cilium 连通性 cilium connectivity test 所有测试通过
# 示例:跨节点延迟测试
kubectl exec -n etcd-bench etcd-cluster-0 -- ping -c 5 10.0.2.10

# 示例:Cilium 内置连通性测试
cilium connectivity test --namespace etcd-bench

2.5 环境确认清单

完成上述步骤后,请逐项确认以下状态,确保沙盘环境就绪:

  • etcd 集群:3 个 Pod 均为 Running,成员列表显示 3 个节点,集群健康。
  • Cilium 状态:cilium status 显示 DaemonSet OK,KVStore: OK,Kubernetes: OK。
  • 网络延迟基线:跨节点 ping 延迟记录在案,作为后续调优的对比基准。
  • 监控准备:etcd 已启用 metrics(端口 2379),Cilium 默认暴露 Hubble 与 Prometheus 指标。
下一步提示:环境就绪后,第 3 章将部署压测客户端工具(如 benchmark 或 etcdperf),并注入 Cilium 网络延迟故障,开始第一轮压测与延迟分析。