前言
在私有云的容器化過(guò)程中,我們并不是白手起家開始的。而是接入了公司已經(jīng)運(yùn)行了多年的多個(gè)系統(tǒng),包括自動(dòng)編譯打包,自動(dòng)部署,日志監(jiān)控,服務(wù)治理等等系統(tǒng)。在容器化之前,基礎(chǔ)設(shè)施主要以物理機(jī)和虛擬機(jī)為主。因此,我們私有云落地的主要工作是基礎(chǔ)設(shè)施容器化,同時(shí)在應(yīng)用的運(yùn)維方面,兼用了之前的配套系統(tǒng)。利用之前的歷史系統(tǒng)有利有弊,這些后面再談。在這里我主要同大家分享一下在容器化落地實(shí)踐中的一些經(jīng)驗(yàn)和教訓(xùn)。
容器與虛擬機(jī)
當(dāng)我們向別人講述什么是容器的時(shí)候,常常用虛擬機(jī)作類比。在給用戶進(jìn)行普及的時(shí)候,我們可以告訴他,容器是一種輕量級(jí)的虛擬機(jī)。但是在真正的落地實(shí)踐的時(shí)候,我們要讓用戶明白這是容器,而不是虛擬機(jī)。這兩者是有本質(zhì)的區(qū)別的。
虛擬機(jī)的本質(zhì)上是模擬。通過(guò)模擬物理機(jī)上的硬件,向用戶提供諸如CPU、內(nèi)存等資源。因此虛擬機(jī)上可以且必須安裝獨(dú)立的操作系統(tǒng),系統(tǒng)內(nèi)核與物理機(jī)的系統(tǒng)內(nèi)核無(wú)關(guān)。因此一臺(tái)物理機(jī)上有多個(gè)虛擬機(jī)時(shí),一個(gè)虛擬機(jī)操作系統(tǒng)的崩潰不會(huì)影響到其他虛擬機(jī)。而容器的本質(zhì)是經(jīng)過(guò)隔離與限制的linux進(jìn)程。容器實(shí)際使用的還是物理機(jī)的資源,容器之間是共享了物理機(jī)的linux內(nèi)核。這也就意味著當(dāng)一個(gè)容器引發(fā)了內(nèi)核crash之后,會(huì)殃及到物理機(jī)和物理機(jī)上的其他容器。從這個(gè)角度來(lái)說(shuō),容器的權(quán)限和安全級(jí)別沒(méi)有虛擬機(jī)高。但是反過(guò)來(lái)說(shuō),因?yàn)槟軌蛑苯邮褂肅PU等資源,容器的性能會(huì)優(yōu)于物理機(jī)。
容器之間的隔離性依賴于linux提供的namespace。namespace雖然已經(jīng)提供了較多的功能,但是,系統(tǒng)的隔離不可能如虛擬機(jī)那么完善。一個(gè)最簡(jiǎn)單的例子,就是一個(gè)物理機(jī)上的不同虛擬機(jī)可以設(shè)置不同的系統(tǒng)時(shí)間。而同一個(gè)物理機(jī)的容器只能共享系統(tǒng)時(shí)間,僅僅可以設(shè)置不同的時(shí)區(qū)。
另外,對(duì)于容器資源的限制是通過(guò)linux提供的cgroup。在容器中,應(yīng)用是可以感知到底層的基礎(chǔ)設(shè)施的。而且由于無(wú)法充分隔離,從某種程度上來(lái)說(shuō),容器可以看到宿主機(jī)上的所有資源,但實(shí)際上容器只能使用宿主機(jī)上的部分資源。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動(dòng)安全 [無(wú)線安全]玩轉(zhuǎn)無(wú)線電——不安全的藍(lán)牙鎖 2017-07-26
- 消息隊(duì)列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標(biāo)分割】 2017-07-26
- 詞向量-LRWE模型-更好地識(shí)別反義詞同義詞 2017-07-26
- 從棧不平衡問(wèn)題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實(shí)現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動(dòng)安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來(lái)看看(二) 2017-07-26