临时容器

特性状态: 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)