臨時容器
特性狀態:
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)