Containers
目录
理解 Containers理解 Ephemeral Containers实现原理:利用 Ephemeral Containers使用 CLI 调试 Ephemeral Containers使用 Web 控制台调试 Ephemeral Containers与 Containers 交互使用 CLI 与 Containers 交互Exec文件传输使用 Web 控制台与 Containers 交互通过 Applications 进入容器通过 Pod 进入容器理解 Containers
请参考 Kubernetes 官方网站文档:Containers。
Container 是一个轻量级、可执行的软件包,包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。虽然 Pod 是最小的可部署单元,但 containers 是 Pod 内的核心组件。
理解 Ephemeral Containers
调试 Containers
请参考 Kubernetes 官方网站文档:Ephemeral Containers
Kubernetes 的 Ephemeral Containers 功能通过向现有 Pod 注入专用的调试工具(系统、网络和磁盘工具),为调试运行中的容器提供了强大的方式。
虽然通常可以使用 kubectl exec 直接在运行中的容器内执行命令,但许多生产环境的容器镜像故意保持精简,可能缺少关键的调试工具(如 bash、net-tools、tcpdump),以减小镜像大小和攻击面。Ephemeral Containers 通过提供预配置的丰富调试工具环境,解决了这一限制,非常适合以下场景:
- 故障诊断:当主应用容器出现问题(如意外崩溃、性能下降、网络连接异常)时,除了查看标准的 Pod 事件和日志外,通常需要在 Pod 的运行时环境中进行更深入的交互式排查。
- 配置调优与试验:如果当前应用配置表现不佳,可能希望临时调整组件设置或测试新配置,直接在运行中的容器内观察即时效果并制定改进方案。
实现原理:利用 Ephemeral Containers
调试功能是通过 Ephemeral Containers 实现的。Ephemeral Container 是一种专门用于内省和调试的特殊容器。它与现有的主容器共享 Pod 的网络命名空间和进程命名空间(如果启用),可以直接与应用进程交互和观察。
你可以动态地向运行中的 Pod 添加一个 Ephemeral Container(例如 my-app-debug),并使用其预装的调试工具。该 Ephemeral Container 的诊断结果与同一 Pod 内主应用 containers 的行为和状态直接相关。
:::Notes
* 不能通过直接修改 Pod 的静态清单(PodSpec)来添加 Ephemeral Container。Ephemeral Containers 功能设计用于动态注入运行中的 Pod,通常通过 API 调用(如 kubectl debug)实现。
* 通过 debug 功能创建的 **Ephemeral Containers** 不具备资源(CPU/内存)或调度保障(即不会阻塞 Pod 启动,也没有独立的 QoS 类别),且退出后不会自动重启。因此,避免在其中运行持久业务应用,仅限调试用途。
* 如果 Pod 所在的 Node 资源利用率高或接近资源耗尽,使用 debug 功能时需谨慎。即使 Ephemeral Container 资源占用极小,也可能在资源紧张时加剧 Pod 被驱逐的风险。
:::
使用 CLI 调试 Ephemeral Containers
Kubernetes 1.25+ 提供了 kubectl debug 命令来创建 ephemeral containers。此方法为调试提供了强大的命令行替代方案。
命令
示例:调试 my-nginx-pod 中的 nginx
-
首先,确保有一个 Pod 正在运行:
-
现在,在
my-nginx-pod中创建一个名为debugger的 ephemeral debug 容器,目标容器为nginx,使用busybox镜像:该命令会将你连接到 debugger ephemeral container 的 shell,你现在可以使用 busybox 工具调试
my-nginx-container。 -
查看附加到 Pod 的 ephemeral containers:
在输出中查找
Ephemeral Containers部分。
使用 Web 控制台调试 Ephemeral Containers
-
进入 Container Platform,在左侧边栏导航至 Workloads > Pods。
-
找到要查看的 Pod,点击 ⋮ > Debug。
-
选择 Pod 中要调试的具体容器。
-
(可选)如果界面提示需要 初始化(例如设置必要的调试环境),点击 Initialize。
INFO初始化 Debug 功能后,只要 Pod 未被重新创建,即可直接进入 Ephemeral Container(例如 Container A-debug)进行调试。
-
等待调试终端窗口准备就绪,然后开始调试操作。
提示:点击终端右上角的“命令查询”选项,可查看常用调试工具及其使用示例。INFO点击右上角的命令查询,查看常用工具及用法。
-
调试完成后,关闭终端窗口。
与 Containers 交互
你可以使用 kubectl exec 命令直接与运行中容器的内部实例交互,执行任意命令行操作。此外,Kubernetes 还提供了方便的文件上传和下载功能。
使用 CLI 与 Containers 交互
Exec
在 Pod 中的指定容器内执行命令(用于获取 shell、运行诊断命令等):
-
示例:进入
my-nginx-pod中nginx容器的 Bash shell -
示例:列出容器
/tmp目录下的文件
文件传输
-
从本地复制文件到 Pod 中的容器:
-
从 Pod 中的容器复制文件到本地:
使用 Web 控制台与 Containers 交互
通过 Applications 进入容器
你可以使用 kubectl exec 命令进入容器内部实例,在 Web 控制台窗口执行命令行操作。同时,可以通过文件传输功能方便地上传和下载容器内的文件。
-
进入 Container Platform,导航至左侧边栏的 Application > Applications。
-
点击 Application Name。
-
找到关联的工作负载(如 Deployment、StatefulSet),点击 EXEC,然后选择要进入的具体 Pod Name。接着选择 EXEC > Container Name。
-
输入要执行的命令。
-
点击 OK,进入 Web 控制台窗口,执行命令行操作。
-
点击 File Transfer。
- 输入 Upload Path,将本地文件上传到容器(例如测试用配置文件)。
- 输入 Download Path,将日志、诊断数据或其他文件从容器下载到本地进行分析。
通过 Pod 进入容器
-
进入 Container Platform,导航至 Workloads > Pods。
-
找到目标 Pod,点击其旁边的垂直省略号(⋮),选择 EXEC,然后选择该 Pod 中要进入的具体 Container Name。
-
输入要执行的命令。
-
点击 OK,进入 Web 控制台窗口,执行命令行操作。
-
点击 File Transfer。
- 输入 Upload Path,将本地文件上传到容器(例如测试用配置文件)。
- 输入 Download Path,将日志、诊断数据或其他文件从容器下载到本地进行分析。