4. 环境准备:Kubernetes集群搭建(Minikube/Kind)、Helm客户端安装、eBPF内核版本检查
在开始eBPF节点池巡检与流量可视化实践之前,必须搭建一个完整且兼容eBPF的运行环境。本章将指导你完成三个核心步骤:选择并部署Kubernetes集群、安装Helm包管理工具、验证内核是否满足eBPF要求。环境准备的质量直接决定后续课程中Cilium、Hubble等组件的部署成败。
4.1 Kubernetes集群搭建:Minikube vs Kind
本地开发环境推荐使用Minikube或Kind。两者均支持快速创建单节点或多节点集群,但在网络模型、内核访问能力上存在差异,直接影响eBPF程序的加载与观测。
| 特性 | Minikube | Kind (Kubernetes in Docker) |
|---|---|---|
| 底层技术 | 虚拟机(默认)或Docker驱动 | Docker容器作为节点 |
| 内核访问 | 直接访问宿主机内核(VM驱动)或共享内核(Docker驱动) | 共享宿主机内核(容器化) |
| eBPF兼容性 | 优秀(VM驱动下完全隔离) | 良好(需宿主机内核支持eBPF) |
| 网络插件 | 默认flannel,可切换Cilium | 默认无,需手动安装CNI |
| 启动速度 | 较慢(需下载ISO) | 快速(秒级启动) |
| 适用场景 | 完整K8s体验,生产级功能验证 | CI/CD、快速原型、资源受限环境 |
4.1.1 使用Kind创建集群
Kind通过将Kubernetes组件运行在Docker容器中实现集群模拟。以下命令创建一个包含1个控制平面节点和2个Worker节点的集群,并配置端口映射以便后续访问Hubble UI。
# 创建kind配置文件
cat <<EOF > kind-config.yaml
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30000
hostPort: 30000
protocol: TCP
- role: worker
- role: worker
EOF
# 启动集群
kind create cluster --config kind-config.yaml --name ebpf-cluster
# 验证节点状态
kubectl get nodes -o wide
4.1.2 使用Minikube创建集群(备选方案)
若宿主机不支持Docker或需要更完整的K8s功能,可使用Minikube的Docker驱动模式:
# 启动Minikube(指定cni为cilium以便后续eBPF测试)
minikube start --driver=docker --cni=cilium --kubernetes-version=v1.28.0
# 验证集群
minikube status
kubectl get nodes
4.2 Helm客户端安装
Helm是Kubernetes的包管理工具,本课程将使用Helm部署Cilium、Hubble及Prometheus告警组件。请确保Helm版本≥3.12,以支持OCI镜像仓库和最新的Chart特性。
| 操作系统 | 安装命令 |
|---|---|
| Linux (amd64) | curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash |
| macOS (Homebrew) | brew install helm |
| Windows (Chocolatey) | choco install kubernetes-helm |
# 验证安装
helm version --short
# 预期输出:v3.14.0+g2c2e62e
# 添加Cilium官方Helm仓库
helm repo add cilium https://helm.cilium.io/
helm repo update
rm -rf ~/.helm。
4.3 eBPF内核版本检查
eBPF程序依赖内核特性,不同版本的eBPF功能差异巨大。Cilium 1.14+要求内核≥5.10,且需要开启BPF相关内核配置。以下步骤将全面检查环境兼容性。
4.3.1 检查内核版本
# 查看内核版本
uname -r
# 预期输出示例:5.15.0-91-generic
# 检查是否支持eBPF(查看/proc/sys/kernel/bpf_stats_enabled)
cat /proc/sys/kernel/bpf_stats_enabled
# 若文件不存在或值为0,表示未开启eBPF统计
4.3.2 检查必需的内核配置
使用以下脚本验证关键eBPF特性是否编译进内核:
# 检查BPF相关配置
cat /boot/config-$(uname -r) | grep -E "CONFIG_BPF|CONFIG_DEBUG_INFO_BTF"
# 关键配置项
# CONFIG_BPF=y
# CONFIG_BPF_SYSCALL=y
# CONFIG_BPF_JIT=y
# CONFIG_DEBUG_INFO_BTF=y (必需,用于BTF支持)
CONFIG_DEBUG_INFO_BTF,Cilium将无法正常工作。Ubuntu 20.04+、Fedora 31+、CentOS 8+默认支持BTF。
4.3.3 使用Cilium内置检查工具
安装Cilium CLI后,可使用其内置的sysdump功能快速诊断内核兼容性:
# 安装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 sysdump --only-kernel-check
# 或直接使用status命令(需集群运行后)
cilium status --verbose
4.3.4 内核版本与eBPF功能对照表
| 内核版本 | 关键eBPF特性 | 对Cilium的影响 |
|---|---|---|
| 4.9 - 4.19 | 基础BPF、XDP、tc BPF | 仅支持Cilium 1.12以下版本,无BTF |
| 5.4 - 5.9 | BPF trampoline、BPF iterator | 支持Cilium 1.13,但Hubble功能受限 |
| 5.10 - 5.15 | BTF稳定、BPF spinlock、BPF timers | 推荐版本,Cilium 1.14+全功能支持 |
| 6.0+ | BPF CO-RE完善、BPF link、BPF cookie | 最佳体验,支持所有高级特性 |
4.4 环境准备总览图
下图展示了从宿主机到Kubernetes集群,再到eBPF观测工具的整体环境栈。绿色节点表示本阶段需要完成的环境组件。
4.5 环境验证清单
完成上述步骤后,请逐项确认以下检查点,确保环境就绪:
- 集群节点状态:
kubectl get nodes输出显示所有节点为Ready状态。 - Helm版本:
helm version输出 ≥ 3.12.0。 - 内核版本:
uname -r输出 ≥ 5.10。 - BTF支持:
cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF返回y。 - Docker运行正常:
docker info无报错,且Kind容器可正常创建。
check-env.sh,一键输出环境状态:echo "Kernel: $(uname -r)" && echo "Helm: $(helm version --short)" && echo "Nodes: $(kubectl get nodes -o jsonpath='{.items[*].status.conditions[?(@.type=="Ready")].status}')" && echo "BTF: $(cat /boot/config-$(uname -r) 2>/dev/null | grep CONFIG_DEBUG_INFO_BTF || echo 'not found')"
环境准备完成后,下一阶段将进入Cilium的Helm部署与eBPF数据面验证。请确保本阶段所有检查点均通过,否则后续的流量可视化与告警配置将无法正常演示。