1. 课程导论与背景
1.1 eBPF 技术概述
eBPF(extended Berkeley Packet Filter)是一项革命性的 Linux 内核技术,允许用户在无需修改内核源码或加载内核模块的情况下,安全、高效地注入沙箱化程序以扩展内核能力。eBPF 程序通过验证器(verifier)确保安全性,并通过即时编译(JIT)获得接近原生的执行性能。
核心能力: eBPF 将内核从“静态黑盒”转变为“可编程观测层”,使得网络、安全、追踪、性能分析等领域的工具能够以极低开销获取深度系统状态。
| 维度 | 传统方式 | eBPF 方式 |
|---|---|---|
| 内核扩展 | 修改源码 / 加载内核模块(风险高) | 注入沙箱化字节码(安全验证) |
| 观测粒度 | 系统调用 / 日志(粗粒度) | 函数级 / 协议级 / 数据包级(细粒度) |
| 性能开销 | 上下文切换 / 数据拷贝(高开销) | 内核内原地执行(接近零拷贝) |
| 迭代速度 | 周 / 月级(编译、重启) | 秒 / 分钟级(动态加载) |
1.2 Hubble 项目起源
Hubble 是 Cilium 社区于 2019 年发起的开源项目,旨在为基于 eBPF 的 Kubernetes 网络提供可观测性能力。其核心设计理念是:
- 零侵入:利用 Cilium 已部署的 eBPF 数据路径,无需额外 Agent 或 Sidecar。
- 服务级拓扑:自动发现 Pod、Service、DNS 等 Kubernetes 资源之间的网络依赖关系。
- 实时流式监控:通过 eBPF 捕获每个数据包的元数据(5 元组、L7 协议、返回码等),并实时聚合为流式事件。
关键洞察: Hubble 不是独立的数据平面,而是 Cilium 数据平面的“观测镜”——它读取 eBPF map 中已存在的连接跟踪、策略命中、丢包计数等状态,以 Prometheus 指标和流日志形式暴露。
1.3 Cilium 与 Hubble 的关系
Cilium 是基于 eBPF 的 CNI 插件与网络安全方案,负责数据平面(转发、负载均衡、网络策略)。Hubble 是 Cilium 的可观测性组件,两者关系可概括为:
常见误解: Hubble 并非独立部署的监控系统,而是 Cilium 的“内置观测层”。若集群未安装 Cilium,则无法单独部署 Hubble。两者共享同一 eBPF 数据路径和内核 map。
1.4 课程目标与学习路径
本课程旨在培养学员掌握以下核心能力:
| 模块 | 目标 | 产出物 |
|---|---|---|
| eBPF 网络观测 | 理解 Hubble 如何利用 eBPF 捕获 L3/L4/L7 流量 | 流日志分析、服务拓扑图 |
| 资源配额校准 | 基于 Hubble 指标校准 Pod/Service 的 CPU、内存、网络带宽配额 | 配额校准报告、压测基线 |
| 压测沙盘构建 | 搭建可复现的压测环境,模拟真实流量模式 | 沙盘脚本、压测数据集 |
| 容量预测 | 利用时间序列分析与排队论预测集群容量拐点 | 容量预测模型、扩缩容建议 |
学习路径建议:
- 基础夯实(第 1-5 章):掌握 eBPF 核心概念、Hubble 部署与指标解读。
- 观测实战(第 6-12 章):深入 Hubble 流日志、服务依赖图、DNS 监控与故障排查。
- 配额校准(第 13-18 章):基于观测数据校准资源配额,构建压测沙盘。
- 容量预测(第 19-25 章):引入时间序列模型与排队论,实现容量预测。
- 综合沙盘(第 26-30 章):完成端到端压测沙盘与容量预测系统。
前置要求: 学员需具备 Kubernetes 基础操作能力(kubectl、Pod/Service 概念)、Linux 网络基础(iptables、netfilter)以及基本的 PromQL 查询能力。无需 eBPF 或 C 语言开发经验。