開發者學堂課程【現代應用容器技術快速入門:容器技術基礎(一)】學習筆記,與課程緊密聯系,讓使用者快速學習知識。
課程位址: https://developer.aliyun.com/learning/course/830
容器技術基礎(一)
------馬永亮
目錄:
一、課程簡介
二、容器技術基礎
三、容器技術
●由阿裡雲、Linux開源軟體學園和那個教育聯合推出
★“CNCF×Alibaba雲原生技術公開課”的前置課程
★CKAD/CKA/CKS認證配套課程
●内容涵蓋
★手把手實踐Kibernetes雲原生操控系統
★阿裡雲Kibernetes托管服務ACK

目前來說應用程式的部署環境大體上分為三種:主機、虛拟器、容器化的作用,無論是哪一種,主機上通常都是營運的某一系統,現在的計算機系統多數情況下都是為了運作多人物,甚至是支援多使用者的,那麼底層使用者資源向多個程序進行有效配置設定,需要一個計算機系統來負責完成。
是以現代的計算機系統都有兩個不同的的、分離的區域,成為使用者空間和核心空間;
●核心充當使用者空間和硬體的中間層,負責程序排程、記憶體管理、中斷處理等,對系統資源具有完全的控制權;
●使用者空間通過“系統調用”與核心通信,系統調用通過API向應用程式提供系統級服務。
事實上,也可以通過專用的軟體模拟或者虛拟技術,将這一個獨立的主機硬體給他虛拟化。
虛拟化技術
通過專用軟體模拟或/和虛拟技術,将多個主機硬體虛拟為獨立、完整且隔離的不同單元,每個單元可以作為一個主機被使用,這個用于幫忙把底層的硬體所提供的各種資源計算資源給虛拟,或者模拟出多組互相隔離的這種軟體,就稱之為虛拟機監視程式或稱之為虛拟化軟體
●這個專用軟體稱為VMM,即虛拟機監視程式;
●根據VMM運作的位置不同,可以将虛拟化技術劃分為兩種類型:
◆直接運作于硬體之上:類型1虛拟化技術
◆運作于作業系統之上:類型2虛拟化技術
不管是哪一種虛拟化技術他們最終都将能夠提供一個接口,這個接口允許使用者去管理VM的生命周期。
●每個虛拟機直接暴露硬體接口虛拟化技術
◆有獨立的核心空間和使用者空間
◆跨虛拟機的程序之間完全隔離
◆資源開銷較大,半虛拟化技術有助于降低開銷
由于兩個虛拟機之間互相隔着核心兒,而每一個虛拟機都有自己獨立的核心兒,是以彼此之間并不會産生任何一人的幹擾,如果我們不考慮較為底層的這個Hypervisor級别的資源配置設定的話,最終應用程式的一每一個虛拟機之上的應用程式的運作最終還是要靠底層的硬體裝置來支援,是以他們的請求無論如何,無論是被其所在虛拟機的核心兒如何處理的,最終還是要交由哈Hypervisor,甚至還要交由底層的host OS就是主控端的作業系統。
什麼虛拟化技術呢,可以了解為就是資源開銷有點大,是以後來就出現了各式各樣的準虛拟化,或者稱為叫半虛拟化技術及para virtual的機制來實作,來減少這種性能開銷來,增強系統的資源利用使用率,但是比較主流的虛拟化技術像vmware workstation、vmwserver 、vmware、vsphere等等解決方案也包括開源的主流産品中的KVM核心虛拟化還有ten等一系列的虛拟化技術,他們分别支援各種各樣的不同特性,由于誕生的時期不同,對于底層硬體的要求也各有不同,事實上在十年前開始流行起來了,Issa雲的虛拟化技術(雲計算技術)當中,基本上對應的都是以KVM或者ten或者是其他的虛拟化技術作為底層運作虛拟機的核心,而後額外額外提供了一套叢集級别的作業系統來實作在叢集及統一管理容器統一管理虛拟機的生命周期來實作的,因而迄今為止,這仍然是一種主流的虛拟化技術,但是考慮到這種主流化的虛拟化技術過于消耗資源,後來人們就開始探索一種輕量的虛拟化技術,到今天為止,落地的結果就是容器技術。
1、概念:他是類似于虛拟化技術,隻不過他的軟體的主要目的不是将主控端的硬體進行虛拟化,或者說不是相對應的應用程式提供硬體級的虛拟化接口,而是将主控端的作業系統所提供的使用者空間隔離為多個使用者空間,使得每一個使用者空間就好像自己是唯一運作在該核心之上的使用者空間一樣,進而完成了類似于前面我們所提到的這種虛拟化機制,隻不過每一個獨立而隔離的空間,它由于被底層的container runtime,或者被容器引擎所輸出的不是主機級的接口,而僅僅是核心機接口,是以這裡虛拟出來的這個級别是作業系統的虛拟接口,由此以來就減少了傳統的主機級虛拟化兩級核心,至少是類型2核心,但是最終還是由Hypervisor來進行排程完成的。
●借助于稱之為“容器運作時”的軟體技術,在同一個核心之上生成多個彼此隔離的使用者空間
◆個和使用者空間可獨立管理運應其内部程序
◆每個使用者空間“自以為”獨占該核心及硬體資源
●需要将核心級的共享資源進行隔離
◆依賴于核心中稱為“名稱空間”的技術進行
★名稱空間是Linux核心特性,用于隔離部分系統資源,進而使得程序僅可通路同一名稱空間中的相應資源
●資源限制則依賴于由Google貢獻的“CGroups”。
事實上名稱空間僅僅能夠建立和支援隔離的多個名稱,多個使用者空間就類似于模拟出來的多個使用者空間,但是每一個使用者空間中的程序則很有可能請求和消耗掉其核心管理之下的所有硬體資源,是以為了避免某一使用者空間或者某一個usb中的所有程序耗盡大部分硬體資源,可以借助于CGroups将硬體資源或計算能力存儲能力io能力等等,按特定的比例,或特定的量來向不同的使用者空間進行配置設定。
是以說現代的這個Linux的容器技術,就是要強依賴一個Linux核心的名稱,空間和CGroup來實作的,事實上容器技術其實也就是Linux核心天然就已經支援和具備的技術。
2、Linux核心支援的名稱空間
其實這的核心,支援大約八種名稱,名稱空間早期的版本或者是我們現在在很多系統上看到的,很多材料上看到的都是支援六個名稱空間,但事實上較新版本的核心又增添了兩種使用者空間的支援也就是名稱空間的支援。
●第一個叫Mount,他用來隔離挂載點和檔案系統,事實上,這也是最早支援的叫做名稱空間技術,以至于他自己就直接稱呼自己就是名稱空間,叫ns space的簡寫,很有可能這個時候的Linux核心的維護和開發者并沒有意識到,後來很多其他資源資源也需要在名稱、空間、級别實作隔離。
●後來到Linux核心發展到2.6.19以後,正式引入了另外兩個名稱空間,分别叫UPS和IPC,其中,UPS是用來提供獨立的主機名和NS域名兒的。這就是有了這樣一個UPS的支援以後,如果建立名稱空間時,或者建立使用者空間時調用了這個标志,用UPS和用IPC的話,這就意味着每一個使用者空間可以看到不同的主機名。而且還和可以看到一個彼此之間在同一個使用者空間的程序之間,可以通過思維的SysV IPC的metals互相通信,但跨每一種空間是被隔離的。
●接着核心發展到2.6.24的時候,PID也被引入了名也的名稱空間也被引入核心,進而每一個使用者空間
在2.6.29以後,網絡名稱空間引入核心,而這個時候,每一個使用者空間可以自己直接使用一個獨占的網絡名稱空間,進而能夠使用看上去獨占的網絡裝置、協定棧和端口配置設定等。
●3.8引入了User ID和Group ID名稱空間(user名稱空間),進而能夠實作User ID和Group ID的隔離。這就使得某一個容器當中看上去有一個Root使用者,它能夠在該名稱空間當中具有所有的管理權限,但它輸入機級别并沒有,是以我們可以了解為你模拟出來使用者空間的根使用者就是Group和其他普通使用者的這麼一個名稱,空間技術。
●Linux核心發展到了4.6版本以後,引入了Cgroup名稱空間,它的主要作用在于為Cgroups實作資源配置設定的或者資源指派的一個技術。Cgroups也是采用了類似于檔案系統一樣的層級結構的Cgroup名稱空間,就是為Cgroups的跟使用者提供根目錄的或者對相關層級結構的管理的。
●接着Time這一名稱空間是核心5.6版本才新進引入的,他能夠實作為Boot time和Monotonic time提供隔離的空間。其monotonic time是一個單調遞增,其實它就是為作業系統計時的,我們可以了解為該使用者空間建立以後,将一直持續的單調遞增的方式進行計時,但是系統一旦進入休眠狀态的話,這個時候他的相關技術是不計入的,可以了解為它專用于記錄該系統正常運作,或者該使用者空間正常運作了多長時間,Boot time類似于Monotonic time,但不同之處在于會計入系統休眠時間,也就意味着在休眠那一刻開始到休眠結束所中間經曆的這些時間,它也會通過計算并加到這個對應的累加器,然後Linux核心所制的名稱貢獻,随着名稱空間技術的越來越豐富,Linux本身對于容器技術的支援越來越完善。
3、名稱空間和Chroot
●1979年,Chroot系統調用被添加到Unix系統中,用于為開發人員提供一個獨立于根檔案系統的測試平台;
◆借助于Chroot,開發人員可以更改程序及其子程序的根目錄;
◆如下圖,檔案系統被分為兩個部分,他們互相之間并不影響
●Linux引入了新的子系統和系統調用來改進程序隔離機制
◆名稱空間的概念最早出現在2002年的Kernel 2.4.19中,當時唯一支援的名稱空間是Mount,該名稱空間的Flag甚至就名為CLONE_NEWNS。
4、隔離程序及辨別的PID名稱空間
●PID名稱空間能夠支援多個完全獨立的程序樹;
●Linux系統在使用者空間啟動的PID号為1的程序,作為程序樹的“根”;
●PID名稱空間允許使用者建立具有1号PID的單獨分支
◆新樹中的程序永遠不會同父程序互動,也不會看到他
◆父程序可以通路所有的子程序樹
●帶走CLONE_NEWPID标志的clone系統調用可用于建立新的命名空間PID。