Hasty Briefsbeta

双语

Fixing a kubelet memory leak in Kubernetes 1.36

12 days ago
  • #Kubernetes
  • #Debugging
  • #Memory Leak
  • 作者在一个小型测试集群中发现Kubernetes 1.36存在内存泄漏,高内存压力暴露了此问题。
  • 调查显示是kubelet进程自身内存占用增长,而非应用Pod导致。
  • 使用Go的pprof进行堆分析发现近百万个泄漏的上下文是主因,消耗了大部分内存。
  • Kubernetes 1.36的一项代码变更在Pod协调循环中,通过覆盖取消函数而未取消旧上下文,引入了上下文泄漏。
  • AI工具(Codex)帮助定位了代码库中的回归问题,特别是在startPodSync函数中。
  • 开发并提交了补丁;在集成测试失败揭示额外上下文问题后,简化为直接修复即时泄漏。
  • Kubernetes团队响应迅速,修复已合并到v1.37的主分支,并反向移植到v1.36。
  • 重启kubelet可暂时缓解内存压力,但底层泄漏在打补丁前持续存在。
  • 经验教训包括堆分析的价值、长期运行系统中的时间维度问题以及基础设施层级故障排查。
  • 使用单行命令监控kubelet内存占用显示,重启后内存使用从974 MiB大幅降至110 MiB。