本篇重點說的是lxd daemon的啟動篇:
由上面可知,我們可以通過啟動引數配置 對lxd的執行階段進行全方位的跟蹤,有cpu,記憶體,以及執行堆疊的資訊,這對lxd的問題定位很有幫助。lxd daemon守護程序的啟動重點在daemon初始化過程中:
下面對紅色部分詳細展開解釋:
從啟動篇看具備如下能力:
2:支援storage driver:為容器設定不同的檔案系統
3:支援bridge和ovs兩種網路方式
4:支援cpu,net,usb熱插拔
5::支援gpu裝置發現載入
6:支援**伺服器訪問
此部分涉及linux 較多知識。將涉及的簡單概括:
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
0 1000 1
例:把namespace內部的
uid對映到外部設定整形
把namespace內部從
0開始的
uid對映到外部從
0開始的
uid,其最大範圍是無符號
32位整形
$cat/proc/$$/uid_map
0 0 4294967295
需要注意的是:
寫這兩個檔案的程序需要這個namespace中的
cap_setuid (cap_setgid)許可權(
可參看capabilities)
寫入的程序必須是此
user namespace
的父或子的
user namespace
程序。另外需要滿如下條件之一:
1)父程序將
effective uid/gid
對映到子程序的
user namespace
中2)父程序如果有
cap_setuid/cap_setgid
許可權,那麼它將可以對映到父程序中的任一
uid/gid
詳細介紹參考:
設定涉及iptables,ip link命令,ovs-vsctl命令。
相關參考:
詳細參考:
Hadoop 任務排程分析啟動篇
學習hadoop已有一段時間,從最初的搭建環境,配置環境,編寫mapreduce應用,到基於hive的查詢,慢慢的開始喜歡和習慣它的這種模式,最近對hadoop集群環境執行原理很感興趣,很想知道它究竟是怎麼做到這種分步式的運算與協調,也很想能夠從事這方面的工作.學習了董西成的 深入解析mapredu...
kubelet 原始碼分析 啟動篇
在kubernetes集群中,每個node節點 又稱minion 上都會啟動乙個kubelet服務進行。該程序用於處理master節點下發到本節點的任務,管理pod及pod中的容器。每個kubelet程序會在api server上註冊節點自身資訊,定期向master節點匯報節點資源的使用情況,並通過...
Android學習啟動篇
1.linux kernel development.2.understanding the linux kernel.3.linux device drivers.4.linux核心源 情景分析.看了linux kernel的書,當然也要看一下android的書了,這樣可以對android平台長什...