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