临时容器
特性状态:
Kubernetes v1.25 [stable]
此页面概述了临时容器(ephemeral containers):这是一种特殊类型的容器,暂时运行在现有 Pod 中,用于完成用户发起的操作,例如故障排除。你使用临时容器来检查服务,而不是构建应用。
理解临时容器
Pod 是 Kubernetes 应用的基本构建块。由于 Pod 旨在一次性使用和可替换,因此一旦创建 Pod,就不能再向其中添加容器。相反,你通常使用 Deployment 以受控的方式删除和替换 Pod。
然而,有时需要检查现有 Pod 的状态,例如排查难以重现的 Bug。在这些情况下,你可以在现有 Pod 中运行临时容器来检查其状态并运行任意命令。
什么是临时容器?
临时容器与其他容器不同,它们缺乏资源或执行的保证,并且绝不会自动重启,因此不适合用于构建应用。临时容器使用与常规容器相同的 ContainerSpec
进行描述,但许多字段对于临时容器而言是不兼容或不允许的。
- 临时容器可能没有端口,因此
ports
、livenessProbe
、readinessProbe
等字段是不允许的。 - Pod 资源分配是不可变的,因此不允许设置
resources
。 - 有关允许字段的完整列表,请参阅EphemeralContainer 参考文档。
临时容器是使用 API 中特殊的 ephemeralcontainers
处理程序创建的,而不是直接添加到 pod.spec
中,因此无法使用 kubectl edit
添加临时容器。
与常规容器一样,将临时容器添加到 Pod 后,不能更改或移除它。
注意
静态 Pod 不支持临时容器。临时容器的用途
当容器崩溃或容器镜像不包含调试工具导致 kubectl exec
不够用时,临时容器对于交互式故障排除非常有用。
特别是,精简镜像 (distroless images) 使你能够部署最小化的容器镜像,从而减少攻击面和暴露于 Bug 和漏洞的风险。由于精简镜像不包含 shell 或任何调试工具,因此仅使用 kubectl exec
很难对精简镜像进行故障排除。
使用临时容器时,启用进程命名空间共享会很有帮助,这样你可以查看其他容器中的进程。
下一步
- 了解如何使用临时容器调试 Pod。
上次修改时间:2024 年 1 月 18 日下午 8:01 PST:改进 Pod 文档 (2b4b4b4e66)