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、快速原型、资源受限环境
推荐选择:本课程后续将使用Cilium作为eBPF数据面,建议优先使用Kind并确保宿主机内核≥5.10,以获得最佳的eBPF程序加载性能与最小的资源开销。

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
验证输出示例:三个节点均处于Ready状态,内核版本显示为宿主机内核版本(例如5.15.0-91-generic)。

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
版本兼容性注意:Helm 2.x已停止维护,且不支持Cilium 1.14+的安装。请务必使用Helm 3.x版本。若系统中存在旧版Helm,请先卸载: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支持)
BTF(BPF Type Format)是Cilium和Hubble实现无编译依赖eBPF程序加载的核心技术。若内核未开启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观测工具的整体环境栈。绿色节点表示本阶段需要完成的环境组件。

环境准备总览:eBPF节点池巡检依赖栈 宿主机操作系统 内核 ≥ 5.10 | CONFIG_DEBUG_INFO_BTF=y | Docker 24+ Kubernetes 集群 Kind (推荐) 或 Minikube | 1 CP + 2 Worker Helm 包管理 + Cilium CLI Helm 3.12+ | Cilium CLI 0.16+ eBPF 观测:Cilium + Hubble 已完成 本章搭建 本章安装 后续部署

4.5 环境验证清单

完成上述步骤后,请逐项确认以下检查点,确保环境就绪:

  1. 集群节点状态:kubectl get nodes 输出显示所有节点为 Ready 状态。
  2. Helm版本:helm version 输出 ≥ 3.12.0。
  3. 内核版本:uname -r 输出 ≥ 5.10。
  4. BTF支持:cat /boot/config-$(uname -r) | grep CONFIG_DEBUG_INFO_BTF 返回 y。
  5. 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数据面验证。请确保本阶段所有检查点均通过,否则后续的流量可视化与告警配置将无法正常演示。