如何查询无源代码编译二进制K8s健康检查程序运行时访问的文件
无源码二进制文件运行时文件访问清单排查方案
前置快速排查
先确认二进制本身的基础依赖是否正常:
- 执行
ldd 二进制文件路径检查动态链接库依赖,确认本地容器中是否缺少AWS环境中存在的so文件,缺失动态库是无源码二进制跨环境运行失败的高频原因 - 执行
file 二进制文件路径确认二进制架构,避免本地环境运行了不兼容的arm/x86架构程序
运行时文件访问行为捕获方案
方案1:容器内置调试工具(适用于基础镜像预装了strace的场景)
直接在Pod内执行strace命令过滤所有文件相关系统调用,即可完整输出程序运行全流程访问的所有文件:
strace -e trace=file,openat,access,stat 二进制文件路径
如果需要保存日志后续分析,增加-o参数输出到文件:
strace -e trace=file,openat,access,stat -o strace_log.txt 二进制文件路径
方案2:临时调试容器(适用于基础镜像无调试工具的场景)
不用修改原有工作负载镜像,直接通过K8s临时调试容器共享进程Namespace捕获行为:
- 启动带strace的调试容器挂载到目标Pod:
kubectl debug -it 目标Pod名称 --image=预装strace的公共调试镜像 --share-processes --copy-to=debug-pod
- 进入调试容器后,通过进程号或者直接执行二进制文件,复用方案1的strace命令捕获文件访问记录即可
跨环境差异对比步骤
- 分别在AWS正常运行的Pod、本地故障Pod中执行上述捕获命令,导出完整的文件访问清单
- 对比两份清单的差异项,重点核查:
- 本地环境是否缺失程序尝试访问的文件路径
- 共有路径下的文件内容、权限是否和AWS环境一致
- K8s挂载的ConfigMap、Secret、PV存储的路径、内容、权限配置是否和AWS环境对齐
- 容器运行用户的UID/GID、SecurityContext配置是否存在差异,是否有对应文件的访问权限
内容的提问来源于stack exchange,提问作者xtda4664
相关产品推荐
相关产品推荐

