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