容器進階:OCI與容器運行時


Blog:博客園 個人

什么是容器運行時(Container Runtime)

Kubernetes節點的底層由一個叫做容器運行時的軟件進行支撐,它負責比如啟停容器 這樣的事情。最廣為人知的容器運行時當屬Docker,但它不是唯一的。

容器運行時分類

  • 低級運行時:只負責利用Cgroups和Namespaces等管理容器;
  • 高級運行時:負責額外實現管理鏡像的API,包括鏡像格式、鏡像管理(構建、查詢和刪除等)和鏡像共享等;

什么是OCI

OCI(Open Container Initiative,開放容器標准)的容器運行時規范設定的標准定義了容器運行狀態的描述,以及運行時需要提供的容器管理功能,例如創建、刪除和查看等操作。容器運行時規范不受上層結構綁定,不受限於任何特定操作系統、硬件、CPU架構或公有雲等,從而允許任何人遵循該標准開發應用容器技術。

符合規范的容器運行時

  • runc, docker默認的運行時,與宿主機共享內核,利用cgroup做資源隔離,安全性不是很高,由於內核共享,性能最好
  • runv,基於hypervisor的容器運行時,有自己單獨的內核,安全性好很多
  • kata,被螞蟻收了,號稱“容器的速度,虛擬機的安全”,貌似是基於runv做的
  • gvisor,谷歌搞的,比runc安全,比VM性能要好。有一個用戶空間的內核,會攔截應用程序的系統調用,目前沒有實現所有的系統調用,因此不是所有的應用都可以運行

OCI對Docker的影響

OCI項目啟動后,Docker公司將2014年開源的libcontainer項目移交至OCI組織並進化為runC項目,成為第一個且目前接受度最廣泛的遵循OCI規范的容器運行時實現。

為了兼容OCI規范,Docker項目自身也做了架構調整,自1.11.0版本起,Docker引擎由一個單一組件拆分成了Docker Engine(docker-daemon)、containerd、containerd-shim和runC等4個獨立的項目,並把containerd捐贈給了CNCF。

也就是,目前的Docker不是以前的Docker,技術棧進行了分層:

Docker CLi -> Dockerd -> Containerd -> OCI Implementation


免責聲明!

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



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