0%

crictl 是 CRI 兼容的容器运行时命令行接口。 你可以使用它来检查和调试 Kubernetes 节点上的容器运行时和应用程序。 crictl 和它的源代码在 cri-tools 代码库,本文将总结 crtctl 工具的使用方法。

阅读全文 »

nsenter 命令是一个可以在指定进程的命令空间下运行指定程序的命令,它位于util-linux包中。通过 nsenter 命令可以极大方便容器网络等场景的调试,本文将介绍其原理与使用。

阅读全文 »

本文档描述了Cilium的架构。它通过记录BPF数据路径(datapath)的钩子来实现Cilium数据路径,那么Cilium数据路径是如何与容器编排层继承,以及如何在各层(如BPF数据路径和Cilium代理)之间更新对象的?

数据路径

Linux内核在网络栈中支持一个BPF钩子集,使用这些勾子可以允许BPF程序(即使用回调函数运行)。Cilium数据路径使用这些钩子加载BPF程序,当一起使用时,这些程序会创建更高级别的网络结构。

阅读全文 »

Ginkgo /ˈɡɪŋkoʊ / 是Go语言的一个行为驱动开发(BDD, Behavior-Driven Development)风格的测试框架,通常和库Gomega一起使用。Ginkgo在一系列的“Specs”中描述期望的程序行为。Ginkgo 集成了Go语言的测试机制,你可以通过 go test 来运行Ginkgo测试套件。本文所有的代码可以在我的 Github 中找到。

阅读全文 »

随着分布式系统和云计算的普及,网络越来越成为计算的瓶颈,为了提升在网络性能,各种方案被提出来,包括 DPDK、RDMA、SmartNIC 等方案,随着 eBPF 的逐渐成熟,它也越来越多的被应用到改善网络性能,从而在云计算环境带来更大的收益。在各种网络方案中,Ciilum 是一个基于 eBPF 的性能优异的方案,覆盖了分布式系统的绝大多数场景。本文将介绍 Ciilum 通信的整个链路,如果你还不了解 eBPF,你可以先看看我的 这篇博客

阅读全文 »

BPF的字面上意思Berkeley Packet Filter意味着它是从包过滤而来。如果在开始前对BPF缺乏感性的认识建议先看一下参考文档:“3.1、Berkeley Packet Filter (BPF) (Kernel Document)”、“3.2、BPF and XDP Reference Guide”。

阅读全文 »

使用 BPF 的内核子系统也是 BPF 基础设施的一部分,像网络子系统、追踪子系统都可以 attch BPF 程序,这篇博客 中讲述了 tc 和 XDP 在 Cilium 整个数据链路的位置。在 eBPF XDP 子系统 中介绍了 XDP 子系统,网络包在还未进入网络协议栈之前就处理,带来巨大的性能提升。也正是因为协议栈此时还没有从包中提取出元数据,因此 XDP BPF 程序无法利用这些元数据。与 XDP 相比,tc BPF 程序在内核栈中稍后面的一些地方执行,因此它们可以访问更多的元数据和一 些核心的内核功能。

阅读全文 »