本文轉(zhuǎn)載自: https://mp.weixin.qq.com/s/Qvw5cszN7JCy4Iiq-G_BZA
在1.20版本之后食零,Kubernetes將不再支持把Docker作為容器運行時使用菊霜。不必驚慌煌寇,實際上沒多大影響疮鲫。****摘要:這里只是不建議將Docker作為底層運行時婉弹,你仍然可以使用專為Kubernetes創(chuàng)建的容器運行時接口(CRI)一如既往地在集群中運行Docker鏡像荒叶。對于Kubernetes最終用戶豪筝,此次調(diào)整同樣不會有太大影響惋嚎。Docker不會就此消亡杠氢,你也仍然可以繼續(xù)將Docker作為開發(fā)工具使用。Docker會繼續(xù)構(gòu)建起不計其數(shù)的容器另伍,而運行docker build命令所生成的鏡像仍可在Kubernetes集群內(nèi)正常運行鼻百。如果你使用的是GKE或者EKS等托管Kubernetes服務(wù),則需要確保在未來的Kubernetes版本徹底去除Docker支持之前摆尝,為你的工作節(jié)點引入受支持的容器運行時温艇。如果節(jié)點中包含自定義項,你可能需要根據(jù)當(dāng)前環(huán)境及運行時要求做出更新堕汞。請與服務(wù)供應(yīng)商合作勺爱,確保正確完成升級測試及規(guī)劃。如果你的集群一直在滾動擴展讯检,則需要配合變量以避免服務(wù)中斷琐鲁。在1.20版本中,你將收到Docker棄用警告人灼。而在未來的Kubernets版本(計劃在2021年下半年發(fā)布的1.23版本)中围段,Docker運行時將被徹底移除、不再受到支持投放,屆時您必須切換至其他兼容的容器運行時奈泪,例如containerd或者CRI-O。只需要保證你所選定的運行時,能夠支持當(dāng)前使用的Docker守護程序配置即可(例如日志記錄)段磨。既然問題不大取逾,人們在慌什么耗绿?在怕什么苹支?
這里我們需要探討兩種不同的環(huán)境,而這也是恐慌情緒的根源误阻。首先债蜜,在Kubernetes集群內(nèi)部存在一種叫作容器運行時的東西,負責(zé)提取并運行容器鏡像究反。Docker是目前最流行的運行時選項(其他常見選項還包括containerd與CRI-O)寻定。但Docker在設(shè)計上并未考慮到被嵌入Kubernetes這種用法,所以可能引發(fā)問題精耐。很明顯狼速,這里我們提到的“Docker”并不是同一種東西——它代表著一整套技術(shù)棧,而containerd高級容器運行時則是Docker中的一部分卦停。Docker很酷向胡、實用性極強,提供多種用戶體驗增強功能惊完,讓我們能夠在開發(fā)過程中輕松完成協(xié)同交互僵芹。但是,用戶體驗增強功能對Kubernetes來說并非必需小槐,因為Kubernetes并不是什么人類協(xié)作方拇派。結(jié)果就是,要想讓containerd這個人類友好型抽象層發(fā)揮作用凿跳,Kubernetes集群就必須引入另一款名為Dockershimi的工具件豌。但這款工具的介入又引發(fā)了新的問題,因為我們必須額外加以維護控嗜,否則就可能引發(fā)安全問題苟径。事實上,Dockershim早在Kubelet 1.23版本時就已經(jīng)被移除躬审,或者說Kubelet很早就取消了將Docker作為容器運行時的功能棘街。這時候很多朋友可能要問,既然Docker棧中已經(jīng)包含containerd承边,Kubernetes為什么還要畫蛇添足地搞出個Dockershim遭殉?這是因為Docker與CRI(即容器運行時接口)并不相容。正是因為不相容博助,所以我們才需要Dockershim來緩沖一下险污。但這不是什么大問題,各位沒必要驚慌——這件事的本質(zhì),就是把容器運行時從Docker轉(zhuǎn)換為另一種受支持的選項蛔糯。這里需要注意的是:如果大家將底層Docker套接字(/var/run/docker.sock)設(shè)定為集群工作流中的一部分拯腮,那么轉(zhuǎn)換至其他運行時會破壞掉當(dāng)前業(yè)務(wù)的正常運行。這種模式稱為Docker in Docker蚁飒,好在我們可以使用多種選項解決這個特定用例动壤,包括Kaniko、Img以及Buildah等等淮逻。但這種變化對開發(fā)者意味著什么琼懊?我們還需要編寫Dockerfiles嗎?未來還應(yīng)不應(yīng)該繼續(xù)使用Docker爬早?
請注意哼丈,本次變更所影響到的環(huán)境,其實跟大多數(shù)人用于進行Docker交互的環(huán)境并不是一回事筛严。你在開發(fā)中使用的Docker安裝醉旦,與Kubernetes集群中的Docker運行時毫無關(guān)系。我知道桨啃,這事聽起來讓人有點犯迷糊车胡。總之优幸,對于開發(fā)人員吨拍,Docker在公布此次更改之前提供的所有方案都仍然適用。Docker生成的鏡像實際上并不特定于Docker网杆,更準確地說它應(yīng)該屬于OCI(開放容器倡議)鏡像羹饰。任何與OCI相兼容的鏡像,無論使用哪種工具構(gòu)建而成碳却,對于Kubernetes來說都是一樣的队秩。Containerd與CRI-O都能識別這些鏡像并正常運行,這也是我們建立一套統(tǒng)一容器標準的意義所在昼浦。因此馍资,雖然變化即將到來,雖然會給部分用戶帶來麻煩关噪,但影響并不算大鸟蟹。而且從長遠角度看,這其實是件好事使兔〗ㄔ浚總而言之,希望大家放下抵觸和恐慌情緒虐沥,坦然接受這個變化熊经。原文鏈接:https://kubernetes.io/blog/2020/12/02/dont-panic-kubernetes-and-docker/