同一個容器實例可以同時運行在多個宿主機_從零開始學K8s: 3.什么是容器

6655bdfc4688903155ae2f29e0bbef4f.png

Kubernetes使用Linux容器技術來實現應用的隔離。因此在深入學習k8s之前,我們需要先學習容器的基礎知識以便更好地去理解k8s的原理機制。

揭開容器的神秘面紗

當一個應用只由較少數量的大組件構成時,完全可以給每個組件分配一個專用的虛擬機,以及通過給每個組件分配它自己的操作系統實例來隔離它們的環境。

但是當這些組件變得越來越小且數量變得越來越多時,就不能給每個組件分配專用的VM,除非你不想節約硬件資源、降低硬件成本。但是硬件資源只是一方面,每個VM通常還需要獨立配置和管理,想象一下有大量的虛擬機等著你去配置和管理時你會是什么心情。這不僅是力資源的浪費,還會讓系統管理員的工作變得更加高負荷。

利用Linux容器技術隔離應用組件

越來越多的開發人員開始轉向Linux容器技術,而不是使用虛擬機來隔離每個微服務環境(或者通常說的進程)。容器技術使我們能夠在同一臺宿主機上運行多個服務,不僅為每個服務提供不同的環境,還將它們彼此隔離,就像虛擬機一樣,但是需要的開銷更小。

容器中運行的進程實際上還是在宿主機的操作系統上,跟其他進程沒啥區別,不像虛擬機,進程是運行在不同的操作系統上的。但是需要注意的是,容器中的進程仍然是與其他進程隔離的。對于進程本身而言,看起來就像是機器和操作系統上運行的唯一進程。

虛擬機 VS 容器

與虛擬機相比,容器更加輕量級。同樣的硬件情況下,基于容器,我們可以運行更多的應用組件。這主要是因為虛擬機還需要運行它自己的一組系統進程,這些進程需要額外的計算資源,而且應用本身所在的進程也需要消耗資源。而對于容器來說,其本身實際上就是一個運行在宿主機上被隔離的進程,只消耗應用本身需要消耗的資源,再無任何其他進程的開銷。

比較尷尬的情況是,由于虛擬機比較耗資源,導致沒有足夠的資源為每個應用程序分配一個專用的虛擬機,我們最終可能會將多個應用分組部署到每個虛擬機內。當使用容器時,我們可以而且應該為每個應用分配一個容器。因此,在同一臺裸機上可以運行更多的應用程序。

bf6f5245c1b4791396d3be2ef4127dba.png

當在一臺主機上運行三個虛擬機的時候,你就擁有了三個完全隔離的操作系統,它們運行并共享一臺裸機。宿主機操作系統和一個虛擬層(Hypervisor)位于這些虛擬機下面,這個虛擬層會將物理硬件資源分成一些更小塊的虛擬資源,從而被每個虛擬機內的操作系統使用。應用程序在虛擬機中運行,會調用虛擬機操作系統內核程序,然后內核程序會通過Hypervisor在宿主機的物理CPU上執行x86指令。而多個容器則會對運行在宿主機操作系統上的同一個內核執行調用,該內核是唯一一個在宿主機CPU上執行x86指令的內核。通過使用容器技術,CPU不需要做任何虛擬化,而虛擬機是需要對CPU做虛擬化的。可以通過下圖了解應用程序在虛擬機或容器中使用CPU方式的差異:

239ae732f4eb67a519bddf736d26d8c9.png
69b1ce699d8a222af83c3a3bd309247c.png

虛擬機的主要優點是提供了一個完全隔離的環境,因為每個虛擬機都運行在自己的Linux內核之上,而容器都是調用同一個內核,這顯然是有安全隱患的。硬件資源有限的情況下,如果需要隔離的進程不多,使用虛擬機可能是一個選擇。然而如果要在同一臺機器上運行更多相互隔離的進程的話,容器技術才是更好的選擇,因為它開銷更少。需要注意的是,每個虛擬機都會運行它自己的一組系統服務(也即進程)而所有的容器是不會的,因為它們都運行在同一個OS之上。這就意味著運行一個容器是不需要像虛擬機那樣還要先開機。容器上的進程是可以很快就可以被啟動起來的。

容器隔離機制

可能你會好奇,容器是怎么對運行在同一個操作系統上的進程進行隔離的呢。這里就不得不提到兩個機制。第一個就是Linux的命名空間(Namespace)

它可以確保每個只能看到它自己的系統視圖(文件、進程、網絡接口、主機名等等)。第二個是Linux控制組(cgroups),它限制了進程可以使用的資源量,包括CPU、內存、網絡帶寬等等。

命名空間

5c86e3c620e84fdf0fc17cb824553594.png

默認情況下,每個Linux系統初始化的時候只有一個命名空間。所有的系統資源,比如文件系統、進程ID、用戶ID、網絡接口以及其他資源都是屬于這個命名空間。但是我們也可以創建額外的命名空間以及在它們之間分配資源。對于一個進程,我們可以選擇讓其在某一個命名空間下運行,該進程就只能看到這個命名空間下的資源視圖。不過,命名空間是有多種類型的,一個進程并不是屬于某一個命名空間,而是屬于每種類型的一個命名空間,因此一個進程可能屬于多個命名空間,只是這些命名空間是不同類型的。

命名空間的種類有如下幾種:

  • MNT: 管理系統文件掛載點 (MNT: Mount)
  • PID: 進程隔離 (PID: Process ID)
  • NET: 管理網絡接口 (NET: Networking)
  • IPC: 管理對IPC資源的訪問 (IPC: Inter-Process Communication)
  • UTS: 隔離內核和版本標識符 (UTS: Unix Timesharing System)
  • User ID (user)

每一種命名空間被用來隔離一組特定的資源。例如,UTS命名空間就決定了運行在該命名空間下的進程所能看到的主機名和域名。通過給兩個進程指定兩個不同的UTS命名空間,能夠使它們看到不同的本地主機名。換句話說,對于這兩個進程來說,就好像運行在兩個不同的機器上(至少就主機名來說是這樣)。

同樣的,一個進程屬于什么網絡命名空間決定了運行在進程中的應用程序所能看到的網絡接口。每個網絡接口屬于一個命名空間,但是可以從一個命名空間轉移到另一個命名空間。每個容器使用它自己的網絡命名空間,因此每個容器看到的都是屬于它自己的一套網絡接口。現在我們應該明白命名空間是如何被用來隔離運行在容器中的應用。

cgroup

還可以通過cgroups來限制容器能夠消耗的資源來實現進程的隔離。cgroups是Linux的一個內核功能,它可以限制一個進程或者一組進程的資源使用。一個進程的資源(CPU、內存、網絡帶寬等等)使用量不能超過分配給它的量。通過這樣方式,進程就不能過度地使用為其他進程保留的資源,這就和每個進程運行在單獨的機上上類似。

如果想了解關于cgoups的知識,可以參考:

https://tech.meituan.com/2015/03/31/cgroups.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541209.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541209.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541209.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

__str__是什么函數_PHP str_shuffle()函數與示例

__str__是什么函數PHP str_shuffle()函數 (PHP str_shuffle() Function) str_shuffle() function is a string function and it is used to shuffle all characters randomly in the string. str_shuffle()函數是一個字符串函數,用于隨機地隨機排列字符串中的所有字…

SpringBoot集成RabbitMq消息隊列【附源碼】

1. 項目背景 要啥項目背景,就是干!!! SpringBoot版本:2.7.12 2. Rabbit MQ安裝 這里講解使用docker安裝RabbitMQ,如果在windows下面安裝RabbitMQ,參考下文 【笑小楓的按步照搬系列】Window…

【云棲直播】精彩推薦第3期:個性化推薦系統搭建實踐

熱門推薦 (1)即將直播持續集成與交付:分層自動化之UI自動化體系建設直播簡介:本系列直播由阿里旗下一站式研發提效平臺云效策劃推出,主要為大家詳細介紹阿里巴巴在持續集成和持續交付的最佳實踐。 直播講師&#xff1a…

全國計算機等級考試和cct區別,全國計算機等級考試(NCRE)和CCT的區別你了解多少?...

在大學,很多學生都在糾結,到底學什么技能在以后的就業中能夠提升自己的核心競爭力。在眾多等級考試中,全國計算機等級考試可以說是相對熱門的考試。關于計算機等級考試,一共有兩種,一類是全國高等學校計算機水平考試(C…

ensp路由器無法啟動_品勝云路由器Breed刷入詳細教程,技巧和注意事項,功能大增...

前面發文,介紹過品勝凈音云路由器WFR101N功能,硬件配置參數,高清拆解圖。主要硬件參數:閃存型號是W25Q128FVSG,容量大小是16M;內存是華邦的W9751G6KB-25,DDR2 SDRAM內存,大小64M&…

第二個沖刺期的第六天

昨天寫好了購物車的功能; 今天決定開始寫下訂單的功能; 明天的話繼續寫下訂單的功能; 遇到的問題:由于購物車是用session實現的,所以生成訂單的話會遇到一些問題,比如說訂單條目往數據庫的寫入。 &#xff…

chunk_split_PHP chunk_split()函數與示例

chunk_splitPHP chunk_split()函數 (PHP chunk_split() function) chunk_split() function is used to split the given string into chunks of small parts, it accepts the string returns the parts of the strings specified by the other parameters. chunk_split()函數用…

對計算機視覺研究的認識,計算機視覺(作業)

視覺是各個應用領域,如制造業、檢驗、文檔分析、醫療診斷,和軍事等領域中各種智能/自主系統中不可分割的一部分。由于它的重要性,一些先進國家,例如美國把對計算機視覺的研究列為對經濟和科學有廣泛影響的科學和工程中…

map函數python求數的每位的值_map函數_實現批量計算

作者Toby,持牌照消費金融模型經理,發明國家算法專利,國內最大醫藥數據中心數據挖掘部門負責人!和重慶兒科醫院,中科院教授,賽柏藍保持慢病數據挖掘項目合作!清華大學,百度,騰訊&…

Flask 視圖

寫個驗證用戶登錄的裝飾器:在調用函數前,先檢查session里有沒有用戶 from functools import wraps from flask import session, abortdef login_required(func):wraps(func)def decorated_function(*args, **kwargs):if not user in session:abort(401)r…

wps計算機打印雙面輸出,在wps中雙面打印的方法步驟詳解

我們在打印word文檔的時候往往都會使用到雙面打印,那么今天小編教你怎么在wps中雙面打印。希望對你有幫助!WPS雙面打印的步驟首先點擊wps上的文字選項。找到打印按鈕。點擊打開之后,會跳出這樣一個頁面。PS雙面打印的步驟圖1頁面內&#xff0…

PHP array_merge()函數與示例

PHP array_merge()函數 (PHP array_merge() function) array_merge() function is used to merge two or more arrays, it returns a new array with merged elements. array_merge()函數用于合并兩個或多個數組,它返回一個具有合并元素的新數組。 Syntax: 句法&am…

linux pwm 調屏_Linux驅動學習之:PWM驅動

PWM(Pulse Width Modulation)——脈寬調制,它是利用微控制器的數字輸出來對模擬電路進行控制的一種非常有效的技術,廣泛應用于測量、通信、功率控制與變換等許多領域。s3c2440芯片中一共有5個16位的定時器,其中有4個定時器(定時器0~定時器3)具…

2019聊大考研計算機調劑,2019年聊城大學碩士研究生預調劑工作說明

教育部2019年分數線與招生計劃尚未確定,根據往年分數線與報考情況,現將我校2019年碩士研究生預調劑工作說明如下:一、調劑要求:(一)只接受學歷為本科的考生調劑,應屆本科生優先;(二)初試成績達到報考專業與擬調劑專業教育部A區分數…

SylixOS磁盤高速傳輸

SylixOS管線模型分析前文主要介紹了SylixOS中的塊設備CACHE管理,本章主要介紹磁盤高速傳輸。在CAHCE回寫中SyilxOS采取了兩種方式,即直接回寫和多管線并發回寫。并發寫管線通過多線程并發處理CACHE提交的寫請求,實現磁盤高速傳輸。SylixOS中通…

kotlin int最大值_Kotlin程序查找三個數字中的最大值

kotlin int最大值Input 3 integer numbers, we have to find the largest of these input numbers. 輸入3個整數,我們必須找到這些輸入數字中最大的一個。 Example: 例: Input:First number: 10Second number: 20Third number: 30Output:Largest numbe…

計算機社團活動展望未來,社團展望未來寄語簡短,如何寫社團未來計劃

呵呵,你不會是社團的會長吧,不會寫這個的話說不過去了,而且沒有你想象的那么復雜,有條理,分類的寫下去就可以了,但這里不要太多的口水話!再者你可以去問一下其他社團的負責人的!&…

判斷五個分數等級劃分_壓力表精度等級怎么算?壓力表精度等級劃分及檢驗項目...

壓力表是一種典型的軸向精密壓力表,是用來測量介質壓力的儀表,在工業生產也是常用的儀表,對生產起到了非常重要的作用,壓力表的所顯示壓力的精度,就成了我們非常重要的一個參數。今天小編就來為大家說說壓力表精度等級…

stl make_heap_通過使用make_heap()創建堆| C ++ STL

stl make_heapWhat is Heap Data structure? 什么是堆數據結構? Heap is a tree-based which is used for fast retrieval of largest (max heap) or smallest (min heap) element. This DS is used in the priority queue, prims algo, heap sort and many more.…

cad安裝日志文件發生錯誤_蘋果電腦Mac os系統重裝時出現“準備安裝時發生錯誤”解決方案...

題外話:自己是個電腦小白,因為自己的MacBook Air 不那么流暢了,就按照其他知乎大佬們說的步驟進行重裝電腦。(2017款 MacBook Air 以下就用Air代替) 自己先把電腦重新啟動,按照步驟按住commandR&#xff0c…