天天看點

話容器虛拟技術

1、傳統的虛拟化技術

話容器虛拟技術

傳統的虛拟化技術會在已有主機的基礎上建立多個虛拟主機,然後在每個虛拟主機上安裝獨立的作業系統,并由虛拟主機的核心空間和使用者空間來運作應用程式

2、docker容器技術

話容器虛拟技術

使用主機的硬體,在硬體之上安裝一個作業系統,使用相同的核心。然後将使用者空間進行隔離,進而分成多個使用者空間,基于一個核心來運作。因為容器使用這種隔離使用者空間的方式,使得一樣可以提供多個應用程式的環境(而應用程式的環境我們稱之為容器),是以可以了解為是使用者空間的虛拟化技術

容器擁有更高的資源使用效率,因為其無需為每個應用配置設定一個獨立的作業系統,可以使得應用,資源消耗較小,遷移與建立的速度更小。

差別:kvm,xen隔離的非常好,因為他們有自己的核心空間和使用者空間,但是容器技術的話,整個容器隻有一個核心,不同的是,各虛拟機之間隔離開的僅僅是使用者空間。
在核心級别:完成環境隔離的方法(類似于chroot機制)

PID NameSapce  Linux 2.6.24

PID隔離,隔離PID号,能夠在每一個隔離出來的容器當中來實作虛拟出各種你所需要的PID,使得每一個使用者看到的PID号都是獨立的,互不幹擾

Network NameSpace:  Linux 2.6.29

網絡裝置、網絡棧、端口等網絡資源隔離,用于網絡虛拟容器隔離

User NameSpace  Linux 3.8

使用者和使用者組資源隔離,完成使用者隔離,每一個使用者的名稱空間當中都有可能可以存在所謂同樣使用者名的使用者 linux 3.8(是以docker是依賴于linux 3.8以後的版本,或者要求更高,是3.10以後的版本)

IPC NameSpace  Linux 2.6.19

程序間通信資源隔離(信号量、消息隊列和共享記憶體的隔離)

UTS NameSpace Linux 2.6.1

主機名和域名隔離

Mount NameSpace  linux 2.4.19

挂載點隔離(真正是實作檔案系統給的隔離)  實作已挂載檔案系統隔離的,期望在不同的使用者空間當中所通過核心看到的挂載的檔案系統應該是不一樣的。

我們為了向namespace發起調用,讓namespace完成某些操作

clone()  克隆 ,實作線程的系統調用,用來建立新線程

setns()  設定名稱空間屬性,将某程序加載到某個NameSpace去

unshare()  做成非共享機制,使程序脫離某個NameSpace的關聯到你的新NameSpace當中的

一個使用者空間可以将整個伺服器的CPU耗盡,那麼其他使用者空間将無法運作,是以僅有名稱空間是無法滿足,是以有另一個技術,叫CGroup(linux 2.6.24)

CGroup 核心級别的技術,用于限制、控制與分離一個程序組群的資源(使用者自己隔離和建立的),用于實作将程序分完組以後,組内的程序能使用多少的系統級的資源,可以在核心級上加以限制

一般用于隔離一個程序集合,為程序配置設定足夠記憶體帶寬然後限制其通路那些裝置,進而完成限制機制

CGroup + NameSpace 結合起來就能實作容器功能

Resource limitation:資源限制

Prioritization:優先級控制

Accounting:審計和統計功能,主要是為了計費(VPS計費)

Control:挂起程序,恢複程序

可使用 lssbusys - m 檢視資源組當中的子系統 cgroup 是基于單根樹狀結果進行組織的 ,在 /sys/fs/cgroup

blkio:設定塊裝置的IO限制

cpu:使用排程程式對cpu的CGroup的任務通路,設定CPU的限制(限制CPU使用的空間)

cpuacct:報告cgroup當中所使用的CPU資源

cpuset:為cgroup中的任務制定可用的cpu和記憶體資源(配置設定記憶體和CPU)

memory:設定記憶體的使用限制(限制記憶體使用的空間),配置設定是按段來配置設定,而不是按空間配置設定

device:控制cgroup中的任務對裝置的通路能力

freezer:實作挂起程序或恢複cgroup中的任務

net_cls:(classid),使用等級級别辨別符來标記網絡資料包,以實作基于TC完成對不同的cgroup中産生的流量控制

perf_event:對每一個使用者空間當中的任務的運作時的性能本身分别所産生的事件進行歸類統計(使用後使cgroup中的任務可以進行統一的性能測試)

hugetlb:對HugeTLB系統進行限制,能夠實作在記憶體配置設定時的減少記憶體配置設定的次數。

task(任務):指的是程序或線程

cgroup:一個獨立的資源控制機關,可以包含一個或多個子系統。每個控制組上可以關聯一個或多個子系統,一個任務隻能屬于一個cgroup

subsystem:子系統,需要關聯到cgroup

hierarchy:資源組的層級結構,層級是有一系列cgroup以一個樹狀結構排列而成,每一個層級通過綁定對應的子系統進行資源控制,層級中的cgroup節點可以包含零個或多個節點,業也就是你地下還可以繼續分層,而子集可以繼承父級的某些資源。

UnionFS:能夠實作把不同的實體位置的目錄能夠合并到同一目錄中

雖然是合并,但是事實上他是一種疊加。可以合并多個,隻有最上層的那個才是可寫的。

對于讀

如果合并的檔案存在重複,隻有最後一個合并的可被看到

如果檔案不重複,可以看到其他層裡不重複的檔案

對于寫

合并多個目錄時,隻有最後一個合并的可被寫

在其他層看到的檔案想去修改,實際上是在最上層建立一個檔案進行寫的操作。(他的原理有點類似PE的工作方式,比如你在PE上寫,其實寫的是在本地磁盤上)

話容器虛拟技術
docker很依賴AUFS,是以如果沒有AUFS的話,不建議docker在生産環境上使用 遺憾的是centos并不支援AUFS,在ubuntu上已經支援AUFS

Linux 2.6核心引入的最重要技術之一,用于在核心中支援邏輯卷的通用裝置映射技術。

Mappend Device:被映射出來的裝置

Mapping Table 映射表,指明了被虛拟出來的裝置和真正底層裝置有哪些。(相當于從虛拟裝置到真正實體裝置之間的映射路徑)

Target Device:源裝置

本文轉自 運維小當家 51CTO部落格,原文連結:http://blog.51cto.com/solin/1883222,如需轉載請自行聯系原作者

繼續閱讀