2. 环境准备:Kubernetes集群搭建、Kyverno安装、eBPF工具链部署
本章是工程案例的物理基础层。只有在一个功能完整的Kubernetes集群上正确安装Kyverno策略引擎,并部署eBPF工具链(bpftrace与Cilium),后续的配额校准与故障排查才能落地执行。以下按三个独立阶段展开。
2.1 Kubernetes集群搭建
推荐使用kubeadm在3台Ubuntu 22.04 x86_64节点上构建生产级集群。最低规格:2 vCPU / 4 GB RAM / 40 GB SSD。
| 节点角色 | 主机名 | IP示例 | 最低配置 |
|---|---|---|---|
| Control Plane | k8s-master | 192.168.1.10 | 2C / 4G |
| Worker 1 | k8s-node1 | 192.168.1.11 | 2C / 4G |
| Worker 2 | k8s-node2 | 192.168.1.12 | 2C / 4G |
关键初始化步骤(所有节点):
- 关闭swap:
sudo swapoff -a并注释/etc/fstab中的swap条目。 - 加载内核模块:
overlay和br_netfilter。 - 安装containerd 1.7+ 并配置systemd cgroup驱动。
- 安装kubelet / kubeadm / kubectl 1.28.x。
在Control Plane上执行 kubeadm init 后,安装Calico或Cilium作为CNI。本案例后续使用Cilium的eBPF数据面,因此建议直接安装Cilium CNI(版本1.15+)。
# 在master节点初始化
sudo kubeadm init --pod-network-cidr=10.244.0.0/16
# 安装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
# 部署Cilium(启用eBPF)
cilium install --version 1.15.5 --set bpf.masquerade=true
验证集群就绪:
kubectl get nodes -o wide 应显示所有节点为 Ready 状态;cilium status 应报告 DaemonSet Ready。
2.2 Kyverno策略引擎安装
Kyverno作为Kubernetes原生的策略引擎,通过动态准入Webhook拦截资源变更。本案例使用Helm 3安装Kyverno 1.12+。
# 添加Kyverno Helm仓库
helm repo add kyverno https://kyverno.github.io/kyverno/
helm repo update
# 安装Kyverno(包含Webhook与后台服务)
helm install kyverno kyverno/kyverno \
--namespace kyverno --create-namespace \
--set admissionController.replicas=2 \
--set backgroundController.replicas=1 \
--set cleanupController.replicas=1
| 组件 | Pod名称前缀 | 职责 |
|---|---|---|
| Admission Controller | kyverno-admission-* | 拦截资源创建/更新请求,执行策略校验与突变 |
| Background Controller | kyverno-background-* | 对已有资源进行周期性审计与报告生成 |
| Cleanup Controller | kyverno-cleanup-* | 根据TTL策略自动清理过期资源 |
注意:Kyverno依赖集群内的 ValidatingWebhookConfiguration 和 MutatingWebhookConfiguration。安装后请检查
kubectl get validatingwebhookconfigurations 中是否存在 kyverno-resource-validating-webhook。
2.3 eBPF工具链部署
eBPF工具链包含两个层次:bpftrace(动态追踪/诊断)和 Cilium(网络与安全可观测性)。两者协同覆盖从系统调用到容器网络的完整观测面。
2.3.1 bpftrace安装
bpftrace是基于eBPF的高级追踪前端,用于快速编写单行脚本探测内核函数。在每个Worker节点上安装:
# Ubuntu 22.04 安装bpftrace
sudo apt-get update
sudo apt-get install -y bpftrace
# 验证安装
sudo bpftrace --version # 应输出 v0.18+
常用探测点(配额校准场景):
kprobe:account_page_dirtied— 跟踪脏页记账tracepoint:syscalls/sys_enter_mmap— 监控内存映射申请kprobe:__cgroup_bpf_run_filter_sysctl— 检测cgroup sysctl拦截
2.3.2 Cilium eBPF数据面与可观测性
Cilium不仅作为CNI提供网络连通性,其内置的 Hubble 组件通过eBPF采集流数据、DNS解析、TCP状态等。本案例使用Cilium的 Bandwidth Manager 和 Cluster Mesh 特性来校准Pod网络配额。
# 启用Hubble(可观测性层)
cilium hubble enable
# 验证Hubble Relay是否运行
kubectl get pods -n kube-system -l k8s-app=hubble-relay
# 安装hubble CLI(用于命令行抓取流)
curl -L --remote-name-all https://github.com/cilium/hubble/releases/latest/download/hubble-linux-amd64.tar.gz
sudo tar xzvfC hubble-linux-amd64.tar.gz /usr/local/bin
验证eBPF工具链就绪: 在任意Worker节点执行
sudo bpftrace -l 'kprobe:account_*' | head -5 应返回内核符号;执行 hubble status 应显示 Health: OK。
2.4 环境验证清单
完成上述安装后,执行以下验证命令确保所有组件正常运行:
| 验证项 | 命令 | 预期结果 |
|---|---|---|
| 集群节点状态 | kubectl get nodes |
所有节点 Ready |
| Kyverno Pod状态 | kubectl get pods -n kyverno |
3个Controller Pod均为 Running |
| Kyverno Webhook | kubectl get validatingwebhookconfigurations |
存在 kyverno-resource-validating-webhook |
| Cilium状态 | cilium status |
DaemonSet Ready / Hubble: OK |
| bpftrace可用性 | sudo bpftrace -e 'BEGIN{printf("hello\\n");exit()}' |
输出 hello 并正常退出 |
故障排查提示: 如果bpftrace报
Kernel BTF not found,请安装 linux-image-$(uname -r)-dbgsym 或启用 CONFIG_DEBUG_INFO_BTF=y 重新编译内核。Cilium若无法启动eBPF,检查 /sys/fs/bpf 是否挂载以及内核版本是否 ≥ 5.10。