请参考 Kubernetes 官方网站文档:Containers。
Container 是一个轻量级、可执行的软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。虽然 Pod 是最小的可部署单元,但 containers 是 Pod 内的核心组件。
调试 Containers
请参考 Kubernetes 官方网站文档:Ephemeral Containers
Kubernetes 的 Ephemeral Containers 功能提供了一种强大的方式,通过向现有 Pod 注入专用的调试工具(系统、网络和磁盘工具)来调试正在运行的 containers。
虽然通常可以使用 kubectl exec 直接在运行中的 container 内执行命令,但许多生产环境的 container 镜像故意保持精简,可能缺少关键的调试工具(例如 bash、net-tools、tcpdump),以减小镜像体积和攻击面。Ephemeral Containers 解决了这一限制,提供了一个预配置的环境,内置丰富的调试工具,非常适合以下场景:
调试功能是通过 Ephemeral Containers 实现的。Ephemeral Container 是一种专门用于内省和调试的特殊 container。它与现有的主 containers
共享 Pod 的网络命名空间和进程命名空间(如果启用),可以直接与应用进程交互和观察。
你可以动态地向运行中的 Pod 添加一个 Ephemeral Container(例如 my-app-debug
),并使用其预装的调试工具。该 Ephemeral Container 的诊断结果直接关联于同一 Pod 内主应用 containers
的行为和状态。
Kubernetes 1.25+ 提供了 kubectl debug
命令来创建 ephemeral containers。此方法为调试提供了强大的命令行替代方案。
命令
示例:调试 my-nginx-pod
中的 nginx
首先,确保有一个正在运行的 Pod:
现在,在 my-nginx-pod
内创建一个名为 debugger
的 ephemeral 调试 container,目标为 my-nginx-container,使用 busybox
镜像:
该命令会将你连接到 debugger ephemeral container 内的 shell,可以使用 busybox 工具调试 my-nginx-container。
查看 Pod 附加的 ephemeral containers:
在输出中查找 Ephemeral Containers
部分。
进入 Container Platform,在左侧导航栏选择 Workloads > Pods。
找到想要查看的 Pod,点击 ⋮ > Debug。
选择 Pod 中想要调试的具体 container。
(可选)如果界面提示需要 初始化(例如设置必要的调试环境),点击 Initialize。
初始化 Debug 功能后,只要 Pod 未被重建,即可直接进入 Ephemeral Container(例如 Container A-debug)进行调试。
等待调试终端窗口准备就绪,开始调试操作。
提示:点击终端右上角的“命令查询”选项,可查看常用调试工具及其使用示例。
点击右上角的命令查询查看常用工具及用法。
调试完成后,关闭终端窗口。
你可以使用 kubectl exec
命令直接与运行中的 container 内部实例交互,执行任意命令行操作。此外,Kubernetes 还提供了方便的文件上传和下载功能。
在 Pod 中的特定 container 内执行命令(例如获取 shell、运行诊断命令等):
示例:进入 my-nginx-pod
中 nginx
的 Bash shell
示例:列出 container /tmp
目录下的文件
从本地复制文件到 Pod 中的 container:
从 Pod 中的 container 复制文件到本地:
你可以使用 kubectl exec
命令进入 container 内部实例,在 Web 控制台窗口执行命令行操作。同时,支持文件上传和下载功能,方便在 container 内传输文件。
进入 Container Platform,在左侧导航栏选择 Application > Applications。
点击 Application Name。
找到关联的工作负载(如 Deployment、StatefulSet),点击 EXEC,然后选择想要进入的具体 Pod Name。再选择 EXEC > Container Name。
输入想要执行的命令。
点击 OK,进入 Web 控制台窗口,执行命令行操作。
点击 File Transfer。
进入 Container Platform,在左侧导航栏选择 Workloads > Pods。
找到目标 Pod,点击其旁边的垂直省略号(⋮),选择 EXEC,然后选择该 Pod 中想要进入的具体 Container Name。
输入想要执行的命令。
点击 OK,进入 Web 控制台窗口,执行命令行操作。
点击 File Transfer。