臨時容器

功能狀態: Kubernetes v1.25 [stable]

本頁概述了臨時容器:一種特殊類型的容器,可在現有的 Pod 中暫時執行,以完成使用者啟動的操作,例如疑難排解。您可以使用臨時容器來檢查服務,而不是建置應用程式。

瞭解臨時容器

Pod 是 Kubernetes 應用程式的基本建構區塊。由於 Pod 的設計目的是可拋棄和可替換的,因此一旦建立 Pod,就無法在其中新增容器。相反地,您通常會使用部署,以受控方式刪除和替換 Pod。

然而,有時需要檢查現有 Pod 的狀態,例如,為了疑難排解難以重現的錯誤。在這些情況下,您可以在現有的 Pod 中執行臨時容器,以檢查其狀態並執行任意命令。

什麼是臨時容器?

臨時容器與其他容器的不同之處在於,它們缺乏資源或執行的保證,並且永遠不會自動重新啟動,因此它們不適用於建置應用程式。臨時容器使用與常規容器相同的 ContainerSpec 進行描述,但許多欄位不相容且不允許用於臨時容器。

  • 臨時容器可能沒有埠,因此不允許使用諸如 portslivenessProbereadinessProbe 等欄位。
  • Pod 資源分配是不可變的,因此不允許設定 resources
  • 如需允許欄位的完整清單,請參閱EphemeralContainer 參考文件

臨時容器是使用 API 中特殊的 ephemeralcontainers 處理常式建立的,而不是直接將它們新增到 pod.spec,因此無法使用 kubectl edit 新增臨時容器。

與常規容器一樣,在將臨時容器新增到 Pod 後,您可能無法變更或移除它。

臨時容器的用途

kubectl exec 不足時,臨時容器對於互動式疑難排解很有用,因為容器已當機或容器映像檔未包含偵錯工具。

特別是,無發行版本映像檔 (distroless images) 讓您能夠部署最小化的容器映像檔,以減少攻擊面以及暴露於錯誤和漏洞的風險。由於無發行版本映像檔不包含 Shell 或任何除錯工具,因此很難單獨使用 kubectl exec 來對無發行版本映像檔進行疑難排解。

當使用臨時容器時,啟用程序命名空間共享會很有幫助,這樣您就可以檢視其他容器中的程序。

下一步

上次修改時間:2024年1月18日下午 8:01 PST:Improve docs for Pods (2b4b4b4e66)