本頁面提供 containerd 的相關資訊。所有節點映像檔都會使用這項服務,做為 Google Kubernetes Engine (GKE) 節點中的容器執行階段。
關於 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 精靈會以名為 containerd 的 Windows 服務形式執行。
記錄檔的提供方式如下:
- Windows:
C:\etc\kubernetes\logs\containerd.log - Linux:執行
journalctl -u containerd
您也可以在 Logs Explorer 的 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 設定。