您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“Containerd的特性有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Containerd的特性有哪些”吧!
“早在16年3月,Docker 1.11的Docker Engine里就包含了containerd,而現(xiàn)在則是把containerd從Docker Engine里徹底剝離出來(lái),作為一個(gè)獨(dú)立的開(kāi)源項(xiàng)目獨(dú)立發(fā)展,目標(biāo)是提供一個(gè)更加開(kāi)放、穩(wěn)定的容器運(yùn)行基礎(chǔ)設(shè)施。和原先包含在Docker Engine里containerd相比,獨(dú)立的containerd將具有更多的功能,可以涵蓋整個(gè)容器運(yùn)行時(shí)管理的所有需求。
containerd并不是直接面向最終用戶的,而是主要用于集成到更上層的系統(tǒng)里,比如Swarm, Kubernetes, Mesos等容器編排系統(tǒng)。containerd以Daemon的形式運(yùn)行在系統(tǒng)上,通過(guò)unix domain docket暴露很低層的gRPC API,上層系統(tǒng)可以通過(guò)這些API管理機(jī)器上的容器。每個(gè)containerd只負(fù)責(zé)一臺(tái)機(jī)器,Pull鏡像,對(duì)容器的操作(啟動(dòng)、停止等),網(wǎng)絡(luò),存儲(chǔ)都是由containerd完成。具體運(yùn)行容器由runC負(fù)責(zé),實(shí)際上只要是符合OCI規(guī)范的容器都可以支持。
對(duì)于容器編排服務(wù)來(lái)說(shuō),運(yùn)行時(shí)只需要使用containerd+runC,更加輕量,容易管理。而獨(dú)立之后containerd的特性演進(jìn)可以和Docker Engine分開(kāi),專注容器運(yùn)行時(shí)管理,可以更穩(wěn)定。在向后兼容上也可以做的更好,containerd第一個(gè)正式版本1.0 Release之后將提供一年的支持,包括安全更新和Bugfix,而每次升級(jí)也會(huì)向后兼容一個(gè)小版本?!?/p>
通常一個(gè)容器運(yùn)行時(shí)需要包括哪些功能特性呢?
這里是containerd的架構(gòu)圖。中間這一層里包含了三個(gè)子系統(tǒng),從這里可以看出containerd支持哪些能力
Distribution: 和Docker Registry打交道,拉取鏡像
Bundle: 管理本地磁盤上面鏡像的子系統(tǒng)。
Runtime:創(chuàng)建容器、管理容器的子系統(tǒng)。
可以看出containerd非常的干凈,提供的都是運(yùn)行時(shí)真正需要的功能。
Cotainerd 只負(fù)責(zé)容器運(yùn)行時(shí) 和 基本的鏡像管理,和一些普遍需要的支持。
* 容器管理 * 鏡像管理 * 存儲(chǔ)卷管理 * 性能采集 * 日志管理 * 網(wǎng)絡(luò)
特性和路線圖
* 支持OCI鏡像 * 支持OCI運(yùn)行時(shí)(runC) * 支持鏡像的pull/push操作 * 容器運(yùn)行時(shí)和生命周期管理 * 網(wǎng)絡(luò)原語(yǔ):創(chuàng)建/修改/刪除接口 * 讓容器加入已有的Network Namespace * 使用“內(nèi)容可尋址”存儲(chǔ)支持全局鏡像多租戶共享
由于需要兼容上層多個(gè)編排系統(tǒng),docker 和 k8s 在一個(gè)node上可能存在多個(gè)containerd。在不同的命名空間,可以有相同名字的容器。當(dāng)下載不同namespace的鏡像時(shí),可以拿其他namespace的鏡像做軟鏈,以節(jié)省存儲(chǔ)空間,無(wú)需重復(fù)下載。
好處:功能易擴(kuò)展。當(dāng)需要對(duì)接上層編排系統(tǒng)時(shí),可以通過(guò)插件的方式進(jìn)行對(duì)接。 cri-containerd 變成一個(gè)插件,可以讓k8s直接對(duì)接containerd的功能。
兩種方式集成:原生代碼集成 和 動(dòng)態(tài)庫(kù)的方式。 原生代碼集成,顧名思義,就是代碼在一個(gè)repo里構(gòu)建成一個(gè)二進(jìn)制文件。 所謂動(dòng)態(tài)庫(kù)的方式,就是把.so文件加入規(guī)定的目錄下,在不重新編譯containerd二進(jìn)制的情況下,加載某個(gè)插件。
項(xiàng)目: https://github.com/containerd/cri
原名cri-containerd:目前 cri-conainerd 已經(jīng)變成containerd的一個(gè)插件。
支持K8s CRI規(guī)范的所有特性
提供了使用ansible和kubeadm工具部署k8s集群的方法。
-- 插件化前
缺點(diǎn):實(shí)際上通過(guò)containerd client調(diào)用 containerd ,多了一層grpc的調(diào)用,性能上有損耗。
-- 插件化后
功能上沒(méi)有變化,性能較大提升。
優(yōu)點(diǎn):
Stability 職責(zé)單一,更容易穩(wěn)定
Compatibility 跟隨kubernetes的需求
Neutral Foundation 中立, CNCF 項(xiàng)目之一
Performance
dockershim的代碼是集成在 kubelet內(nèi)部的,dockershim的作用是把docker的接口用CRI標(biāo)準(zhǔn)封裝起來(lái)。
docker 17.11版本開(kāi)始使用Containerd v1.0
cri-conainerd 已經(jīng)變成containerd的一個(gè)插件。
缺點(diǎn):
User Adaption 調(diào)試工具手段相比docker還有差距
Maturity 需要時(shí)間成熟
圖上半部是docker的數(shù)據(jù), 圖下半部是containerd 的數(shù)據(jù)。
第一列,對(duì)比Pod創(chuàng)建時(shí)延 ,使用k8s測(cè)試工具density 創(chuàng)建 50%,90% ,99% 的pod 花費(fèi)的時(shí)間。
第二列,單位時(shí)間內(nèi)能創(chuàng)建多少pod。
上圖測(cè)試創(chuàng)建105個(gè) pod,對(duì)機(jī)器資源的消耗。
分析:一個(gè)容器對(duì)應(yīng)一個(gè)dockershim,在docker中dockershim占用的內(nèi)存與 containerd占用內(nèi)存對(duì)比,更小。
進(jìn)一步優(yōu)化 * cri-containerd插件化后再瘦身 * containerd-shim耗費(fèi)內(nèi)存比較多 換一種語(yǔ)言實(shí)現(xiàn)?
重要事件
Containerd 原生支持CRI
項(xiàng)目已經(jīng)合并,cri-containerd作為Containerd的一個(gè)插件,改名cri,不再獨(dú)立存在。
版本:伴隨kubernetes 1.10, 發(fā)布cri-containerd 1.0.0-rc.0 , Containerd 1.1
Plan 2018
secure Pod (kata container etc)
Windows container
性能優(yōu)化部分...
理解這些組件模塊以及之間的關(guān)系對(duì)修改和擴(kuò)展系統(tǒng)十分關(guān)鍵。
整個(gè)架構(gòu)的目標(biāo)是為了協(xié)調(diào)bundles的創(chuàng)建和執(zhí)行。bundles是指被Runtime使用的,包括配置、元數(shù)據(jù)、rootfs數(shù)據(jù)。bundle在文件系統(tǒng)上代表運(yùn)行時(shí)容器,簡(jiǎn)化為一個(gè)目錄。
Code layout并沒(méi)有反映實(shí)際的架構(gòu)。
Subsystems: 外部用戶通過(guò)GRPC API暴露的服務(wù)來(lái)進(jìn)行交互。
Bundle: bundle服務(wù)允許用戶從硬盤鏡像中解壓和打包bundles.
Runtime: runtime服務(wù)支持bundles的執(zhí)行,包括創(chuàng)建容器運(yùn)行時(shí)
每個(gè)子系統(tǒng)有一個(gè)以上的controller 組件、實(shí)現(xiàn)了子系統(tǒng)的行為,并通過(guò)服務(wù)的方式暴露給外部訪問(wèn)。
除了子系統(tǒng)之外,還有一些組件可能跨子系統(tǒng)實(shí)現(xiàn)。
Executor: 實(shí)現(xiàn)了實(shí)際容器運(yùn)行時(shí)。
Supervisor: 監(jiān)控和報(bào)告容器狀態(tài)。
Metadata: 在graph db中存儲(chǔ)元數(shù)據(jù)。保存與鏡像和bundles相關(guān)的所有文件。保存在數(shù)據(jù)庫(kù)中的數(shù)據(jù)有schema,包含與模塊間協(xié)作入口。還包括回收磁盤空間的垃圾回收hook。
Content: 提供內(nèi)容可尋址的存儲(chǔ)。所有不可改變的內(nèi)容通過(guò)hash key保存在這里。
Snapshot: 管理文件系統(tǒng)上容器鏡像的快照。類比于Docker中的 graphdriver
Events: 支持收集和消費(fèi)事件,提供一致地以事件驅(qū)動(dòng)的行為和審計(jì)。事件可以以多種模型進(jìn)行重放。
Metrics: 每個(gè)組件會(huì)導(dǎo)出多個(gè)metrics,通過(guò)metrics API訪問(wèn)。
Distribution: 提供上傳和下載鏡像的功能
到此,相信大家對(duì)“Containerd的特性有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。