虛擬化與容器


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

1.主機級別虛擬化

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

a.type-I

這種虛擬化,hypervisor繞過咱們熟知的os內核,直接接管硬件,而後本身再虛擬出對應所須要的os內核。主要產品有VMware ESXI,以下圖左側ubuntu

b.type-II

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

2.容器級別虛擬化

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

3.namespace

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

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以上的系統oop

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

相關文章
相關標籤/搜索