临时容器

功能状态: Kubernetes v1.25 [稳定]

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

了解短暂容器

Pod 是 Kubernetes 应用程序的基本构建块。由于 Pod 旨在一次性且可替换,因此无法在 Pod 创建后向其添加容器。相反,您通常使用 部署 以受控方式删除和替换 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)