一、背景:Kubernetes容器運行時演進史
自2020年Kubernetes 1.20版本宣布棄用Docker作為默認容器運行時以來,容器技術生態經歷了重大變革。作為CNCF畢業項目,Containerd憑借其輕量化架構、原生CRI支持和卓越性能表現,逐漸成為云原生時代的首選運行時。截至2025年,超過80%的生產級K8s集群已完成運行時升級,這場技術遷移浪潮背后的驅動力值得深入探究。
二、Containerd核心優勢解析
1. 架構精簡度對比
指標 | Docker | Containerd |
---|---|---|
守護進程數量 | 3 (Docker,containerd,runC) | 1 (containerd) |
內存占用 | 100MB+ | 30-50MB |
CRI調用鏈路 | 需Docker-shim轉換 | 原生支持 |
冷啟動時間 | 1.2s | 0.8s |
(數據來源:CNCF 2024容器運行時基準測試報告)
2. 關鍵技術優勢
原生CRI集成:消除Docker-shim帶來的性能損耗
資源占用優化:減少30%的節點內存開銷
安全增強:最小化攻擊面,符合NSA/CISA容器安全基線
鏡像管理革新:支持Stargz懶加載,加速大規模鏡像分發
三、生產環境遷移流程
說明:我們公司使用rancher來管理和搭建集群,rancher本身是不支持指定節點來滾動升級的,我們二開了rancher,增加了指定節點來升級節點kubelet、kube-proxy等組件
###下面打標簽都是在rancher的local集群進行,標簽對master節點不生效### 下面所有的nodes資源指的是 rancher的 crd ?nodes.management.cattle.io# 跳過升級節點,會阻塞整個集群的升級狀態,當集群升級時根據需求要逐漸刪除該label。所有nodes沒有這個label時,集群更新成功,狀態為正常qihoo.net/upgrade=false# nodes資源加上該標簽,會忽略帶標簽的節點,該label不回阻塞升級過程,其他節點更新完成功后,集群狀態會正常qihoo.net/upgrade=ignore
1. 遷移前準備
# 集群狀態備份: 通過rancher頁面,備份集群數據(集群狀態,etcd數據等)# 環境兼容性檢測?kubectl get nodes -o jsonpath='{.items[*].status.nodeInfo.containerRuntimeVersion}'?# 輸出預期結果應包含"Docker"標識?#安裝命令行工具crictl nerdctlwget http://xxxx.qihoo.net/kubernetes/crictlchmod?+x crictlmv?crictl /usr/bin/cat?<<EOF > /etc/crictl.yamlruntime-endpoint: unix:///run/containerd/containerd.sockimage-endpoint: unix:///run/containerd/containerd.socktimeout: 10debug: false?EOFwget http://xxx.qihoo.net/kubernetes/nerdctlchmod?+x nerdctlmv?nerdctl /usr/bin/# 集群需要升級containerd節點暫時先全部打上label#獲取nodeskubectl get nodes.management.cattle.io -n c-9vk5r#集群所有需要升級nodes節點打上暫停升級標簽kubectl label nodes.management.cattle.io -n c-xxxx ?m-xxxxxxxx qihoo.net/upgrade=false#集群中不需要升級的集群打上忽略標簽kubectl label nodes.management.cattle.io -n c-zv6zb ?m-xxxxxxx qihoo.net/upgrade=ignore
2. 升級master節點
# 把集群master節點的pod驅逐;確認相關系統組件的pod調度到其它機器并正常運行;?kubectl drain xxxxxx.qihoo.net?--ignore-daemonsets?--delete-local-data?--grace-period=0#更改containerd的/etc/containerd/config.toml配置文件并重啟containerd、docker等systemctl daemon-reloadsystemctl restart containerdsystemctl restart dockerdocker restart etcd service-sidekick?kube-apiserver?kube-controller-manager?kube-scheduler?kubelet kube-proxy# 重建master節點上的daemonset的podHOSTNAME=$(hostname)for?i?in?$(kubectl get pod?-A?-owide?|grep?${HOSTNAME}|awk?'{print $1"@"$2}')do? ns=$(echo?$i|awk?-F'@'?'{print $1}')? po=$(echo?$i|awk?-F'@'?'{print $2}')? kubectl delete po?-n${ns}?${po}?--forcedone
更改rancher中集群配置使用containerd
修改完成后,集群會升級master節點,等待master節點升級完成,原有的master上的ds的 pods 默認會重新創建;在重建過程中,對于一些 其他pod,可能需要人工干預去重建,然后在清理docker運行時下的殘留進程。
檢查master節點升級成功,確保上面的pod正常。
kubectl?get?nodes -o jsonpath='{.items[*].status.nodeInfo.containerRuntimeVersion}'
3. 按照滾動比例升級node節點
需要升級的節點先驅逐,然后刪除對應rancher nodes 資源的label,就開始升級
#驅逐節點
kubectl drain xxxxxx.qihoo.net?--ignore-daemonsets?--delete-emptydir-data?--grace-period=0?--force
# 更改containerd的/etc/containerd/config.toml配置文件并重啟containerd、docker等systemctl daemon-reloadsystemctl restart containerdsystemctl restart dockerdocker restart kubelet kube-proxy?nginx-proxy
# 刪除對應機器label,機器開始升級;注意更換 -n c-zv6zb ?m-3ba9e952bcfbkubectl label nodes.management.cattle.io?-n?c-zv6zb? m-3ba9e952bcfb?qihoo.net/upgrade-
# 等機器更新完成后,刪除機器上的daemonset的podHOSTNAME=$(hostname)for?i?in?$(kubectl get po?-A?-owide?|grep?${HOSTNAME}|awk?'{print $1"@"$2}')do? ns=$(echo?$i|awk?-F'@'?'{print $1}')? po=$(echo?$i|awk?-F'@'?'{print $2}')? kubectl delete po?-n${ns}?${po}?--forcedone
# 查看 node 運行時為 containerd
四、企業級實踐案例
案例:公司遷移成效
指標 | 遷移前(Docker) | 遷移后(Containerd) | 提升幅度 |
---|---|---|---|
Pod啟動延遲 | 2.3s | 1.1s | 52% |
節點內存占用 | 1.8GB | 1.2GB | 33% |
CI/CD流水線耗時 | 14分鐘 | 9分鐘 | 36% |
五、常見問題解決方案
Q1: 如何兼容遺留Docker命令?
# 安裝nerdctl增強工具?sudo containerd-rootless-setuptool.sh install?alias?docker=nerdctl
Q2: 鏡像存儲如何遷移?
# 導出Docker鏡像?docker?save myapp:v1 > myapp.tar?# 導入Containerd?nerdctl load -i myapp.tar
Q3: 監控體系如何適配?
推薦部署方案:
Prometheus + cAdvisor 2.8+(支持Containerd指標)
Grafana儀表盤ID 13105(Containerd專項監控模板)
六、未來演進方向
隨著2025年Kubernetes 1.30版本發布,容器運行時生態將迎來新變革:
WasmEdge集成:支持WebAssembly工作負載
硬件加速支持:NVIDIA Container Toolkit 3.0深度優化
統一鏡像規范:OCI Artifact全面普及
結語
容器運行時的升級不僅是技術組件的簡單替換,更是云原生架構持續進化的必經之路。選擇Containerd不僅意味著獲得性能提升,更是擁抱開放標準的戰略決策。建議結合自身技術棧,制定漸進式遷移計劃,充分利用CNCF生態工具鏈實現平滑過渡。
更多技術干貨,
請關注“360智匯云開發者”👇
360智匯云官網:https://zyun.360.cn(復制在瀏覽器中打開)
更多好用又便宜的云產品,歡迎試用體驗~
?添加工作人員企業微信👇,get更快審核通道+試用包哦~