虛擬化與容器


虛擬化按目前使用的類別分類,可分為兩種,主機級別虛擬化容器級別虛擬化

1.主機級別虛擬化

  • type-I:Hypervisor
  • type-II:OS-hosted

a.type-I

這種虛擬化,hypervisor繞過我們熟知的os內核,直接接管硬件,然后自己再虛擬出對應所需要的os內核。主要產品有VMware ESXI,如下圖左側

b.type-II

宿主機虛擬化,hypervisor層運行於宿主機os之上,通過主機os內核來進行硬件的內核調試,主要產品有VMware workstation,如上圖右側

2.容器級別虛擬化

容器虛擬化,有別於主機虛擬化,其存在宿主機os,但其與主機級別虛擬化的type-II不一樣,並非進行內核的虛擬化,而是通過namespace進行虛擬化,通過namespace的隔離,進行各程序的隔離,通過cgroups,進行資源的控制,以此來進行虛擬化。如下圖

3.namespace

linux 內核從版本 2.4.19 開始陸續引入了 namespace 的概念。當一個程序運行於主機之中時,其基本要求有,系統根文件目錄、運行pid進程號、主機名、網卡、ipc通信、程序運行用戶這六大類。

linux將以上六類進行了內核級別的虛擬化,這六大類統稱為namespace

namespace 引入的相關內核版本 被隔離的全局系統資源 在容器環境下的隔離效果
Mount 2.4.19 文件系統掛接點 每個容器能看到不同的文件系統層次結構
UTS 2.6.19 hostname 每個容器能看到自己的hostname
IPC 2.6.19 進程間通信 同一個IPC namespace的進程之間能互相通訊
PID 2.6.24 進程PID 每個PID namespace中的進程可以有其獨立的PID,每個容器可以有其PID為1的root進程
Network 始於2.6.24完成於2.6.29 網絡相關的系統資源 每個容器用有其獨立的網絡設備,IP地址,IP路由表,/proc/net目錄,端口號
User name 始於2.6.23完成於3.8 用戶和組ID空間 每個container可以有不同的user和group id

因為centos6的內核為2.6,所以user name不支持,所以centos6天然不太支持容器,雖然可以通過升級內核來進行支持,不過建議直接使用centos7以上的系統

4.cgroups

cgroups: Linux control groups,linux為運行的任務分配cpu、ram等,當namespace為容器進行隔離之后,還需要對每個容器進行資源的使用進行控制,不能讓其搶占其它容器的資源。

cgroups主要對以下內容進行資源控制

  • blkio:塊設備IO
  • cpu:CPU
  • cpuacct:CPU資源使用報告
  • cpuset:多處理器平台上的cpu集合
  • devices:設備訪問
  • freezer:掛起或恢復任務
  • memory:內存用量及報告
  • perf_event:對cgroup中的任務進行統一性能測試
  • net_cls:cgroup中的任務創建的數據報文的類別標識

5.AUFS

a. AUFS的概念

AUFS:Union File System,聯合文件系統,主要功能是將位於不同物理位置的目錄合並成同一個目錄,有點類似於hadoop中hdfs的分布式存儲。

b.linux的基本文件系列

linux系統啟動,至少需要有兩種文件系統,一種是bootfs,一種是rootfs

  • bootfs:包含 boot loader 和 kernel。用戶不會修改這個文件系統。實際上,在啟動(boot)過程完成后,整個內核都會被加載進內存,此時 bootfs 會被卸載掉從而釋放出所占用的內存。同時也可以看出,對於同樣內核版本的不同的 Linux 發行版的 bootfs 都是一致的。

  • rootfs:包含典型的目錄結構,包括 /dev, /proc, /bin, /etc, /lib, /usr, and /tmp 等再加上要運行用戶應用所需要的所有配置文件,二進制文件和庫文件。這個文件系統在不同的Linux 發行版中是不同的。而且用戶可以對這個文件進行修改。

同一個內核版本的所有linux系統的bootfs是相同的,rootfs不同

c.docker 鏡像

在docker images中,其采用的是分層技術,基礎鏡像中的roofs會一直保持只讀模式,docker利用union mount來在這個rootfs上增加更多的只讀文件系統,最后它們看起來就像一個文件系統即容器的rootfs。

在docker的分層鏡像中,除了支持aufs之外,還支持devicemapper,因為在aufs暫時還未被收納入linux內核主干,ubuntu14支持aufs,所以docker在ubuntu上面使用aufs,而作為比較保留的redhat系列上,docker使用的devicemapper


免責聲明!

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



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