十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Cilium sysdump 完全指南:从 `cilium-dbg sysdump` 到集群级诊断信息收集

Cilium sysdump 完全指南:从 `cilium-dbg sysdump` 到集群级诊断信息收集 Cilium sysdump 完全指南从cilium-dbg sysdump到集群级诊断信息收集【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium导读在排查 Cilium 网络、安全与可观测性问题时快速收集集群级系统状态是定位故障的第一步。本文以cilium-dbg sysdump命令为切入点说明该命令在cilium-dbg中的真实定位仅提供指引而非执行收集并基于仓库源码深入讲解真正负责收集工作的cilium sysdump位于 cilium-cli的完整参数体系、默认行为与调优策略同时补充单节点场景下cilium-bugtool的使用方法。读完本文你将能根据集群规模与故障场景生成一份信息完整、体积可控、可直接附在问题报告中的 sysdump 归档。cilium-dbg sysdump命令参考cilium-dbg是用于与本地 Cilium Agent 交互的命令行工具见 cilium-dbg 根命令定义其子命令sysdump的官方描述是Provide instructions on dumping cluster-wide system state提供关于转储集群级系统状态的说明。cilium-dbg sysdump [flags]选项-h, --help help for sysdump继承自父命令的选项--config string Config file (default is $HOME/.cilium.yaml) -D, --debug Enable debug messages -H, --host string URI to server-side API --log-driver strings Logging endpoints to use (example: syslog) --log-opt map Log driver options (example: formatjson)这些持久化标志定义在 root.go 的 init 函数 中--config指定配置文件默认从$HOME/.cilium.yaml读取环境变量前缀为ciliuminitConfig通过 viper 实现见 root.go-D, --debug开启调试消息-H, --host服务端 API 的 URI用于创建 cilium-dbg 的 API 客户端--log-driver/--log-opt配置日志输出端点如syslog及其选项如formatjson最终交给logging.SetupLogging完成日志初始化。关联命令cilium-dbg — CLI 根命令关键事实cilium-dbg sysdump并不执行收集从源码看cilium-dbg sysdump被设计为一个占位提示命令而非真正的收集器。其实现位于 cilium-dbg/cmd/sysdump.govar errNoSysdump cilium-dbg sysdump cannot perform this action, you need a different tool.\n See https://docs.cilium.io/en/stable/operations/troubleshooting/#reporting-a-problem\n sysdumpCmd cobra.Command{ Use: sysdump, Short: Provide instructions on dumping cluster-wide system state, Run: func(cmd *cobra.Command, args []string) { fmt.Fprintf(os.Stderr, %s\n, errNoSysdump) os.Exit(1) }, }也就是说当你直接执行cilium-dbg sysdump时程序会向标准错误输出一段提示并以退出码 1 结束明确告知cilium-dbg sysdump无法执行该操作你需要使用另一个工具——即cilium CLIcilium sysdump。这解释了命令描述中 instructions 一词的含义该命令只负责告诉你去哪做本身不做集群级状态收集。真正的收集器cilium sysdumpcilium-cli集群级 sysdump 的实际能力由 cilium-cli 中的cilium sysdump命令提供。其命令定义位于 cilium-cli/cli/sysdump.gocmd : cobra.Command{ Use: sysdump, Short: Collects information required to troubleshoot issues with Cilium and Hubble, RunE: func(cmd *cobra.Command, _ []string) error { // --cilium-namespace 未设置时回退到全局 --namespace if sysdumpOptions.CiliumNamespace cmd.Flags().Changed(namespace) { sysdumpOptions.CiliumNamespace RootParams.Namespace } // --cilium-operator-namespace 未设置时默认与 agent 相同 namespace if sysdumpOptions.CiliumOperatorNamespace { if cmd.Flags().Changed(namespace) { sysdumpOptions.CiliumOperatorNamespace RootParams.Namespace } else { sysdumpOptions.CiliumOperatorNamespace sysdumpOptions.CiliumNamespace } } // 同理--cilium-helm-release-name 回退到全局 --helm-release-name ... collector, err : sysdump.NewCollector(RootK8sClient, sysdumpOptions, hooks, time.Now()) if err ! nil { return fmt.Errorf(failed to create sysdump collector: %w, err) } if err collector.Run(); err ! nil { return fmt.Errorf(failed to collect sysdump: %w, err) } return nil }, }执行流程概括为先补齐命名空间与 Helm release 名称等默认值然后通过sysdump.NewCollector创建收集器再调用collector.Run()完成收集并打包。收集内容与架构设计收集器的核心实现位于 cilium-cli/sysdump/sysdump.go约 3800 行通过 worker pool 并行执行大量采集任务默认 20 个 worker见 cilium-cli/sysdump/defaults.go。可以推断sysdump 归档大体覆盖以下几类信息Cilium 组件状态以 label selector 定位 Cilium agent、operator、Envoy、node-init 等 Pod收集其状态、事件与日志Hubble 数据Hubble、Hubble Relay、Hubble UI 相关 Pod 信息以及指定数量的 Hubble flow默认 10000 条见 defaults.go 中DefaultHubbleFlowsCount集群资源清单通过 Kubernetes API 导出的各类资源对象节点与 CNI 信息CNI 配置目录默认/etc/cni/net.d/与 CNI ConfigMap默认名cni-configuration配置与 Helm 信息Cilium 的 Helm values 与元数据通过 cilium-cli/k8s/client.go 中的GetHelmValues/GetHelmMetadata获取可选的 profiling / tracing 数据--profiling默认开启--tracing默认关闭可选的 Tetragon 数据当集群中部署了 Tetragon 时收集其 Pod、ConfigMap 与 TracingPolicy 等相关默认值见 defaults.go。默认行为与输出产物关键默认值定义在 cilium-cli/sysdump/defaults.go默认值常量值含义DefaultOutputFileNamecilium-sysdump-ts输出文件前缀ts会被替换为时间戳DefaultLogsSinceTime8760 * time.Hour约 1 年日志回溯时间范围DefaultLogsLimitBytes10737418241 GiB单条日志的字节上限DefaultHubbleFlowsCount10000采集的 Hubble flow 条数设为 0 可禁用DefaultHubbleFlowsTimeout5 * time.SecondHubble flow 采集超时DefaultWorkerCount20并行 worker 数DefaultCopyRetryLimit100文件拷贝重试上限DefaultLargeSysdumpThreshold20节点数阈值超过则触发大集群警告DefaultLargeSysdumpAbortTimeout5 * time.Second大集群下等待用户确认/取消的宽限期DefaultQuickfalse是否开启快速模式DefaultProfilingtrue是否抓取 profiling 数据DefaultTracingfalse是否抓取 tracing 数据默认情况下cilium sysdump会尽可能多地收集日志且覆盖集群中所有节点。若集群规模较大这可能导致归档体积过大详见下文控制 sysdump 体积一节。完整参数一览全部参数由InitSysdumpFlags注册见 [cilium-cli/sysdump/sysdump.go#L3501-L3620]。按用途分组如下组件定位label selector 与 namespace参数默认值说明--cilium-label-selectork8s-appcilium定位 Cilium Pod 的标签--cilium-daemon-set-label-selectork8s-appcilium定位 Cilium DaemonSet 的标签--cilium-namespace空回退--namespaceCilium 所在命名空间--cilium-operator-namespace空回退 agent 的 namespaceCilium operator 所在命名空间--cilium-operator-label-selectorio.cilium/appoperator定位 operator Pod 的标签--cilium-envoy-label-selectork8s-appcilium-envoy定位 Cilium Envoy Pod 的标签--cilium-node-init-selectorappcilium-node-init定位 node-init Pod 的标签--cilium-spire-namespace空Cilium SPIRE 安装所在命名空间--cilium-spire-agent-selectorappspire-agent定位 spire-agent Pod 的标签--cilium-spire-server-selectorappspire-server定位 spire-server Pod 的标签--clustermesh-apiserver-label-selectork8s-appclustermesh-apiserver定位 clustermesh-apiserver Pod 的标签--clustermesh-generate-certs-label-selectork8s-appclustermesh-apiserver-generate-certs定位 certgen Pod 的标签--cilium-helm-release-name空回退--helm-release-name获取 values 所用的 Helm release 名--tetragon-helm-release-name空获取 Tetragon Helm values 所用的 release 名--extra-label-selectors无额外定位 Pod 的标签选择器集合可重复指定Hubble 相关参数默认值说明--hubble-label-selectork8s-apphubble定位 Hubble Pod 的标签--hubble-relay-labelsk8s-apphubble-relay定位 Hubble Relay Pod 的标签--hubble-ui-labelsk8s-apphubble-ui定位 Hubble UI Pod 的标签--hubble-generate-certs-labelsk8s-apphubble-generate-certs定位 certs 生成 Pod 的标签--hubble-flows-count10000采集的 Hubble flow 条数0 表示禁用--hubble-flows-timeout5sHubble flow 采集超时日志范围与归档体积参数默认值说明--logs-since-time8760h约 1 年日志回溯时间--logs-limit-bytes10737418241 GiB单次日志采集的字节上限透传给kubectl logs不限制整个归档--node-list空逗号分隔的节点 IP 或名称仅收集这些节点上 Pod 的 gops 与日志--output-filenamecilium-sysdump-ts输出文件名不含扩展名ts为时间戳占位符--quickfalse快速模式跳过cilium-bugtool输出与日志收集--worker-count20并行 worker 数存在下限过低会被自动调高--copy-retry-limit100文件拷贝重试上限设为 -1 表示无限重试适合不稳定网络--cilium-bugtool-flags无透传给cilium-bugtool的附加标志采集开关参数默认值说明--collect-logs-from-not-ready-agentstrue是否从非 Ready 状态的 agent Pod 收集日志--debugfalse是否开启调试日志--profilingtrue是否抓取 profiling 数据--tracingfalse是否抓取 tracing 数据--detect-gops-pidfalse是否自动探测 gops agent PID--cni-config-directory/etc/cni/net.d/CNI 配置所在目录--cni-configmap-namecni-configurationCNI ConfigMap 名称Tetragon 相关集群部署了 Tetragon 时生效参数默认值说明--tetragon-namespacekube-systemTetragon 所在命名空间--tetragon-label-selectorapp.kubernetes.io/nametetragon定位 Tetragon Pod 的标签--tetragon-operator-label-selectorapp.kubernetes.io/nametetragon-operator定位 Tetragon operator Pod 的标签实战何时使用哪个命令场景推荐命令说明Kubernetes 集群中收集 Cilium Hubble 的完整诊断信息cilium sysdump集群级收集产出cilium-sysdump-ts.tar.gz归档非 Kubernetes 环境或仅单节点排查cilium-bugtool需在 Cilium Pod/容器内执行单节点级收集见下文在cilium-dbg中误用了 sysdumpcilium-dbg sysdump仅输出指引并退出需改用上述工具快速开始# 安装 cilium CLI 后在拥有集群访问权限的机器上执行 cilium sysdump # 查看全部参数 cilium sysdump --help # 快速模式跳过 bugtool 输出与日志只收集核心状态 cilium sysdump --quick控制 sysdump 体积官方推荐做法官方排障文档 Reporting a problem 明确指出默认的cilium sysdump会尽可能收集所有节点、尽可能多的日志。当集群节点数超过 20 个时建议按以下优先级限制归档大小--node-list只挑少量节点收集例如--node-listnode1,node2。官方强调一个拥有完整历史的少量节点 sysdump要优于覆盖所有节点的简短 sysdump--logs-since-time回溯到问题开始的时间点例如--logs-since-time2h避免携带无关历史日志--logs-limit-bytes当 Cilium agent 与 operator 日志过大时限制单条日志体积例如--logs-limit-bytes1048576010 MiB。注意该参数只作用于日志采集不限制整个归档包。此外大集群保护机制会在节点数超过--large-sysdump-threshold默认 20时给出警告并等待--large-sysdump-abort-timeout默认 5 秒以便用户中断对应默认值见 defaults.go行为逻辑在 cilium-cli/cli/sysdump.go 中初始化。单节点场景cilium-bugtool如果不在 Kubernetes 环境中运行或在问题上报前需要快速抓取单个 Cilium agent 节点的信息可以使用cilium-bugtool。它收集命令输出与文件默认写入tmp目录并且需要从 Cilium Pod/容器内部执行cilium-bugtool当检测到kubectl时cilium-bugtool会自动搜索 Cilium Pod默认标签为k8s-appcilium可通过k8s-namespace与k8s-label参数调整搜索范围详见 Documentation/operations/troubleshooting.rst#L916-L938。与连通性测试联动失败时自动收集sysdump 还深度集成了cilium connectivity test当测试失败时可通过--collect-sysdump-on-failure自动收集 sysdump见 cilium-cli/cli/connectivity.go并可通过WithSysdumpPolicy控制每个测试的收集策略SysdumpPolicyEach/SysdumpPolicyOnce/SysdumpPolicyNever定义于 cilium-cli/connectivity/check/test.go。这为 CI 流水线提供了测试失败即留证的自动化能力。小结cilium-dbg sysdump是纯指引性命令源码见 cilium-dbg/cmd/sysdump.go执行时会提示改用其他工具并以退出码 1 结束真正的集群级收集由cilium sysdump完成其收集器、默认值与全部参数分别定义于 cilium-cli/sysdump/sysdump.go、cilium-cli/sysdump/defaults.go 与 cilium-cli/cli/sysdump.go上报问题前优先使用--node-list、--logs-since-time、--logs-limit-bytes控制归档规模并在故障状态丢失前完成采集单节点或非 Kubernetes 场景使用cilium-bugtool。将生成的cilium-sysdump-ts.tar.gz连同问题描述一并附上即可为 Cilium 社区或内部排障提供完整的现场证据。【免费下载链接】ciliumeBPF-based Networking, Security, and Observability项目地址: https://gitcode.com/GitHub_Trending/ci/cilium创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表