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