聊聊Docker EOF问题排查
本文转载自微信公众号「运维开发故事」,作者运维开发故事。转载本文请联系运维开发故事公众号。
一、前言
问题排查过程,源码部分均由我的开发同事排查和记录;在征得其同意后,由我发表在此。
二、问题
某天接到客户反馈,pod的事件中出现大量的 warning event: Readiness probe failed: OCI runtime execfailed: exec failed: EOF: unknown。但不影响客户访问该服务。
三、环境
特别说明:客户在负责运行业务的k8s节点上坚持开启了cpu-manager
组件 | 版本 |
---|---|---
k8s | 1.14.x |
四、排查
1、接到客户反馈后,检查该pod所在节点的kubelet日志,如下:
probe的错误类型为failure,对应代码如下:图片2、再查看docker日志,如下:
虽然从Docker日志中显示是 stream copy error,但实际上是底层的 runc 返回了 EOF,导致返回了 error。3、因为日志中显示probe 类型为 Failure,因此 e.CombinedOutPut() 的 err != nil,并且 ExitStatus 不为 0,data的值为 OCI runtime exec failed: exec failed: unexpected EOF: unknown,最终会调用到RunInContainer 方法
ExecSync 是通过 GRPC 调用了 dockershim 的 ExecSync
dockershim 最终调用到 ExecInContainer 方法,并且该方法的返回了 exitcode 不为 0 的 error。
ExecInContainer 做了以下几件事:
那么日志中打印的报错就是 response stream 传递过来的字符流。也就是说,dockerd 的 response 中包含了错误值。
此时去 docker 代码中查找原因,ExecStart 会调用到 dockerd 的以下代码:
根据上面 docker 的日志,err 的错误信息为:OCI runtime exec failed: exec failed: EOF:unknown。也就是说 ContainerExecStart 返回了错误。ContainerExecStart 会调用到containerd.Exec,也就是 dockerd 和 containerd 之间进行通信
这里 new 了一个 FIFOSet,而 reading from a closed fifo 仅出现在 fifo 被 close掉时,仍然在读取的情况。即 f.Close() 发生在 f.Read() 前面。在外层可以看到
p.Start 调用到下面的代码,通过 GRPC 和 containerd 通信。
这个 GRPC 调用会到达 containerd 以下的代码:
Exec 的代码如下:
因此是 runc 在运行后输出了 exec failed: EOF: unknown 这个错误。
将 runc 指令循环执行,可少量复现。经过排查,发现 runc exec 在运行期间会读取 container 的 state.json,并使用 jsondecode 时出现异常。
此时联想到开启 kubelet cpu-manager 后,会 update container,也就是更新这个 state.json 文件。导致 runc读到了部分 cpu-manager 更新的内容。从而导致 json decode 失败。此时排查 runc EOF 和 kubelet cpu-manager update container(默认每 10s 更新一次) 的时间,发现时间点刚好吻合,验证猜想。
查看 runc 是否有修复,发现了这个 pr: https://github.com/opencontainers/runc/pull/2467。修复思路是将 saveState 变成原子操作,这样就不会出现读取 state.json 时,读到部分写入的内容,导致 unexpected EOF (或EOF)的问题
五、解决
关闭cpu-manager
升级runc
推荐系统
番茄花园Ghost Win7 x64 SP1稳定装机版2022年7月(64位) 高速下载
语言:中文版系统大小:3.91GB系统类型:Win7欢迎使用 番茄花园 Ghost Win7 x64 SP1 2022.07 极速装机版 专业装机版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,集成最全面的硬件驱动,精心挑选的系统维护工具,加上独有人性化的设计。是电脑城、个人、公司快速装机之首选!拥有此系统
番茄花园 Windows 10 极速企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10番茄花园 Windows 10 32位极速企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
新萝卜家园电脑城专用系统 Windows10 x86 企业版 版本1507 2022年7月(32位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新萝卜家园电脑城专用系统 Windows10 x86企业版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(32位) ISO镜像快速下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows 10 32位企业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
笔记本&台式机专用系统 Windows10 企业版 版本1903 2022年7月(64位) 提供下载
语言:中文版系统大小:3.98GB系统类型:Win10笔记本台式机专用系统 Windows10 64专业版 v2022年7月 一、系统主要特点: 使用微软Win10正式发布的专业版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动
雨林木风 Windows10 x64 企业装机版 版本1903 2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10新雨林木风 Windows10 x64 企业装机版 2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程中自动激活
深度技术 Windows 10 x64 企业版 电脑城装机版 版本1903 2022年7月(64位) 高速下载
语言:中文版系统大小:3.98GB系统类型:Win10深度技术 Windows 10 x64 企业TLSB 电脑城装机版2022年7月 一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过程
电脑公司 装机专用系统Windows10 x64 企业版2022年7月(64位) ISO镜像高速下载
语言:中文版系统大小:3.98GB系统类型:Win10电脑公司 装机专用系统 Windows10 x64 企业TLSB版2022年7月一、系统主要特点: 使用微软Win10正式发布的企业TLSB版制作; 安装过程全自动无人值守,无需输入序列号,全自动设置; 安装完成后使用Administrator账户直接登录系统,无需手动设置账号。 安装过
相关文章
- Charming Kitten APT组织针对医学研究人员发动攻击
- 如何保护未来智慧城市的安全?
- 什么是VPN网络 VPN网络简介【详细介绍】
- Win10一周年更新正式版14393.576已修复无网络连接的问题
- 什么是WireLurker病毒【详细介绍】
- win7笔记本无线网络找不到无线WiFi如何解决【详解】
- 如何让WIFI网络更好地服务于智能家居产品【详解】
- 微软成立亚太地区公共部门网络安全执行委员会以策协同应对网络攻击
- 网络监控系统简介、流程及架构和方案设计
- win7提示网络安全密钥不匹配怎么办 win7连接网页提示网络安全密钥不匹配的解决方法
- 微机保护价格介绍【详解】
- 网络犯罪市场Deer.io俄罗斯管理员在美国被判入狱
- 怎么删除Win10的多余网络 删除Win10的多余网络的方法
- 解读数据即服务(DaaS)的优势及发展趋势
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 4电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1笔记本&台式机专用系统 GhostWin7 32位旗舰版2022年7月(32位) ISO镜像免费下载
- 2电脑公司Ghost Win7 x64 Sp1六一节 装机万能版2020年6月(64位) ISO镜像免费下载
- 3深度技术Ghost Win8.1 x32位 特别纯净版2020年1月(免激活) ISO镜像高速下载
- 4笔记本&台式机专用系统 Windows10 新春特别 企业版 2020年2月(64位) 提供下载
- 5深度技术 Ghost Win7 x64 Sp1 电脑城装机版2018年5月(64位) ISO镜像免费下载
- 6笔记本系统Ghost Win8.1 (32位) 极速纯净版2020年11月(免激活) ISO镜像高速下载
- 7新雨林木风 Windows10 x86 企业装机版2019年12月(32位) ISO镜像高速下载
- 8深度技术Ghost Win8.1 x32位 特别纯净版2022年1月(免激活) ISO镜像高速下载
- 9深度技术Ghost Win8.1 x32位 特别纯净版2019年11月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 32位 电脑城正式版下载 2018年8月免激活)