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