目录

BeeQoS

BeeQoS 是一个面向 Kubernetes 集群的 自适应网络资源管控 Agent 框架,基于 eBPF Hook + 用户态 Agent 实现,旨在无缝融入 openEuler 开源生态

本仓库包含:

  • BeeQoS 底层 eBPF Hook 与用户态 Agent 的核心实现代码
  • 资源管控 Agent 的标准化 Kubernetes 插件与部署脚本
  • 基于 Calico / Cilium 的对照实验配置
  • 原型系统实验所用的完整自动化脚本与数据处理代码

1. 实验环境与前提条件

1.1 硬件与系统要求

  • 至少两台物理服务器或虚拟机
  • Linux 内核支持 eBPF(推荐 ≥ 5.10)
  • 服务器之间具备二层或三层互通网络

1.2 软件依赖

  • Kubernetes(使用 kubeadm 部署)
  • 容器运行时:containerd
  • Go ≥ 1.20(用于编译控制组件)
  • libbpf ≥ 1.3(从源码安装)

⚠️ 重要说明 本仓库中的若干脚本和配置文件 显式依赖网卡名和节点 IP。 在运行任何 .sh 脚本前,请根据你的实验环境 修改对应 IP / 网卡名称


2. 使用 kubeadm 创建 Kubernetes 集群

在控制节点执行:

sudo kubeadm reset -f \
  --cri-socket unix:///var/run/containerd/containerd.sock

sudo kubeadm init \
  --control-plane-endpoint=<MASTER_IP> \
  --pod-network-cidr=10.244.0.0/12 \
  --image-repository registry.aliyuncs.com/google_containers \
  --cri-socket unix:///var/run/containerd/containerd.sock \
  -v=10

配置 kubectl

mkdir -p $HOME/.kube
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

常见问题

若遇到 kubeconfig verification error,可执行:

sudo kubeadm init phase kubeconfig admin
sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config

3. BeeQoS Agent 框架编译与镜像分发

3.1 获取源码并切换分支

git clone https://github.com/derekwin/demo-cli.git bwm
cd bwm
git checkout -b bwm origin/dhc-elf
cd ..

3.2 指定实验使用的物理网卡

编辑以下文件(示例中使用 eno2):

bwm/cmd/alg-daemon/main.go

将自动探测改为固定网卡名:

HostNICName, err := "eno2", nil

可恢复为自动探测(非实验环境):

HostNICName, err := common.GetMasterIntf()

3.3 编译与镜像分发

cd bwm
make all
cd ..

修改 distribute_bwm.sh

  • 镜像 tag
  • 节点 IP
  • 远程路径

然后执行:

bash distribute_bwm.sh

4. 安装 Calico + BeeQoS(主实验路径)

4.1 安装 Calico(v3.27)

cd calico/v327

中国大陆用户

  • 请提前手动拉取 Calico 相关镜像

修改 calico.yaml

  • 指定物理网卡
  • 关闭 CALICO_IPV4POOL_IPIP

执行:

bash setup_calico.sh

4.2 安装 BeeQoS

cd bwm/install/kubernetes
kubectl apply -f oncn-bwm.yaml
cd -

配置 BeeQoS 为 Calico 的带宽管理插件:

bash setup_beeqos_after_calico.sh

5. 安装 Cilium(对照实验)

⚠️ 注意 Cilium 与 BeeQoS / Calico 冲突。 为保证实验一致性,建议直接重建集群

5.1 卸载 BeeQoS 与 Calico

kubectl delete -f bwm/install/kubernetes/oncn-bwm.yaml
kubectl delete -f calico/v327/calico.yaml

5.2 安装 Cilium(v1.18.1)

参考官方文档(Bandwidth Manager):

https://docs.cilium.io/en/latest/network/kubernetes/bandwidth-manager/

cilium install --version 1.18.1

启用带宽管理:

helm upgrade cilium ./cilium \
  --version 1.18.1 \
  --namespace kube-system \
  --reuse-values \
  --set bandwidthManager.enabled=true

重启:

kubectl -n kube-system rollout restart ds/cilium

6. 实验与结果复现

  • exm1exm4:测试中使用的实验

  • 每个目录包含:

    • Kubernetes YAML
    • 运行脚本
    • 原始结果与处理脚本

7. 常用调试命令

kubectl -n kube-system get pods
kubectl -n kube-system exec -it <cilium-pod> -- cilium-dbg status | grep BandwidthManager

禁用无关网卡(减少实验干扰)

sudo ip link set ens61f0np0 down
sudo ip link set ens61f1np1 down
sudo ip link set enp129s0np0 down

DNS 异常处理

kubectl delete pod -n kube-system -l k8s-app=kube-dns

8. code结构概览

  • bwm/:BeeQoS 核心 Agent 实现(底层 eBPF Hooks / TC / 用户态 Agent Daemon)
  • calico/:Calico 配置
  • exm*/:测试实验
  • setup_*.sh:环境配置脚本
关于
578.6 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802047560号