临时容器调试是什么
当业务镜像里没有可用的命令行工具,或者容器已经崩溃无法进入时,可以往运行中的对象里注入一个临时容器。它使用自带工具的镜像,被加入到目标对象的环境里,从而在没有 shell 的运行时镜像上也能查看网络、进程与文件系统状态。这是排查精简镜像的标准手段。
共享哪些、不共享哪些
默认它会与目标对象共享网络等命名空间,因此可以直接验证端口与解析;但要看到应用进程,需要显式指定目标容器以加入其进程命名空间。文件系统默认不共享,要查看应用的文件必须通过共享卷挂载。临时容器创建后无法删除,退出后会保留为已终止状态。
基本信息
| 适用环境 | 集群版本需支持临时容器特性,kubectl 版本与之匹配 |
|---|---|
| 适用对象 | 运行中或已崩溃的对象,也可作用于节点 |
| 镜像选择 | 自带网络与进程工具的调试镜像最实用 |
| 共享范围 | 默认共享网络等命名空间,文件系统需卷配合 |
| 生命周期 | 创建后不可删除,退出后保留为已终止状态 |
| 权限要求 | 对对象具备创建临时容器的权限 |
典型使用场景
- 精简镜像排查:运行时镜像不含 shell,用调试容器验证网络与解析
- 崩溃对象取证:主容器已反复退出,仍可加入同一环境查看现场
- 网络诊断:在共享网络命名空间里测试端口连通与抓包
- 进程观察:加入目标容器进程命名空间后查看进程与线程状态
- 节点排查:以节点的命名空间启动调试容器,检查节点侧文件与网络
- 文件核对:通过共享卷读取应用的数据目录与配置
常用姿势
常用姿势
kubectl debug -it web-x --image=busybox:1.36 --target=app # 加入目标容器进程空间
kubectl debug -it web-x --image=nicolaka/netshoot --target=app -- bash # 网络诊断工具集
kubectl debug node/node-1 -it --image=busybox:1.36 # 在节点环境里排查
kubectl debug -it web-x --image=busybox:1.36 -- sh # 仅共享网络,做连通性测试命令与相关手段的分工
| 手段 | 适用条件 | 局限 |
|---|---|---|
| 在容器内执行命令 | 容器运行中且镜像内有工具 | 精简镜像不适用 |
| 临时容器 | 容器运行中或已崩溃 | 创建后不可删除,不能配置端口与探针 |
| 复制对象调试 | 需要用不同镜像启动完整副本 | 会创建新对象,环境不完全一致 |
| 节点级调试 | 排查节点侧问题 | 权限较高,需谨慎操作 |
默认只共享网络等命名空间,查看磁盘上的应用文件需要通过共享卷,进程互不可见时记得指定目标容器。
临时容器无法配置资源上限与探测,启动时占用的资源会计入该对象的总额,生产环境不要长期保留。