Kubernetes棄用Docker后怎么辦?
近期,Kubernetes在其最新的Changelog中宣布,自Kubernetes 1.20之后將棄用Docker作為容器運(yùn)行時。這一消息在云原生領(lǐng)域激起了不小的水花,在Rancher技術(shù)社區(qū)里許多小伙伴也對此進(jìn)行了激烈的討論。
Kubernetes為什么選擇棄用Docker呢?我們需要先簡單了解Dockershim。它是一個橋接服務(wù),幫助Kubernetes與Docker進(jìn)行通信,Kubelet 之前使用 dockershim 實(shí)現(xiàn)對 Docker 的 CRI 支持(Docker本身目前尚未實(shí)現(xiàn)CRI)。但時至今日,維護(hù)Dockershim已成為運(yùn)維/開發(fā)人員的沉重負(fù)擔(dān)。因此Kubernetes社區(qū)建議大家考慮使用包含 CRI 完整實(shí)現(xiàn)(兼容 v1alpha1 或 v1)的可用容器運(yùn)行時。從而取消了對Docker作為容器運(yùn)行時的支持。
不過大家不必過分擔(dān)心,近期從Rancher社區(qū)里面搜集了一些大家比較關(guān)注的問題,下面一一為大家解答:
1、Kubernetes Kubelet 棄用了Docker作為容器運(yùn)行時,有代替方案嗎?
在Kubernetes集群中,容器運(yùn)行時負(fù)責(zé)提取和運(yùn)行容器鏡像。Docker只是被普遍使用的容器運(yùn)行時,在Docker被棄用之后,我們還有兩個常見的選項(xiàng):containerd 和 CRI-O。
Containerd 是一個工業(yè)級標(biāo)準(zhǔn)的容器運(yùn)行時,它極為簡單、健壯并且具備可移植性。Containerd 可以在宿主機(jī)中管理完整的容器生命周期。這是一個100%開源的軟件,已于去年2月份從CNCF畢業(yè)。
去年年初,Rancher推出的輕量級Kubernetes發(fā)行版K3s已經(jīng)使用containerd作為默認(rèn)容器運(yùn)行時。
containerd:https://github.com/containerd/containerd/
CRI-O是由Red Hat推出的一款容器運(yùn)行時,旨在提供一種在OCI一致的運(yùn)行時和Kubelet之間的集成方式。在文章后半部分我們將會進(jìn)一步對比containerd和CRI-O的性能,為您在選擇容器運(yùn)行時的時候提供參考。
CRI-O:https://github.com/cri-o/cri-o
2、我仍然可以在Kubernetes 1.20中使用Docker嗎?
是的,如果使用Docker作為運(yùn)行時,在1.20中只會在Kubelet啟動時打印一個警告日志。Kubernetes最早將在2021年末發(fā)布1.23版本中將dockershim移除。
3、我現(xiàn)有的Docker鏡像仍然可以使用嗎?
仍然可以使用。Docker生成的鏡像實(shí)際上并不是特定于Docker的鏡像,而是OCI(Open Container Initiative)鏡像。無論你使用什么工具構(gòu)建鏡像,任何符合OCI標(biāo)準(zhǔn)的鏡像在Kubernetes看來都是一樣的。containerd和CRI-O都能夠提取這些鏡像并運(yùn)行它們。所以您可以仍然使用Docker來構(gòu)建容器鏡像,并且可以繼續(xù)在containerd和CRI-O上使用。
4、我應(yīng)該使用哪個CRI實(shí)現(xiàn)?
這是一個比較復(fù)雜的問題,它取決于許多因素。如果您之前熟練使用Docker,那么遷移到containerd應(yīng)該是一個相對容易的選擇,并且containerd具有更好的性能和更低的成本。當(dāng)然,您也可以探索CNCF領(lǐng)域中的其他項(xiàng)目,來選擇更適合您的環(huán)境。
來源:https://kubernetes.io/blog/202 ... i-use
eBay對containerd和CRI-O進(jìn)行了一組性能測試,包括創(chuàng)建、啟動、停止和刪除容器,以比較它們所耗的時間。如圖所示,containerd在各個方面都表現(xiàn)良好,除了啟動容器這項(xiàng)。從總用時來看,containerd的用時比cri-o要短。
以下數(shù)據(jù)來自eBay的分享:
Rancher,阿里云,AWS, Google,IBM和Microsoft作為初始成員,共同建設(shè) containerd 社區(qū)。2017年3月,Docker 將 containerd 捐獻(xiàn)給CNCF(云原生計(jì)算基金會)。containerd得到了快速的發(fā)展和廣泛的支持。Docker引擎已經(jīng)將containerd作為容器生命周期管理的基礎(chǔ),Kubernetes也在2018年5月,正式支持containerd作為容器運(yùn)行時管理器。2019年2月,CNCF宣布containerd畢業(yè),成為生產(chǎn)可用的項(xiàng)目,更加穩(wěn)定。
5、Rancher 對 Containerd 的支持
Rancher 在輕量級Kubernetes發(fā)行版 K3s和 RKE2(2020年10月推出)中早已將 containerd 作為默認(rèn)的容器運(yùn)行時。相信在 Rancher 2.x 支持 Kubernetes 1.20+ 之后會將這些寶貴經(jīng)驗(yàn)運(yùn)用到新版本的Rancher 2.x 迭代中。
其實(shí)Kubernetes棄用Docker這一決定已經(jīng)醞釀很長時間了,可能對于沒有密切關(guān)注這個方面的工程師來說有些措手不及。但其實(shí)無需特別擔(dān)心:如果你是Kubernetes的終端用戶,這僅僅是一個后端容器運(yùn)行時的更改,從使用方面來說幾乎感覺不到區(qū)別;如果你是一名開發(fā)/運(yùn)維人員,你依舊可以繼續(xù)使用Docker來構(gòu)建鏡像,以相同的方式將鏡像推送到Registry,并且將這些鏡像部署到你的Kubernetes中;如果你是運(yùn)行和操作集群的用戶,你只需要將Docker切換成你需要的容器運(yùn)行時即可。