lxd-启动篇分析
lxd是什么:lxd是基于lxc構(gòu)筑的容器管理進(jìn)程,提供鏡像,網(wǎng)絡(luò),存儲(chǔ),以及容器的能力,對(duì)外暴漏restfull API。其與docker的區(qū)別是docker更切近與app container,以應(yīng)用為中心構(gòu)筑,lxd屬于system container,以資源為中心構(gòu)筑,其使用方式也是切近與vm,而與vm的區(qū)別,請(qǐng)自行搜索容器與vm差異。lxd由ubuntu開源,意在提供資源視角的容器,不顛覆傳統(tǒng)的資源的運(yùn)維管理方式。其配套由openstack的nova-lxd driver 可與openstack輕松集成,管理vm方式管理容器。
本篇重點(diǎn)說(shuō)的是lxd daemon的啟動(dòng)篇:
由上面可知,我們可以通過(guò)啟動(dòng)參數(shù)配置 對(duì)lxd的運(yùn)行階段進(jìn)行全方位的跟蹤,有cpu,內(nèi)存,以及運(yùn)行堆棧的信息,這對(duì)lxd的問(wèn)題定位很有幫助。lxd daemon守護(hù)進(jìn)程的啟動(dòng)重點(diǎn)在daemon初始化過(guò)程中:
下面對(duì)紅色部分詳細(xì)展開解釋:
從啟動(dòng)篇看具備如下能力:
1:支持apparmor
2:支持storage driver:為容器設(shè)置不同的文件系統(tǒng)
3:支持bridge和ovs兩種網(wǎng)絡(luò)方式
4:支持cpu,net,usb熱插拔
5::支持GPU設(shè)備發(fā)現(xiàn)加載
6:支持代理服務(wù)器訪問(wèn)
此部分涉及Linux 較多知識(shí)。將涉及的簡(jiǎn)單概括:
Namespace
Linux Namespaces機(jī)制提供一種資源隔離方案。PID,IPC,Network等系統(tǒng)資源不再是全局性的,而是屬于某個(gè)特定的Namespace。每個(gè)namespace下的資源對(duì)于其他namespace下的資源都是透明,不可見的。因此在操作系統(tǒng)層面上看,就會(huì)出現(xiàn)多個(gè)相同pid的進(jìn)程。系統(tǒng)中可以同時(shí)存在兩個(gè)進(jìn)程號(hào)為0,1,2的進(jìn)程,由于屬于不同的namespace,所以它們之間并不沖突。而在用戶層面上只能看到屬于用戶自己namespace下的資源,例如使用ps命令只能列出自己namespace下的進(jìn)程。這樣每個(gè)namespace看上去就像一個(gè)單獨(dú)的Linux系統(tǒng)。
User Namespace主要是用了CLONE_NEWUSER的參數(shù),使用了這個(gè)參數(shù)后,內(nèi)部看到的UID和GID已經(jīng)與外部不同了。默認(rèn)情況下容器沒(méi)有的UID,系統(tǒng)自動(dòng)設(shè)置上了最大的UID65534,默認(rèn)UID的定義文件在“/proc/sys/kernel/overflowuid”。
要把容器中的uid和真實(shí)系統(tǒng)的uid給映射在一起,需要修改 /proc/$$/uid_map 和/proc/$$/gid_map 這兩個(gè)文件。這兩個(gè)文件的格式為:
ID-inside-ns ID-outside-ns length
PS:
第一個(gè)字段ID-inside-ns表示在容器顯示的UID或GID,
第二個(gè)字段ID-outside-ns表示容器外映射的真實(shí)的UID或GID。
第三個(gè)字段表示映射的范圍,一般填1,表示一一對(duì)應(yīng)。
例:把真實(shí)的uid=1000映射成容器內(nèi)的uid=0
$cat/proc/2465/uid_map
010001
例:把namespace內(nèi)部的uid映射到外部設(shè)置整形
把namespace內(nèi)部從0開始的uid映射到外部從0開始的uid,其最大范圍是無(wú)符號(hào)32位整形
$cat/proc/$$/uid_map
004294967295
需要注意的是:
寫這兩個(gè)文件的進(jìn)程需要這個(gè)namespace中的CAP_SETUID (CAP_SETGID)權(quán)限(可參看Capabilities)寫入的進(jìn)程必須是此user namespace的父或子的user namespace進(jìn)程。
另外需要滿如下條件之一:
1)父進(jìn)程將effective uid/gid映射到子進(jìn)程的user namespace中
2)父進(jìn)程如果有CAP_SETUID/CAP_SETGID權(quán)限,那么它將可以映射到父進(jìn)程中的任一uid/gid
AppArmor
AppArmor(Application Armor)是Linux內(nèi)核的一個(gè)安全模塊,AppArmor允許系統(tǒng)管理員將每個(gè)程序與一個(gè)安全配置文件關(guān)聯(lián),從而限制程序的功能。簡(jiǎn)單的說(shuō),AppArmor是與SELinux類似的一個(gè)訪問(wèn)控制系統(tǒng),通過(guò)它你可以指定程序可以讀、寫或運(yùn)行哪些文件,是否可以打開網(wǎng)絡(luò)端口等。作為對(duì)傳統(tǒng)Unix的自主訪問(wèn)控制模塊的補(bǔ)充,AppArmor提供了強(qiáng)制訪問(wèn)控制機(jī)制,它已經(jīng)被整合到2.6版本的Linux內(nèi)核中。
詳細(xì)介紹參考:http://www.cnblogs.com/-Lei/archive/2013/02/24/2923947.html
網(wǎng)絡(luò)
設(shè)置涉及iptables,ip link命令,ovs-vsctl命令。
unix domain socket
相關(guān) 參考:http://www.th7.cn/Program/go/201508/539156.shtml
Linux內(nèi)核態(tài)與用戶態(tài)通信
參考:http://blog.csdn.net/luckyapple1028/article/details/50839395
Linux信號(hào)
詳細(xì)參考:http://blog.chinaunix.net/uid-20441206-id-3138952
總結(jié)
- 上一篇: 各国语言简写代码
- 下一篇: 什么一键重装系统最好(一键重装软件哪个干