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 成员独立运行在专属 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 网络延迟故障,开始第一轮压测与延迟分析。