本頁面提供相關資訊,說明在 Google Kubernetes Engine (GKE) 節點中,使用 containerd 做為容器執行階段的節點映像檔。
關於 containerd
容器執行階段是負責執行容器的軟體,並為 Kubernetes 抽象化容器管理作業。容器執行階段有幾種。
containerd 執行階段是 Kubernetes 支援的業界標準容器執行階段,許多其他專案也使用這項執行階段。containerd 執行階段提供分層抽象化功能,可實作豐富的功能集,例如 gVisor 和映像檔串流,以擴充 GKE 功能。
相較於 Docker 執行階段,containerd 執行階段的資源效率更高,也更安全。
在 GKE 叢集中使用 Containerd 映像檔
建立新的 GKE 叢集、現有叢集中的新節點集區,或升級現有叢集時,您可以選擇使用 containerd 節點映像檔。GKE Autopilot 叢集一律使用 Container-Optimized OS (含 containerd)。
下表說明根據叢集模式和節點集區 OS 支援的 containerd 節點映像檔:
叢集模式 | 節點集區 OS | 節點映像檔 |
---|---|---|
Autopilot | Linux | cos_containerd |
標準 | Linux |
|
標準 | Windows Server |
這些映像檔需要 GKE 1.21.1-gke.2200 以上版本。 |
使用具備權限的 Pod 存取 Docker
如果使用者透過具備特殊權限的 Pod 存取節點上的 Docker Engine,您應更新這些工作負載,確保工作負載不會直接依附於 Docker。舉例來說,您可以考慮將記錄和監控擷取程序從 Docker Engine 遷移至 GKE 系統外掛程式。
使用 containerd 建構容器映像檔
您無法使用 containerd 建構容器映像檔。搭載 containerd 的 Linux 映像檔包含 Docker 二進位檔,因此您可以使用 Docker 建構及推送映像檔。不過,我們不建議使用個別容器和本機節點執行指令來建構映像檔。
Kubernetes 不會得知 Kubernetes 範圍外的本機處理程序所用的系統資源,而且 Kubernetes 控制層在分配資源時無法計入這些處理程序。這可能會導致 GKE 工作負載資源不足,或節點不穩定。
請考慮改用個別容器範圍外的其他服務 (例如 Cloud Build) 來完成這些工作,或使用 kaniko 之類的工具,以 Kubernetes 工作負載的形式建構映像檔。
如果上述建議都不適用,且您瞭解相關風險,可以繼續在本機節點上使用 Docker 建構映像檔。您必須先將映像檔推送至登錄檔,才能在 GKE 叢集中使用。Kubernetes with containerd 不會得知在本機建構的 Docker 映像檔。
在 containerd 節點上偵錯容器
如要針對 Linux 節點進行偵錯或疑難排解,您可以利用專為 Kubernetes 容器執行階段建構的可攜式指令列工具 (crictl
) 與 Containerd 互動。crictl
支援檢視容器和映像檔、讀取記錄檔,以及在容器中執行指令等常用功能。如需完整的支援功能和使用資訊,請參閱 crictl 使用手冊。
如果是 Windows Server 節點,containerd daemon 會以名為 containerd
的 Windows 服務執行。
記錄的適用範圍如下:
- Windows:
C:\etc\kubernetes\logs\containerd.log
- Linux:執行
journalctl -u containerd
您也可以在 LOG NAME: "container-runtime"
下方的記錄檔探索工具中,查看 Windows 和 Linux 節點的記錄。
已知問題和疑難排解
如要排解問題及瞭解已知問題的解決方法,請參閱「排解容器執行階段問題」。
後續步驟
- 如要進一步瞭解 containerd 整合,請參閱 Kubernetes 1.11 公告。 如需更多資訊,請參閱 containerd 和 CRI 外掛程式的說明文件。
- 請參閱 kubernetes.io 上的 Dockershim 遷移作業資訊。
- 請參閱 Kubernetes 淘汰 Dockershim 的相關說明。
- 瞭解如何透過 containerd 上的 gVisor 保護應用程式。
- 瞭解使用 Cloud Build 在 Google Cloud 上安全可靠地建構映像檔的優點,取代可能需要 Docker 的自訂解決方案。
- 在 GKE 節點中自訂 containerd 設定。