ACK 1.33 版本預設使用containerd 2.1。containerd 2.1在鏡像安全、效能、穩定性方面均有所提升。本文介紹containerd 2.1的主要變更說明,包括功能特性變更、廢棄功能、廢棄API等。
功能特性
下文僅介紹主要功能特性,詳細資料請參見containerd發布記錄。
支援NRI (Node Resource Interface) 能力,已在containerd配置中預設啟用。
支援CDI (Container Device Interface) 能力,已在containerd配置中預設啟用。
支援Sandbox API。
廢棄功能和API
下文僅介紹主要廢棄功能和API,詳細資料請參見containerd發布記錄
廢棄配置 registry.auths、registry.configs、registry.mirrors。建議參見自訂節點池containerd配置,通過控制台自訂containerd參數。
不再支援Docker Schema 1鏡像,例如
application/vnd.docker.distribution.manifest.v1+json或application/vnd.docker.distribution.manifest.v1+prettyjws,拉取時會被拒絕。請參見識別Docker Schema 1鏡像進行識別。io_uring_*從containerd的預設Seccomp設定檔中移除。容器預設沒有許可權進行io_uring_*系統調用。移除CRI v1alpha2 API。Kubernetes自1.26起開始棄用該API,containerd 2.1隨之同步移除。
移除AUFS snapshotter。
移除
[plugins."io.containerd.internal.v1".tracing]配置項。
升級注意事項
containerd 2.1不再支援CRI v1alpha2 API。如依賴該版本API,需切換至CRI v1版本API以確保相容性。
建議在升級前參見識別廢棄 API進行自檢。您也可以在叢集資訊頁面的左側導覽列,選擇營運管理 > 叢集升級,觸發前置檢查以完成自動檢查。
升級過程中,系統會進行廢棄 API 檢測,若檢測到使用棄用 API,升級過程將中斷。
識別廢棄 API
使用 kubectl
參見以下代碼,檢查叢集下是否有Pod掛載了containerd 相關目錄。
需提前安裝kubectl和jq命令列工具。jq可通過yum install jq命令安裝。kubectl get pods --all-namespaces -o json |
jq -r '.items[] |
select(.spec.volumes[]?.hostPath.path as $p |
["/", "/var", "/var/","/var/run", "/var/run/",
"/var/run/containerd", "/var/run/containerd/",
"/var/run/containerd/containerd.sock",
"/run", "/run/", "/run/containerd", "/run/containerd/",
"/run/containerd/containerd.sock"] | index($p)) |
.metadata.namespace + "/" + .metadata.name'使用ctr
若當前 containerd 執行個體中存在已棄用的 API,執行ctr deprecations list命令將列出所有廢棄API。
ctr deprecations list識別Docker Schema 1鏡像
ctr --namespace k8s.io images list 'labels."io.containerd.image/converted-docker-schema1"'升級方式
升級至 containerd 2.1 前,請先參見手動升級叢集將叢集控制面版本升級至1.33及以上版本,然後參見升級節點池升級容器運行時版本。
FAQ
升級過程中,業務是否會受影響?
請參見升級節點池完成containerd版本的升級。通過此方式升級時,預設採取原地升級,容器不會重啟,業務可正常運行。
從containerd 1.6升級至containerd 2.1後還支援回退嗎?
不支援回退。containerd 2.1 版本引入了 shim-v3 API,不支援回退至 containerd 1.6 的 shim-v2 API。
將containerd 1.6升級至containerd 2.1的過程中,節點資料會丟失嗎?
參見升級節點池升級containerd時預設採取原地升級,containerd 2.1 仍舊使用原資料目錄,不會丟失。