导语:eBPF 技术的出现,使得内核的资源监控更加的便捷、高效,容器化监控也更加适用于云原生的场景。基于 eBPF 实现的可观测性,可以无需修改内核源码或者加载内核模块,安全高效的扩展内核功能,很好的解决了上述问题。本文,将从网络的角度介绍如何基于 eBPF,实现容器级别的 TCP 连接监控。
一、技术背景
OpenCloudOS 适用于大规模容器集群服务器场景,为了提高服务器的资源利用率,降低业务及客户的服务器成本,提出了离、在线业务混合部署的资源隔离方案。资源隔离 QoS(Quality of Service,服务质量)方案主要包括 CPU、I/O、内存和网络四大模块。
针对这四种服务器资源进行 QoS,能够将用户的在线、离线业务部署到同一台服务器上,在保证在线业务服务质量的同时,有效的提升了资源利用率,助力降本增效,契合健康可持续的发展理念。随着 OpenCloudOS 中大规模离、在线服务混合部署的应用,如何更好的实时监控、反馈服务状况成为了业务运维人员亟需解决的问题。 基于 Linux 内核实现的可观测性,具备性能好、灵活性高等优点。然而,基于内核的实现通常是比较困难和繁琐的。在传统的实现方式中,开发人员需要修改内核源代码重新编译或者加载内核模块来实现性能的观测,可能会应对复杂难以调试的情况,使得性能观测变得异常棘手。像基于 kprobe、tracepoint、perf events 等技术的 ftrace、perf 工具,通过在内核函数中打桩,把数据从内核态搬到用户态进行处理。诸如上述实现可观测性的方式带来的弊端也很明显,无保护的内核模块有极大的安全隐患,同时实现的成本较高,不能够应对多变的场景。eBPF 技术的出现,使得内核的资源监控更加的便捷、高效,容器