临时容器

特性状态: Kubernetes v1.25 [稳定]

本页面概述了临时容器:一种特殊类型的容器,它在现有的 Pod 中临时运行,用于完成用户发起的操作,例如故障排除。您使用临时容器来检查服务,而不是构建应用程序。

了解临时容器

Pod 是 Kubernetes 应用程序的基本构建块。由于 Pod 旨在可丢弃和可替换,因此您无法在创建 Pod 后向其中添加容器。相反,您通常使用 Deployment 以受控方式删除和替换 Pod。

但是,有时需要检查现有 Pod 的状态,例如,为了解决难以重现的错误。在这些情况下,您可以在现有 Pod 中运行临时容器以检查其状态并运行任意命令。

什么是临时容器?

临时容器与其他容器的不同之处在于,它们缺乏对资源或执行的保证,并且它们永远不会自动重启,因此它们不适合构建应用程序。临时容器使用与常规容器相同的 ContainerSpec 进行描述,但许多字段不兼容且不允许用于临时容器。

  • 临时容器可能没有端口,因此不允许使用 portslivenessProbereadinessProbe 等字段。
  • Pod 资源分配是不可变的,因此不允许设置 resources
  • 有关允许字段的完整列表,请参阅 EphemeralContainer 参考文档

临时容器是使用 API 中特殊的 ephemeralcontainers 处理程序创建的,而不是通过将它们直接添加到 pod.spec 中创建的,因此无法使用 kubectl edit 添加临时容器。

与常规容器一样,您在将临时容器添加到 Pod 后,不能更改或删除它。

临时容器的用途

kubectl exec 不足以解决问题时(例如,容器已崩溃或容器镜像不包含调试实用程序),临时容器对于交互式故障排除非常有用。

特别是,distroless 镜像 使您能够部署最小的容器镜像,从而减少攻击面和暴露于错误和漏洞的风险。由于 distroless 镜像不包含 shell 或任何调试实用程序,因此仅使用 kubectl exec 很难对 distroless 镜像进行故障排除。

使用临时容器时,启用 进程命名空间共享 会很有帮助,这样您就可以查看其他容器中的进程。

下一步

上次修改时间:2024 年 1 月 18 日下午 8:01 PST:改进 Pod 文档 (2b4b4b4e66)