K8S工作節(jié)點(diǎn)的演變:由Docker到CRI-O
K8S工作節(jié)點(diǎn)的演變:由Docker到CRI-O
隨著K8S的崛起,OCI的推出,容器和云架構(gòu)逐漸發(fā)展完善,一個(gè)純開源的、社區(qū)的,完美的和高效的容器生態(tài)體系正在形成和在各個(gè)企業(yè)生產(chǎn)環(huán)境中使用。而生態(tài)體系中最重要的一環(huán)就是其Node,工作節(jié)點(diǎn)的演變,本文我們我說(shuō)說(shuō)K8S工作節(jié)點(diǎn)的演變和OCI標(biāo)準(zhǔn)下生態(tài)體系。
工作節(jié)點(diǎn)的演化
我們回顧一下K8S體系架構(gòu)的發(fā)展,其中工作節(jié)點(diǎn)的運(yùn)行時(shí)容器的已經(jīng)發(fā)了重大的變化和調(diào)優(yōu),有以Docker為主導(dǎo)的容器發(fā)展成了有OCI標(biāo)準(zhǔn)的的CRI-O工具鏈形式。

docker主導(dǎo)
該階段主要以簡(jiǎn)單的kubelet體系結(jié)構(gòu)作為工作節(jié)點(diǎn)代理開始,作為工作節(jié)點(diǎn)代理通過(guò)api-server從主節(jié)點(diǎn)接收來(lái)管理的命令。Kubelet使用Docker運(yùn)行時(shí)來(lái)啟動(dòng)Docker容器(包括從注冊(cè)表中拉鏡像)。

CRI(容器運(yùn)行時(shí)接口)
容器運(yùn)行時(shí)接口(CRI)規(guī)范是在K8s 1.5中引入的。CRI規(guī)范還包括協(xié)議緩沖區(qū),gRPC API和庫(kù)。通過(guò)在kubelet中運(yùn)行的gRPC客戶端和在CRI Shim中運(yùn)行的gRPC服務(wù)器。該規(guī)范給K8S架構(gòu)體系帶來(lái)抽象層,并充當(dāng)了適配器。這允許以更簡(jiǎn)單的方式運(yùn)行各種容器運(yùn)行時(shí)。
這些功能分為2個(gè)層次:
- 高級(jí)別功能:鏡像管理,傳輸,鏡像解壓縮和API,發(fā)送命令來(lái)運(yùn)行容器,網(wǎng)絡(luò),存儲(chǔ)(例如:rkt,docker,LXC等)。
- 低級(jí)別功能: 運(yùn)行容器。
這些功能可以拆分獨(dú)立出各個(gè)部分來(lái),各個(gè)部分可以選用各種開源組件,并搭配成更合理更高效的組合。
OCI、CRI-O 和工具鏈生態(tài)
OCI(開放容器倡議)提出了明確的容器運(yùn)行時(shí)和鏡像規(guī)范,該規(guī)范有助于實(shí)現(xiàn)多平臺(tái)支持(Linux,Windows,VM等)。Runc是OCI的默認(rèn)實(shí)現(xiàn),它是容器運(yùn)行時(shí)的底層。代的容器運(yùn)行時(shí)基于該分層體系結(jié)構(gòu),其中Kubelet通過(guò)CRI-gRPC與容器運(yùn)行時(shí)進(jìn)行通信,而容器運(yùn)行時(shí)通過(guò)OCI運(yùn)行容器。CRI有多種實(shí)現(xiàn),例如Docker shim,CRI-O,containerD。
podman
無(wú)守護(hù)程序容器引擎,用于開發(fā)管理和運(yùn)行OCI容器,在一定程度上可以取代Docker CLI語(yǔ)言,可以docker命令大多數(shù)命令(RUN,PUSH,PULL等),甚至可以將其直接作為docker別名使用即可。
buildah
buuildah幫助構(gòu)建OCI鏡像的工具。用戶不必關(guān)注象鏡像的組成,也不用編寫復(fù)雜的Dockerfile。相反,可以一次只構(gòu)建一層鏡像,對(duì)其進(jìn)行測(cè)試,然后回滾(如果需要),知道滿意,然后提交它到注冊(cè)表。
skopeo

完整的容器管理CLI工具。skopeo功能之一就是可以直接在遠(yuǎn)程注冊(cè)表中無(wú)需下載或者解壓,就可以檢查鏡像。skopeo目前已經(jīng)發(fā)展成為用于遠(yuǎn)程注冊(cè)表的功能完善的鏡像管理工具,包括對(duì)鏡像進(jìn)行簽名,在注冊(cè)表之間復(fù)制并保持遠(yuǎn)程注冊(cè)表同步。這大大加快了容器構(gòu)建,管理和部署管道速度。
CRI-O
CRI-O提供了可在OCI標(biāo)準(zhǔn)下一致的運(yùn)行時(shí)和kubelet集成方式,提供一個(gè)kubelet容器運(yùn)行時(shí)的接口:
- 支持更多鏡像的格式包括docker鏡像格式;
- 支持更多的方式來(lái)下載和驗(yàn)證鏡像包;
- 容器鏡像管理(管理image的層,文件系統(tǒng));
- 容器進(jìn)程的生命周期管理;
- CRI所需求的監(jiān)控和日志;
- CRI需求的資源隔離;
OpenShift
OpenShift包括整個(gè)生態(tài)鏈工具的。紅帽去年發(fā)布的Red Hat OpenShift 4.x系統(tǒng),其容器運(yùn)行時(shí)默認(rèn)為CRI-O。可以使用CoreOS構(gòu)建不可變的基礎(chǔ)架構(gòu),并在該基礎(chǔ)架構(gòu)上運(yùn)行OpenShift4.x。CRI-O以CoreOS為基礎(chǔ)是好處顯而易見的,最更重要的一點(diǎn)是CRI-O由k8s社區(qū)控制,完全開源,非常精簡(jiǎn),直接實(shí)現(xiàn)k8s容器運(yùn)行時(shí)接口。