Linux命名空間概述

Linux的命名空間機(jī)制提供了一種資源隔離的解決方案。PID,IPC,Network等系統(tǒng)資源不再是全局性的还蹲,而是屬于特定的Namespace爹耗。Linux Namespace機(jī)制為實(shí)現(xiàn)基于容器的虛擬化技術(shù)提供了很好的基礎(chǔ),LXC(Linux containers)就是利用這一特性實(shí)現(xiàn)了資源的隔離谜喊。不同Container內(nèi)的進(jìn)程屬于不同的Namespace潭兽,彼此透明,互不干擾锅论。

Namespace是對(duì)全局系統(tǒng)資源的一種封裝隔離讼溺,使得處于不同namespace的進(jìn)程擁有獨(dú)立的全局系統(tǒng)資源楣号,改變一個(gè)namespace中的系統(tǒng)資源只會(huì)影響當(dāng)前namespace里的進(jìn)程最易,對(duì)其他namespace中的進(jìn)程沒(méi)有影響。

Linux查看進(jìn)程的命名空間

linux_namespace.PNG

Linux內(nèi)核支持的namespace類型

目前炫狱,Linux內(nèi)核里面實(shí)現(xiàn)了7種不同類型的namespace藻懒。

名稱        宏定義             隔離內(nèi)容
Cgroup      CLONE_NEWCGROUP   Cgroup root directory (since Linux 4.6)
IPC         CLONE_NEWIPC      System V IPC, POSIX message queues (since Linux 2.6.19)
Network     CLONE_NEWNET      Network devices, stacks, ports, etc. (since Linux 2.6.24)
Mount       CLONE_NEWNS       Mount points (since Linux 2.4.19)
PID         CLONE_NEWPID      Process IDs (since Linux 2.6.24)
User        CLONE_NEWUSER     User and group IDs (started in Linux 2.6.23 and completed in Linux 3.8)
UTS         CLONE_NEWUTS      Hostname and NIS domain name (since Linux 2.6.19)

下面簡(jiǎn)要介紹一個(gè)以上不同類型的命名空間的作用:

  • IPC:用于隔離進(jìn)程間通訊所需的資源( System V IPC, POSIX message queues),PID命名空間和IPC命名空間可以組合起來(lái)用视译,同一個(gè)IPC名字空間內(nèi)的進(jìn)程可以彼此看見(jiàn)嬉荆,允許進(jìn)行交互,不同空間進(jìn)程無(wú)法交互

  • Network:Network Namespace為進(jìn)程提供了一個(gè)完全獨(dú)立的網(wǎng)絡(luò)協(xié)議棧的視圖酷含。包括網(wǎng)絡(luò)設(shè)備接口鄙早,IPv4和IPv6協(xié)議棧,IP路由表椅亚,防火墻規(guī)則限番,sockets等等。一個(gè)Network Namespace提供了一份獨(dú)立的網(wǎng)絡(luò)環(huán)境呀舔,就跟一個(gè)獨(dú)立的系統(tǒng)一樣弥虐。

  • Mount:每個(gè)進(jìn)程都存在于一個(gè)mount Namespace里面,mount Namespace為進(jìn)程提供了一個(gè)文件層次視圖媚赖。如果不設(shè)定這個(gè)flag霜瘪,子進(jìn)程和父進(jìn)程將共享一個(gè)mount Namespace,其后子進(jìn)程調(diào)用mount或umount將會(huì)影響到所有該Namespace內(nèi)的進(jìn)程惧磺。如果子進(jìn)程在一個(gè)獨(dú)立的mount Namespace里面颖对,就可以調(diào)用mount或umount建立一份新的文件層次視圖。

  • PID::linux通過(guò)命名空間管理進(jìn)程號(hào)磨隘,同一個(gè)進(jìn)程缤底,在不同的命名空間進(jìn)程號(hào)不同布讹!進(jìn)程命名空間是一個(gè)父子結(jié)構(gòu),子空間對(duì)于父空間可見(jiàn)训堆。

  • User:用于隔離用戶

  • UTS:用于隔離主機(jī)名

命名空間相關(guān)的API

與命名空間相關(guān)的API主要有三個(gè):clone描验,setns和unshare,這三個(gè)API都是針對(duì)一個(gè)進(jìn)程來(lái)操作的坑鱼。

clone

clone方法會(huì)創(chuàng)建一個(gè)新的子進(jìn)程膘流,然后讓子進(jìn)程加入新的namespace,而當(dāng)前進(jìn)程保持不變鲁沥。

int clone(int (*child_func)(void *), void *child_stac, int flags, void *arg);

這兒的flag用于指明將要?jiǎng)?chuàng)建的新的namespace的類型呼股。
關(guān)于clone的具體例子請(qǐng)參考文章:http://blog.csdn.net/weifenghai/article/details/52836109

setns

setns方法用于將當(dāng)前進(jìn)程加入到已有的namespace中。

int setns(int fd, int nstype);

fd: 
    指向/proc/[pid]/ns/目錄里相應(yīng)namespace對(duì)應(yīng)的文件画恰,
    表示要加入哪個(gè)namespace

nstype:
    指定namespace的類型(上面的任意一個(gè)CLONE_NEW*):
    1. 如果當(dāng)前進(jìn)程不能根據(jù)fd得到它的類型彭谁,如fd由其他進(jìn)程創(chuàng)建,
    并通過(guò)UNIX domain socket傳給當(dāng)前進(jìn)程允扇,
    那么就需要通過(guò)nstype來(lái)指定fd指向的namespace的類型
    2. 如果進(jìn)程能根據(jù)fd得到namespace類型缠局,比如這個(gè)fd是由當(dāng)前進(jìn)程打開的,
    那么nstype設(shè)置為0即可

unshare

unshare方法使當(dāng)前進(jìn)程退出指定類型的namespace考润,并加入到新創(chuàng)建的namespace(相當(dāng)于創(chuàng)建并加入新的namespace)

int unshare(int flags);

flags:
    指定一個(gè)或者多個(gè)namespace的類型

關(guān)于unshare的具體例子請(qǐng)參考:http://blog.csdn.net/liumiaocn/article/details/52549978

總結(jié)

  • namespace的本質(zhì)就是把原來(lái)所有進(jìn)程全局共享的資源拆分成了很多個(gè)一組一組進(jìn)程共享的資源
  • 當(dāng)一個(gè)namespace里面的所有進(jìn)程都退出時(shí)狭园,namespace也會(huì)被銷毀,所以拋開進(jìn)程談namespace沒(méi)有意義
  • UTS namespace就是進(jìn)程的一個(gè)屬性糊治,屬性值相同的一組進(jìn)程就屬于同一個(gè)namespace唱矛,跟這組進(jìn)程之間有沒(méi)有親戚關(guān)系無(wú)關(guān)
  • UTS namespace沒(méi)有嵌套關(guān)系,即不存在說(shuō)一個(gè)namespace是另一個(gè)namespace的父namespace

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末井辜,一起剝皮案震驚了整個(gè)濱河市绎谦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌粥脚,老刑警劉巖窃肠,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異阿逃,居然都是意外死亡铭拧,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門恃锉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)搀菩,“玉大人,你說(shuō)我怎么就攤上這事破托》景希” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵土砂,是天一觀的道長(zhǎng)州既。 經(jīng)常有香客問(wèn)我谜洽,道長(zhǎng),這世上最難降的妖魔是什么吴叶? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任阐虚,我火速辦了婚禮,結(jié)果婚禮上蚌卤,老公的妹妹穿的比我還像新娘实束。我一直安慰自己,他們只是感情好逊彭,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布咸灿。 她就那樣靜靜地躺著,像睡著了一般侮叮。 火紅的嫁衣襯著肌膚如雪避矢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天囊榜,我揣著相機(jī)與錄音审胸,去河邊找鬼。 笑死锦聊,一個(gè)胖子當(dāng)著我的面吹牛歹嘹,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播孔庭,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼材蛛!你這毒婦竟也來(lái)了圆到?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤卑吭,失蹤者是張志新(化名)和其女友劉穎芽淡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體豆赏,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挣菲,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了掷邦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片白胀。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖抚岗,靈堂內(nèi)的尸體忽然破棺而出或杠,到底是詐尸還是另有隱情,我是刑警寧澤宣蔚,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布向抢,位于F島的核電站认境,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏挟鸠。R本人自食惡果不足惜叉信,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望艘希。 院中可真熱鬧茉盏,春花似錦、人聲如沸枢冤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)淹真。三九已至讶迁,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間核蘸,已是汗流浹背巍糯。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留客扎,地道東北人祟峦。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像徙鱼,于是被迫代替她去往敵國(guó)和親宅楞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 寫這個(gè)系列文章主要是對(duì)之前做項(xiàng)目用到的docker相關(guān)技術(shù)做一些總結(jié)袱吆,包括docker基礎(chǔ)技術(shù)Linux命名空間厌衙,...
    __七把刀__閱讀 5,817評(píng)論 0 16
  • Linux實(shí)現(xiàn)了六種不同類型的命名空間,每個(gè)命名空間的目的是將一個(gè)特定的全局系統(tǒng)資源包裹在一個(gè)抽象中绞绒,使命名空間內(nèi)...
    yukino_yukino閱讀 2,367評(píng)論 0 0
  • 簡(jiǎn)介L(zhǎng)inux Namespace是Linux提供的一種內(nèi)核級(jí)別環(huán)境隔離的方法婶希。不知道你是否還記得很早以前的Uni...
    51reboot閱讀 847評(píng)論 0 2
  • namespace[1]提供一種隔離機(jī)制,讓不同的namespace下的進(jìn)程看到的全局資源不同蓬衡,每一個(gè)namesp...
    寫個(gè)代碼容易么閱讀 4,391評(píng)論 0 3
  • 前言 - 實(shí)驗(yàn)環(huán)境 在講述Docker底層原理之前喻杈,先說(shuō)一下實(shí)驗(yàn)的環(huán)境吧; 操作系統(tǒng)Ubuntu: Linux內(nèi)核...
    彳亍口巴閱讀 209評(píng)論 0 0