本文轉(zhuǎn)自Rancher Labs
近期忧勿,Kubernetes在其最新的Changelog中宣布补胚,自Kubernetes 1.20之后將棄用Docker作為容器運行時蒂教。這一消息在云原生領(lǐng)域激起了不小的水花,在Rancher技術(shù)社區(qū)里許多小伙伴也對此進行了激烈的討論畴嘶。
Kubernetes為什么選擇棄用Docker呢蛋逾?我們需要先簡單了解Dockershim。它是一個橋接服務(wù)掠廓,幫助Kubernetes與Docker進行通信换怖,Kubelet 之前使用 dockershim 實現(xiàn)對 Docker 的 CRI 支持(Docker本身目前尚未實現(xiàn)CRI)。但時至今日蟀瞧,維護Dockershim已成為運維/開發(fā)人員的沉重負擔沉颂。因此Kubernetes社區(qū)建議大家考慮使用包含 CRI 完整實現(xiàn)(兼容 v1alpha1 或 v1)的可用容器運行時。從而取消了對Docker作為容器運行時的支持悦污。
不過大家不必過分擔心铸屉,近期從Rancher社區(qū)里面搜集了一些大家比較關(guān)注的問題,下面一一為大家解答:
1切端、Kubernetes Kubelet 棄用了Docker作為容器運行時彻坛,有代替方案嗎?
在Kubernetes集群中踏枣,容器運行時負責提取和運行容器鏡像昌屉。Docker只是被普遍使用的容器運行時,在Docker被棄用之后茵瀑,我們還有兩個常見的選項:containerd 和 CRI-O间驮。
Containerd 是一個工業(yè)級標準的容器運行時,它極為簡單马昨、健壯并且具備可移植性竞帽。Containerd 可以在宿主機中管理完整的容器生命周期扛施。這是一個100%開源的軟件,已于去年2月份從CNCF畢業(yè)屹篓。
去年年初疙渣,Rancher推出的輕量級Kubernetes發(fā)行版K3s已經(jīng)使用containerd作為默認容器運行時。
containerd:https://github.com/containerd/containerd/
CRI-O是由Red Hat推出的一款容器運行時堆巧,旨在提供一種在OCI一致的運行時和Kubelet之間的集成方式妄荔。在文章后半部分我們將會進一步對比containerd和CRI-O的性能,為您在選擇容器運行時的時候提供參考恳邀。
CRI-O:https://github.com/cri-o/cri-o
2懦冰、我仍然可以在Kubernetes 1.20中使用Docker嗎?
是的谣沸,如果使用Docker作為運行時,在1.20中只會在Kubelet啟動時打印一個警告日志笋颤。Kubernetes最早將在2021年末發(fā)布1.23版本中將dockershim移除乳附。
3、我現(xiàn)有的Docker鏡像仍然可以使用嗎伴澄?
仍然可以使用赋除。Docker生成的鏡像實際上并不是特定于Docker的鏡像,而是OCI(Open Container Initiative)鏡像非凌。無論你使用什么工具構(gòu)建鏡像举农,任何符合OCI標準的鏡像在Kubernetes看來都是一樣的。containerd和CRI-O都能夠提取這些鏡像并運行它們敞嗡。所以您可以仍然使用Docker來構(gòu)建容器鏡像颁糟,并且可以繼續(xù)在containerd和CRI-O上使用。
4喉悴、我應(yīng)該使用哪個CRI實現(xiàn)棱貌?
這是一個比較復(fù)雜的問題,它取決于許多因素箕肃。如果您之前熟練使用Docker婚脱,那么遷移到containerd應(yīng)該是一個相對容易的選擇,并且containerd具有更好的性能和更低的成本勺像。當然障贸,您也可以探索CNCF領(lǐng)域中的其他項目,來選擇更適合您的環(huán)境吟宦。
來源:https://kubernetes.io/blog/2020/12/02/dockershim-faq/#which-cri-implementation-should-i-use
eBay對containerd和CRI-O進行了一組性能測試篮洁,包括創(chuàng)建、啟動督函、停止和刪除容器嘀粱,以比較它們所耗的時間激挪。如圖所示,containerd在各個方面都表現(xiàn)良好锋叨,除了啟動容器這項垄分。從總用時來看,containerd的用時比cri-o要短娃磺。
以下數(shù)據(jù)來自eBay的分享:
Rancher锅很,阿里云,AWS布疙, Google姆钉,IBM和Microsoft作為初始成員,共同建設(shè) containerd 社區(qū)听诸。2017年3月坐求,Docker 將 containerd 捐獻給CNCF(云原生計算基金會)。containerd得到了快速的發(fā)展和廣泛的支持晌梨。Docker引擎已經(jīng)將containerd作為容器生命周期管理的基礎(chǔ)桥嗤,Kubernetes也在2018年5月,正式支持containerd作為容器運行時管理器仔蝌。2019年2月泛领,CNCF宣布containerd畢業(yè),成為生產(chǎn)可用的項目敛惊,更加穩(wěn)定渊鞋。
5、Rancher 對 Containerd 的支持
Rancher 在輕量級Kubernetes發(fā)行版 K3s和 RKE2(2020年10月推出)中早已將 containerd 作為默認的容器運行時瞧挤。相信在 Rancher 2.x 支持 Kubernetes 1.20+ 之后會將這些寶貴經(jīng)驗運用到新版本的Rancher 2.x 迭代中锡宋。
其實Kubernetes棄用Docker這一決定已經(jīng)醞釀很長時間了,可能對于沒有密切關(guān)注這個方面的工程師來說有些措手不及皿伺。但其實無需特別擔心:如果你是Kubernetes的終端用戶员辩,這僅僅是一個后端容器運行時的更改,從使用方面來說幾乎感覺不到區(qū)別鸵鸥;如果你是一名開發(fā)/運維人員奠滑,你依舊可以繼續(xù)使用Docker來構(gòu)建鏡像,以相同的方式將鏡像推送到Registry妒穴,并且將這些鏡像部署到你的Kubernetes中宋税;如果你是運行和操作集群的用戶,你只需要將Docker切換成你需要的容器運行時即可讼油。