临时容器
特性状态:
Kubernetes v1.25 [稳定]
本页面概述了临时容器:一种特殊的容器类型,它在现有的Pod中临时运行,以完成用户发起的诸如故障排除等操作。你使用临时容器来检查服务,而不是构建应用程序。
理解临时容器
Pod 是 Kubernetes 应用程序的基本构建块。 由于 Pod 旨在可丢弃和可替换,因此一旦创建 Pod,就无法向其中添加容器。 相反,你通常使用部署以受控方式删除和替换 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)