認識kata-containers


kata-container github

https://github.com/kata-containers

https://github.com/kata-containers/runtime

  Kata Containers是一個開源項目和社區,致力於構建輕量級虛擬機(VM)的標准實現——這些虛擬機的感知和執行類似容器,但提供VM的工作負載隔離和安全優勢,內核級別的隔離宿主機的內核!Kata Containers 項目最初是基於 QEMU 的,但它的設計從一開始就以支持多種管理程序解決方案為出發點.

kata-containers是什么 

  kata containers是由OpenStack基金會管理,但獨立於OpenStack項目之外的容器項目。它是一個可 以使用容器鏡像以超輕量級虛機的形式創建容器的運行時工具。 kata containers整合了Intel的 Clear Containers 和 Hyper.sh 的 runV,能夠支持不同平台的硬件 (x86-64,arm等),並符合OCI(Open Container Initiative)規范,同時還可以兼容k8s的 CRI(Container Runtime Interface)接口規范。目前項目包含幾個配套組件,即Runtime,Agent, Proxy,Shim,Kernel等

  真正啟動Docker容器的命令工具是RunC,它是OCI運行時規范 (runtime-spec)的默認實現。Kata containers其實跟RunC類似,也是一個符合OCI運行時規范的一種 實現(即Clear Container和runV 都符OCI規范),不同之處是,它給每個容器(在Docker容器的 角度)或每個Pod(k8s的角度)增加了一個獨立的linux內核(不共享宿主機的內核),使容器有更好 的隔離性,安全性

容器生態系統中的位置

   容器運行時是一個相對的概念,比如,從k8s的角度看,直接創建容器的組件是docker或containerd, 因此,將docker、containerd以及新加入的CRI-O作為容器運行時組件。而在docker、containerd或 CRI-O的角度看,真正啟動容器的組件是runC,因此,docker中將runC作為容器運行時工具,當然在 docker中,runC可以被替換,比如可以替換為本文介紹的kata containers(即clear Container或者 runV)(角度不同,對象不同)

docker組件關系圖

 

 

   我們看到runC處於docker組件圖的最底端,runC下面就是容器。目前docker已經不是一個專一的容器 管理組件,而真正的容器管理組件是containerd,而containerd本身也不會直接跟操作系統交互,去 創建、刪除容器,而是借助runC來對容器生命周期進行管理因此這里可以講runC作為容器運行時。容器圈中針對容器運行時指定了OCI規范

Docker的架構

 

如紅色虛線框內所示,也就是說,只要符合OCI規范的運行時工具,都可以被docker(或者說是 containerd)使用。 了解上面的內容,我想kata containers在容器的什么位置,應該就顯而易見了。它符合OCI運行時規 范,因此,可以作為runC的替代組件

k8s組件的結構圖

注: CC 表示 clear containers , CC 和 runV 有一個虛線框圈起來,表示后續這兩個組件會合並成 kata containers ,目前可以分別使用。 上圖中給出了k8s分別將docker、containerd和CRI-O作為容器管理工具(以k8s角度的容器運行時) 的組件關系圖。k8s為了能對接多種容器管理工具,抽象了CRI接口,每個容器管理工具只需實現接口即可。

runc/kata

包含的組件及其功能介紹

runtime:符合OCI規范的容器運行時命令工具,主要用來創建輕量級虛機,並通過agent控制虛 擬機內容器的生命周期

agent:運行在虛機中的一個運行時代理組件,主要用來執行runtime傳給他的指令,在虛機內 管理容器的生命周期

shim:以對接docker為例,這里的shim相當於是containerd-shim的一個適配,用來處理容器 進程的stdio和signals。shim可以將containerd-shim發來的數據流(如stdin)傳給proxy,然 后轉交給agent,也可以將agent經由proxy發過來的數據流(stdout/stderr)傳給containerdshim,同時也可以傳輸signal。

這里的shim跟上一節k8s結構圖中的shim不是一個組件,上節提到的shim表示 containerd-shim proxy:主要用來為runtime和shim分配訪問agent的控制通道,以及路由shim實例和agent之 間的I/O數據流。 

kernel:kernel其實比較好理解,就是提供一個輕量化虛機的linux內核,根據不同的需要,提供 幾個內核選擇,最小的內核僅有4M多

kata containers各組件之間的關系

reference

https://blog.csdn.net/O4dC8OjO7ZL6/article/details/78986732

https://www.cnblogs.com/qccz123456/p/10978505.html

https://blog.csdn.net/hdu_hanwei/article/details/82389111


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM