拓冰建站拓冰建站
首页 / 资讯中心 / 正文

Istio istio-proxy 崩溃时如何启用 coredump 并收集核心文件诊断

Istio istio-proxy 崩溃时如何启用 coredump 并收集核心文件诊断【免费下载链接】istioConnect, secure, control, and observe services.项目地址: https://gitcode.com/GitHub_Trending/is/istio当 istio-proxy 崩溃时Istio 支持让代理进程 dump 出 core 文件用于诊断崩溃原因这在提交 bug report 时尤其有用。但 istio-proxy 默认以只读文件系统运行默认 core dump 配置通常无法让 proxy 写出 core 文件。这篇文章给出仓库中 samples/proxy-coredump/README.md 提供的完整路径在节点上调整sysctl改变 core 文件落盘位置或用仓库提供的 DaemonSet 对全部节点生效最后用istioctl bug-report把 core 文件收集到诊断归档里。需要先说明一点旧版的sidecar.istio.io/enableCoreDump注解已经被移除releasenotes/notes/drop-coredump.yaml 明确指向上面的samples/proxy-coredump示例作为推荐做法所以不要再用该注解。为什么默认的 core dump 不生效proxy 容器内是只读文件系统即使进程崩溃也无法在容器内写 core 文件。因此方案不是改容器而是在节点级别调整kernel.core_pattern把 core 文件写到节点上的/var/lib/istio/data/core.proxy。这里有一个必须知道的限制该sysctl是对整个节点生效的会影响节点上的所有进程不只是 Istio 的代理进程。README 中对此有明确 Warning。方法一在单个节点上手动启用如果只需要排查某一台节点上的代理崩溃直接登录该节点执行sysctl -w kernel.core_pattern/var/lib/istio/data/core.proxy ulimit -c unlimitedsysctl -w kernel.core_pattern...把该节点所有进程的 core 文件路径指到/var/lib/istio/data/core.proxyulimit -c unlimited取消 core 文件大小限制否则可能生成 0 字节文件。节点上需要 root 权限因为修改kernel.core_pattern是全局内核参数。方法二用 DaemonSet 对所有节点生效仓库提供了现成的 DaemonSet位于 samples/proxy-coredump/daemonset.yaml。在仓库的samples/proxy-coredump/目录下执行kubectl apply -f daemonset.yamlREADME 注明这一步需要 elevated privileges提升权限因为 DaemonSet 里的 init 容器以privileged: true运行。该 DaemonSet 的结构值得先看清楚hostNetwork: true运行在istio-system命名空间名为enable-istio-coredumpsinit 容器setsysctls用alpine镜像执行与方法一完全相同的命令sysctl -w kernel.core_pattern/var/lib/istio/data/core.proxy ulimit -c unlimited并以privileged模式挂载宿主机/sys卷init 容器跑完即退出设置留在节点上主容器sleepforever只是tail -f /dev/null保持 Pod 常驻请求 1m CPU本身不做任何事。也就是说这个 DaemonSet 的本质是在每个节点上执行一次方法一的命令并保持一个无害的常驻 Pod。副作用同样只涉及节点的kernel.core_pattern与单节点方式一致。崩溃后如何收集 core 文件core 文件生成后收集靠istioctl bug-report。它的 coredump 收集逻辑tools/bug-report/pkg/content/content.go会在目标 proxy 容器内执行find /var/lib/istio -name core.*找到 core 文件后把内容读入归档并在日志中输出类似namespace/pod/container has N coredumps的统计。相关参数--skip-coredumps默认false跳过从 proxy 容器收集 coredumps 这一步。默认不跳过即默认会收集无需额外配置--output-dir指定输出归档文件的目录--dir指定临时产物存储目录。因此诊断流程是先在目标节点按方法一或方法二启用 core dump等 istio-proxy 崩溃后运行istioctl bug-report在生成的归档中检查 coredumps 部分是否包含core.*文件拿到文件后即可用于分析崩溃原因或附在 bug report 中。VM 环境下的可选开关如果 istio-proxy 跑在虚拟机上而非 sidecar还有一条独立路径pkg/envoy/proxy.go 中注册了环境变量ISTIO_ENVOY_ENABLE_CORE_DUMP默认false设为 true 时 proxy 启动参数会追加--enable-core-dump。源码注释说明该开关目前只在 VM 测试中使用生产 sidecar 场景仍以samples/proxy-coredump的节点级方案为准按需选择即可。限制与边界sysctl方案是节点级的改变的是整个节点所有进程的 core 文件位置不能只作用于 Istiodaemonset.yaml需要提升权限部署privileged 容器旧注解sidecar.istio.io/enableCoreDump已移除依赖它的注入模板需要切换到本文的节点级方案启用后能否真正分析出崩溃原因取决于 core 文件是否成功生成bug-report 归档中的 coredump 条目就是最直接的验证结果。【免费下载链接】istioConnect, secure, control, and observe services.项目地址: https://gitcode.com/GitHub_Trending/is/istio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门