Cilium cgroup 元数据管理:cilium-dbg cgroups 命令参考与实现解析
Cilium cgroup 元数据管理cilium-dbg cgroups 命令参考与实现解析【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium导读cilium-dbg cgroups是 Cilium 命令行调试工具cilium-dbg中用于查看cgroup 元数据Cgroup metadata的命令组。在启用了 socket 负载均衡SocketLB追踪的场景下Cilium Agent 会在后台维护一份「Pod 与其容器 cgroup」的映射关系而本文要介绍的cilium-dbg cgroups list正是将该映射以表格、JSON 或 YAML 形式导出的官方调试入口。阅读本文后你将掌握cilium-dbg cgroups的完整用法与全部参数并理解这条命令背后从 CLI 到 Agent 守护进程、再到 cgroup 管理器的完整数据链路。一、命令概览cilium-dbg cgroupscilium-dbg cgroups是cilium-dbg命令树下的一个命令组父命令其功能定位只有一句话Cgroup metadata即负责展示 Cilium 所维护的 cgroup 元数据。它本身不执行任何查询动作真正的查询逻辑在它的子命令list中。1.1 命令结构cilium-dbg cgroups └── cilium-dbg cgroups list # 显示 Cilium 维护的 cgroup 元数据别名ls在源码中该命令组由 cilium-dbg/cmd/cgroups.go 定义// CgroupsCmd represents the cgroups command var CgroupsCmd cobra.Command{ Use: cgroups, Short: Cgroup metadata, } func init() { RootCmd.AddCommand(CgroupsCmd) }它基于spf13/cobra构建通过init()挂载到RootCmd根命令之下。命令元数据Use与Short正是本参考文档标题与描述的直接来源。1.2 自身参数-h, --help help for cgroups与大多数 Cobra 命令一致cgroups父命令仅提供-h/--help用于查看该命令组的帮助信息包括可用子命令列表。二、全局继承参数Options inherited from parent commands无论运行cilium-dbg cgroups还是其子命令list所有来自cilium-dbg根命令的全局参数都会生效。这些参数定义了客户端如何连接 Cilium Agent 的服务端 API参数说明--config string配置文件路径默认读取$HOME/.cilium.yaml-D, --debug启用调试消息输出-H, --host string服务端 API 的 URI即连接 Cilium Agent 的地址--log-driver strings日志输出端点例如syslog--log-opt map日志驱动选项例如formatjson其中-H/--host是最常用的参数当你在非 Agent 所在节点运行cilium-dbg时需要显式指定 Agent 的 API 地址例如cilium-dbg -H unix:///var/run/cilium/cilium.sock cgroups list。cilium-dbg默认通过本地 socket 与服务端通信。三、核心子命令cilium-dbg cgroups listcilium-dbg cgroups list是这一命令组的核心其用途为Display cgroup metadata maintained by Cilium显示 Cilium 维护的 cgroup 元数据。命令定义位于 cilium-dbg/cmd/cgroups_list.govar cgroupsListCmd cobra.Command{ Use: list, Aliases: []string{ls}, Short: Display cgroup metadata maintained by Cilium, Run: func(cmd *cobra.Command, args []string) { listCgroups() }, }值得注意的是它注册了别名ls因此cilium-dbg cgroups ls与cilium-dbg cgroups list完全等价方便习惯短命令的用户。3.1 用法cilium-dbg cgroups list [flags]3.2 子命令专属参数参数说明-h, --help显示list子命令的帮助信息--no-headers输出表格时不打印表头-o, --output string输出格式取值json、yaml、jsonpath{}在源码中这两个业务参数通过如下代码注册cilium-dbg/cmd/cgroups_list.gofunc init() { CgroupsCmd.AddCommand(cgroupsListCmd) cgroupsListCmd.Flags().BoolVar(cgroupsListNoHeaders, no-headers, false, Do not print headers) command.AddOutputOption(cgroupsListCmd) }--no-headers是一个布尔开关默认false由cgroupsListNoHeaders变量承载-o/--output通过公共工具函数command.AddOutputOption注入支持 Cilium CLI 统一的输出格式约定json/yaml/jsonpath便于脚本化解析与自动化集成。3.3 默认输出三列表格当不指定-o时命令以text/tabwriter渲染的对齐表格输出固定三列表头见 cilium-dbg/cmd/cgroups_list.goPOD NAME POD NAMESPACE CGROUP IDSPOD NAMEPod 名称POD NAMESPACEPod 所在命名空间CGROUP IDS该 Pod 下各容器的 cgroup ID数字当一个 Pod 包含多个容器时第一个容器与 Pod 名称/命名空间同行打印其余容器仅缩进打印 cgroup ID\t\t%d见 cilium-dbg/cmd/cgroups_list.gofor _, pm : range podMetas { for i, container : range pm.Containers { if i 0 { fmt.Fprintf(w, %s\t%s\t%d\t\n, pm.Name, pm.Namespace, container.CgroupID) } else { fmt.Fprintf(w, \t\t%d\t\n, container.CgroupID) } } } w.Flush()--no-headers的作用即跳过表头行if !cgroupsListNoHeaders { ... }适合将输出直接喂给其他文本处理工具。3.4 结构化输出示例指定-o json后输出将变为结构化数据对应下述数据模型{ pod-metadatas: [ { name: my-app-6b4d9f5d5c-abcde, namespace: default, containers: [ { cgroup-id: 123456789, cgroup-path: /kubepods/burstable/... } ], ips: [10.0.1.5] } ] }指定-o yaml或-o jsonpath{...}时遵循同样的字段名约定可用于监控告警脚本、日志采集等场景。四、数据模型cgroup 元数据的字段结构list子命令展示的数据由 Cilium 的 REST API 数据模型定义位于 api/v1/models 目录由 go-swagger 生成共三层结构4.1 CgroupDumpMetadata顶层定义于 api/v1/models/cgroup_dump_metadata.go// CgroupDumpMetadata cgroup full metadata type CgroupDumpMetadata struct { // pod metadatas PodMetadatas []*CgroupPodMetadata json:pod-metadatas }4.2 CgroupPodMetadataPod 维度定义于 api/v1/models/cgroup_pod_metadata.gotype CgroupPodMetadata struct { Containers []*CgroupContainerMetadata json:containers Ips []string json:ips Name string json:name,omitempty Namespace string json:namespace,omitempty }注意该结构不仅包含容器 cgroup 信息还额外携带了 Pod 的IP 列表ips字段这为调试「Pod IP ↔ cgroup ↔ 容器」的映射关系提供了完整证据。4.3 CgroupContainerMetadata容器维度定义于 api/v1/models/cgroup_container_metadata.gotype CgroupContainerMetadata struct { // cgroup id CgroupID uint64 json:cgroup-id,omitempty // cgroup path CgroupPath string json:cgroup-path,omitempty }默认表格输出只展示cgroup-idcgroup-path字段仅在结构化输出json/yaml中可见它记录了容器 cgroup 的完整路径如/kubepods/burstable/pod-xxx/yyy对排查容器归属问题尤为有用。五、底层原理从 CLI 到 Agent 的完整数据链路cilium-dbg cgroups list不是本地读取文件而是通过 Cilium 的 REST API 从 Agent 侧拉取数据。整个链路如下5.1 第一步CLI 调用服务端 API在 cilium-dbg/cmd/cgroups_list.go 中listCgroups()直接调用 Agent 的 APIfunc listCgroups() { resp, err : client.Daemon.GetCgroupDumpMetadata(daemon.NewGetCgroupDumpMetadataParams()) if err ! nil { fmt.Fprintf(os.Stderr, %s\n, pkg.Hint(err)) os.Exit(1) } w : tabwriter.NewWriter(os.Stdout, 5, 0, 3, , 0) printMetadata(w, resp.Payload) }这里client即连接 Agent 的 API 客户端GetCgroupDumpMetadata是api/v1/client/daemon包中对应 REST 端点GetCgroupDumpMetadata的封装。若返回为空metadata nil命令会输出Unable to retrieve cgroups metadata并以退出码 1 结束。5.2 第二步Agent 侧 REST 处理Agent 端的 HTTP 处理器位于 pkg/cgroups/manager/rest_api.go。处理器调用 cgroup 管理器的DumpPodMetadata()获取内部元数据再转换为上述 API 模型返回func (h *getCgroupDumpMetadataRestApiHandler) Handle(params daemonrestapi.GetCgroupDumpMetadataParams) middleware.Responder { resp : models.CgroupDumpMetadata{} metadata : h.cgroupManager.DumpPodMetadata() for _, pm : range metadata { // ... 将内部 CgroupPodMetadata 映射为 API 模型 // 填充 CgroupID、CgroupPath、Name、Namespace、Ips } return daemonrestapi.NewGetCgroupDumpMetadataOK().WithPayload(resp) }5.3 第三步cgroup 管理器何时启用关键的一点是cgroup 元数据管理并不是默认无条件启用的。根据 pkg/cgroups/manager/cell.gocgroup 管理器CGroupManager的初始化条件是func newCGroupManager(params cgroupManagerParams) CGroupManager { if !params.KPRConfig.EnableSocketLB || !params.AgentConfig.UnsafeDaemonConfigOption.EnableSocketLBTracing { return noopCGroupManager{} } // ... 否则创建真实管理器并启动 pod 事件处理 Job }即需要同时满足EnableSocketLB启用 socket 负载均衡即 kube-proxy-free 模式下的核心能力EnableSocketLBTracing启用 socket 负载均衡的追踪能力用于 Hubble 观测。任一条件不满足时管理器退化为noopCGroupManager{}空实现此时cilium-dbg cgroups list虽然可以正常调用但返回的pod-metadatas列表为空。因此该命令在启用 SocketLB SocketLB Tracing 的 Cilium 集群中才具有实际数据。在真实管理器启用后Agent 会通过JobGroup.Add(job.OneShot(process-pod-events, cm.processPodEvents))启动一个后台 Jobpkg/cgroups/manager/cell.go持续监听并维护「Pod → 容器 cgroup」映射这正是DumpPodMetadata()的数据来源。5.4 调用链小结cilium-dbg cgroups list │ (REST GET /cgroup-dump-metadata) ▼ Agent REST handler (pkg/cgroups/manager/rest_api.go) │ ▼ CGroupManager.DumpPodMetadata() (pkg/cgroups/manager 包) │ ← 数据由后台 Job processPodEvents 持续维护 ▼ 返回 CgroupDumpMetadata 模型api/v1/models六、典型使用场景与注意事项6.1 快速查看集群中 Pod 与 cgroup 的映射# 在 Agent 节点上默认本地连接 cilium-dbg cgroups list # 使用别名 ls等价写法 cilium-dbg cgroups ls # 指定远端 Agent 地址 cilium-dbg -H unix:///var/run/cilium/cilium.sock cgroups list # 去掉表头便于管道处理 cilium-dbg cgroups list --no-headers典型输出POD NAME POD NAMESPACE CGROUP IDS my-app-6b4d9f5d5c-ab default 123456789 987654321多行 cgroup ID 表示同一 Pod 下存在多个容器。6.2 脚本化获取结构化数据# 获取 JSON 格式 cilium-dbg cgroups list -o json # 获取 YAML 格式 cilium-dbg cgroups list -o yaml # 仅提取首个 Pod 名称jsonpath 语法 cilium-dbg cgroups list -o jsonpath{.pod-metadatas[0].name}6.3 注意事项适用前提如 第五节 所述该命令输出的完整数据依赖 Agent 启用EnableSocketLB与EnableSocketLBTracing。未启用时返回空列表属于预期行为而非命令故障。权限要求cilium-dbg需要具备访问 Agent REST API 的能力默认本地 unix socket建议在 Agent 所在节点或具备相应权限的容器内执行。参考文档一致性本文对应命令参考文档为 Documentation/cmdref/cilium-dbg_cgroups.md 与 Documentation/cmdref/cilium-dbg_cgroups_list.md二者由cilium-dbg cmdref自动生成字段与源码保持一致。七、延伸阅读若希望深入了解该命令背后的系统可继续阅读当前仓库中的以下资源CLI 实现cilium-dbg/cmd/cgroups.go、cilium-dbg/cmd/cgroups_list.goAPI 数据模型api/v1/models/cgroup_dump_metadata.go、api/v1/models/cgroup_pod_metadata.go、api/v1/models/cgroup_container_metadata.goAgent 侧实现pkg/cgroups/manager/cell.go管理器生命周期与启用条件、pkg/cgroups/manager/rest_api.goREST 处理器相关命令参考cilium-dbg 命令总览【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

为 SerenityOS 构建共享库:npth 端口 libtool 补丁的原理剖析与移植实战

为 SerenityOS 构建共享库:npth 端口 libtool 补丁的原理剖析与移植实战

为 SerenityOS 构建共享库:npth 端口 libtool 补丁的原理剖析与移植实战 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 本篇文章以 SerenityOS 仓库中 npth 端口所携带…

2026/10/26 10:14:23 阅读更多 →
Actual Budget 预算视图实战指南:月份管理、预算表操作与信封预算法原理

Actual Budget 预算视图实战指南:月份管理、预算表操作与信封预算法原理

Actual Budget 预算视图实战指南:月份管理、预算表操作与信封预算法原理 【免费下载链接】actual A local-first personal finance app 项目地址: https://gitcode.com/GitHub_Trending/ac/actual 导读 本指南围绕 Actual Budget 的预算视图(The…

2026/10/25 17:09:15 阅读更多 →
Arm-2D:面向Cortex-M的确定性2D图形加速框架

Arm-2D:面向Cortex-M的确定性2D图形加速框架

1. 为什么在Cortex-M上做2D图形加速,Arm-2D不是“锦上添花”,而是“生死线” 你有没有遇到过这样的场景:在一款带320240 OLED屏的工业HMI设备上,客户突然要求增加一个动态波形图——不是静态图标,是每50ms刷新一次、带…

2026/10/26 10:14:30 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 12:00:19 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 8:34:37 阅读更多 →