容器技術(序)

容器技術是繼虛擬化技術之後,逐漸成為對雲計算領域具有深遠影響的變革技術。容器技術的發展和應用,為各行業應用雲計算提供了新思路,也對雲計算的交付方式、效率、PaaS 平臺的構建等方面產生深遠的影響,具體體現在以下幾個方面:簡化部署、快速啟動、服務組合、易於遷移。虛擬化是雲計算的重要基礎,容器定義了一套從構建到執行的標準化體系,改變了傳統的虛擬化技術,深度影響雲計算領域,容器是雲計算的未來

虛擬化技術背景

虛擬化技術被用於系統資源管理、容錯、軟硬件保護、增強系統安全、提升性能和節能等領域;虛擬化技術廣泛地與其他技術結合,並且得到更多硬件支持,其性能損失不斷降低,部分固化到硬件中

虛擬化技術的含義:將任何一種形式的資源抽象成另一種形式的技術都是虛擬化。例如虛擬內存空間和進程,如果把內存看作一個設備,虛擬內存就是將物理內存虛擬成多個內存空間,如果把內存看作一個設備,虛擬內存就是將物理內存虛擬成多個內存空間;進程的概念實際是對於物理硬件執行環境的一個抽象,每一個進程都享有一個完整的硬件執行環境,並且與其他進程相隔離;相對於進程級的虛擬化,虛擬機是另一個層面的虛擬化,即系統虛擬化。系統級虛擬化所抽象的環境是整個計算機,其抽象出的環境成為虛擬機,包括CPU、內存和I/O。在每個虛擬機中都可以運行一個操作系統,在一臺計算機上可以虛擬出多個虛擬機

目前已經有網絡虛擬化、微處理器虛擬化、文件虛擬化和存儲虛擬化等技術。抽象來說,虛擬化是資源的邏輯表示,它不受物理限制的約束;具體來說,虛擬化技術的實現形式是在系統中加入一個虛擬化層,虛擬化層將下層的資源抽象成另一種形式的資源,提供給上層使用。通過空間上的分割、時間上的分時以及模擬,虛擬化可以將一份資源抽象成多份。反過來,虛擬化也可以將多份資源抽象成一份。虛擬化可以將紛繁複雜的物理世界改造成一個可以實現定製需求的世界

系統虛擬化是虛擬化技術中的一種,其抽象的粒度是整個計算機;硬件與操作系統之間的是硬件抽象層,在操作系統與應用程序或函數庫之間的是API抽象層。硬件抽象層(Hardware Abstraction Layer, HAL)是計算機中軟件所能控制的硬件的抽象接口,通常包括CPU的各種寄存器、內存管理模塊、I/O端口和內存映射的I/O地址等;API抽象層是一個進程所能控制的系統功能的集合,包括創建新進程、內存申請和歸還、進程間同步與共享、文件系統和網絡操作等;本質上,虛擬化就是由位於下層的軟件模塊,通過向上一層軟件模塊提供一個與它原先所期待的運行環境完全一致的接口的方法,抽象出一個虛擬的軟件或硬件接口,使得上層軟件可以直接運行在虛擬環境上。虛擬化可以發生在現代計算機系統的各個層次上,不同層次的虛擬化會帶來不同的虛擬化概念

容器技術(序)

物理資源通常有一個定語成為宿主(Host),而虛擬出來的資源通常有一個定語稱為客戶(Guest)。例如講一個物理計算機虛擬為一個或多個虛擬計算機,則這個物理計算機通常也被稱為宿主機(Host Machine),而其上運行的虛擬計算機被稱為客戶機(Guest Machine);宿主機上運行的操作系統被稱為宿主機操作系統(Host OS),而虛擬機中運行的操作系統被稱為客戶機操作系統(Guest OS)

系統虛擬化 指將一臺物理計算機系統虛擬化為一臺或多臺虛擬計算機系統,每個虛擬計算機系統(簡稱為虛擬機)都擁有自己的虛擬硬件(如CPU、內存和設備等),來提供一個獨立的虛擬機執行環境。通過虛擬化層的模擬,虛擬機中的操作系統認為自己仍然是獨佔一個系統在運行。每個虛擬機中的操作系統可以完全不同,並且它們的執行環境是完全獨立的,這個虛擬化層被稱為虛擬機監控器(Virtual Machine Monitor,VMM)。VM和物理機系統可以是兩個完全不同的ISA系統,不同的ISA使得虛擬機的每一條指令可以在處理器上直接運行,只有那些需要虛擬化的指令才會由VMM進行處理

虛擬機可以看作是物理機的一種高效隔離的複製,有幾個特點

  • 同質 指虛擬機的運行環境和物理機的環境在本質上需要是相同的,但在表現上能夠有一些差異;例如,虛擬機所看到的處理器個數可以和物理機上實際的處理器個數不同,處理器主頻也可以與物理機的不同
  • 高效 虛擬機中運行的軟件需要由接近在物理機上直接運行的性能--大多數指令直接在硬件上運行,少量指令需要經過VMM處理器或模擬
  • 資源受控 VMM需要對系統資源由完全控制能力和管理權限,包括資源的分配、監控和回收

類虛擬化技術(Para-Virtualization)主要思想是通過客戶機操作系統與虛擬化管理層的協同設計,由虛擬化管理層軟件提供一個近似於原物理系統,但又不完全相同(與原系統)的虛擬平臺

系統虛擬化提供了多個隔離的執行環境,具有如下功能功能

  • 封裝性 以虛擬機為粒度的封裝使得虛擬機運行環境保存非常便捷,虛擬機的優秀封裝性使得以下應用模式可以方便地實現
  • 虛擬機快照
  • 虛擬機克隆 從虛擬機的執行環境複製出一個或多個相同的虛擬機
  • 虛擬機掛起 暫停一個運行中的虛擬機,將其運行環境保存在磁盤上
  • 虛擬機恢復 將保存在磁盤上的虛擬機運行環境恢復到內存中繼續運行的操作
  • 多實例 在一個計算機上運行多個虛擬機使得資源的調度更為優化
  • 隔離 使用虛擬機,每個應用程序可以在自己的操作系統環境中獨立地運行,而不會影響到其他的工作負載
  • 硬件無關性 虛擬化是資源的邏輯表示,它不受物理限制的約束。由於虛擬化層的抽象,虛擬機與底層的硬件沒有直接的綁定關係
  • 特權功能 由於虛擬化層處於客戶機及客戶機操作系統的下層,其具有更高的特權屬性。在這個層中添加新的功能有如下兩個優勢
  • 新的功能有高級特權級,不能被客戶機操作系統繞過
  • 新的功能不需要了解客戶機內部的語義,使其實現上更容易
容器技術(序)

雲計算的一個核心思想是在服務器端提供集中的計算資源,同時這些計算資源要獨立地服務於不同的用戶,也就是在共享的同時,為每個用戶提供隔離、安全、可信的工作環境。虛擬化技術將是雲計算的一個基礎架構,即雲計算實際上是一個虛擬化的計算資源池,用來容納各種不同的工作模式,這些模式可以快速部署到物理設施上。虛擬化的資源按照來自用戶的需求多少動態調動資源,每個用戶都有一個獨立的計算執行環境,虛擬化為雲計算的發展提供一個自適應、自管理的靈活基礎架構

VMM分類

  • 按虛擬平臺分類
  • 完全虛擬化 VMM虛擬的是現實存在的平臺,並且客戶機操作系統看來,虛擬的平臺和實現的平臺是一樣的,客戶機操作系統察覺不到是運行在一個虛擬平臺上
  • 類虛擬化 VMM虛擬的平臺是現實中不存在的,而是經過VMM重新定義的,這樣的虛擬平臺需要對所運行的客戶機操作系統進行或多或少的修改使之適應虛擬環境,因此客戶機操作系統周到其運行在虛擬平臺上,並且會主動適應
  • 按VMM實現結構分類
  • Hypervisor模型 在Hypervisor模型中,VMM首先可以被看做是一個完備的操作系統,不過和傳統操作系統不同的是,VMM是為虛擬化而設計的,因此還具備虛擬化功能。從架構上來看,首先,所有的物理資源如處理器、內存和I/O設備等都歸VMM所有,因此,VMM承擔著管理物理資源的責任;其次,VMM需要向上提供虛擬機用於運行客戶機操作系統,因此,VMM還負載虛擬環境的創建和管理
容器技術(序)

  • 處理器管理代碼(Processor, P)負責物理處理器的管理和虛擬化
  • 內存管理代碼(Memory, M)負責物理內存的管理和虛擬化
  • 設備模型(Device Model, DM)負責I/O設備的虛擬化
  • 設備驅動(Device Driver, DR)則負責I/O設備的驅動,及物理設備的管理

VMM直接管理所有的物理資源,包括處理器、內存和I/O設備,因此,設備驅動是VMM的一部分;處理器管理代碼、內存管理代碼和設備模型也是VMM的一部分

在Hypervisor模型中,由於VMM同時具備物理資源的管理功能和虛擬化功能,因此,物理資源虛擬化的效率會更高一些;在安全方面,虛擬機的安全只依賴於VMM的安全

  • 宿主模型 在宿主模型中,物理資源由宿主機操作系統管理。宿主機操作系統是傳統操作系統(Window、Linux等),這些操作系統並不是為虛擬化而設計的,因此本身並不具備虛擬化功能,實際的虛擬化功能由VMM來提供。VMM通常是宿主機操作系統獨立的內核模塊,有些實現中還包括用戶態進程,如負責I/O虛擬化的用戶態設備模型;VMM通過調用宿主機操作系統的服務來獲得資源,實現處理器、內存和I/O設備的虛擬化;VMM創建出虛擬機後,通常將虛擬機作為宿主機操作系統的一個進程參與調度
容器技術(序)

優缺點與Hypervisor模型相反;宿主模型最大的優點是可以充分利用現有操作系統的設備驅動程序,VMM無須為各類I/O設備重新實現驅動程序,可以專注於物理資源的虛擬化;缺點是,由於物理資源由宿主機操作系統控制,VMM需要調用宿主機操作系統的服務來獲取資源進行虛擬化,而那些系統服務在設計開發之初並沒有考慮虛擬化的支持,因此,VMM虛擬化的效率和功能會收到一定影響。VMM在安全性方面依賴於宿主機操作系統內核安全性

  • 混合模型 上述兩種方式的混合體,VMM依然位於最底層,用於所有的物理資源,與Hypervisor模式不同的是,VMM會主動讓出大部分I/O設備的控制權,將它們交由一個運行在特權虛擬機中的特權操作系統來控制。VMM虛擬化的職責也被分擔,處理器和內存的虛擬化依然由VMM來完成,而I/O的虛擬化則由VMM和特權操作系統共同合作來完成
容器技術(序)

混合模型VMM集中上述兩種模式的優點,可以利用現有操作系統的I/O設備驅動程序,不需要另外開發;VMM直接控制處理器、內存等物理資源,虛擬化的效率也較高;在安全性方面,如果對特權操作系統的權限控制得當,虛擬機的安全性只依賴於VMM

典型虛擬化產品 VMware、Microsoft、Xen、KVM

虛擬環境性能

  • 性能評價指標和優化
  • 吞吐量 單位時間內系統的處理能力
  • 延遲 指完成一個指定任務所需要花費的時間
  • 資源利用率 指完成一個任務所需要花費的系統資源

一般情況下吞吐量越高、延遲越少、資源利用率越低則表示系統的性能越好,反之則越差。通常三項指標不會同時都朝性能好的方向發展,因此,需要統籌分析考慮,綜合評價性能的好壞。為了綜合評價一個虛擬環境的性能,就要有不同的工具從不同的角度考量它各方面的性能

  • 性能評測工具
  • 重用操作系統的性能評測工具 sysbench、cyclesoak、hdparm、netperf
  • 面向虛擬環境的性能評測工具 vConsolidate、VMmark
  • 性能分析工具 Xenoprof、Xentrace、Xentop
  • 性能優化方法
  • 降低客戶機退出事件發生頻率,提高虛擬化的效率
  • 硬件加速
  • 硬件加速
  • 影子頁表
  • 直接分配I/O
  • Hypercall
  • 降低客戶機退出事件處理時間
  • 降低處理器利用率

容器技術的基本概念和發展背景

容器技術主要涉及兩個方面

資源容器 主要是為了提高應用程序對系統資源的控制和管理能力,基於資源容器的系統可以把系統中的資源主體從運行主體(即進程)中剝離出來,從而達到對系統資源進行更精確和高效控制的目的

基於容器的虛擬化技術通過借鑑容器的核心思想,將系統中的資源主體從運行主體(虛擬機)中剝離出來,從而達到在虛擬化技術上對系統資源進行精確和高效控制的目的。虛擬機監控器負責對系統中所有的資源容器進行管理和控制,根據用戶配置以及系統資源使用的實際情況進行合理分配和回收,實現跨虛擬機的進程間資源共享,但這樣的資源控制機制仍然存在安全隱患。克服資源共享帶來的安全隱患的有效方法,是採用一套可靠的訪問控制機制來防止非法的資源共享。強制訪問控制通過在所有的系統對象上添加有管理員制定的安全策略來限制正在執行的程序的訪問權限,從而阻止惡意程序破壞的傳播。該方法存在許多限制,無法針對單個程序提出不同的安全策略,其次它對數據和程序的完整性,以及程序的職能範圍無法進行有效的控制;在次基礎上,研究者提出名為Flask的MAC架構,實現將安全策略邏輯與安全機制的分離,從而能夠提供更加便捷的安全策略設置和調整,以滿足不同程序對安全策略的要求。SELinux是MAC機制在Linux操作系統上的實現,它涵蓋了對進程、文件和套接字在內的多種系統資源的訪問控制。通過引入域、角色和類型等概念實現對安全策略的細化和精確定製。虛擬化技術因其卓越的進程和系統資源隔離能力在發展的初期就被用來實現對應用程序的訪問控制;將應用程序置於相對獨立的運行環境中,由虛擬機監控器依照管理員制定的策略實現程序間的訪問控制

安全容器 核心思想在於將訪問控制機制從操作系統中剝離出來獨立於運行環境,依據不同的安全策略形成虛擬的安全容器。在資源容器的基礎上,對包括姿態進程、文件系統、網絡和進程間通信等在內的系統資源進行訪問控制

基於容器的虛擬化技術借鑑了安全容器的思想,在使用資源容器實現資源共享的基礎上通過安全容器技術實現對共享資源的有效訪問控制。按照不同的安全對象,諸如域、應用程序和虛擬機風分配不同的可訪問資源形成虛擬的安全容器,防止其他對象對其資源進行惡意的、未授權的訪問

容器發展歷程

容器技術(序)

  • OS虛擬化思想起源於1979年,UNIX系統中的chroot(為了方便切換root目錄),為每個進程提供了文件系統資源的隔離,這也是容器技術XXX
  • BSD於2000年吸收並改進chroot技術,發佈的FreeBSD Jails除文件系統隔離,還添加了用戶和網絡資源等的隔離,每個Jail還能分配一個獨立IP,進行一些相對獨立的軟件安裝和配置
  • 2001年,Linux發佈的Linux Vserver依舊是延續Jails的思想,在一個操作系統上隔離文件系統、CPU時間、網絡地址和內存等資源,每一個分區都被稱為一個security context,內部虛擬化系統被稱為VPS
  • 2004年,原SUN公司發佈的Solaris Containers作為Solaris 10中的特性,包含了系統資源控制和zones提供的二進制隔離,Zones作為操作系統實例內一個完全隔離的虛擬服務器存在
  • 2005年,SWsoft公司發佈OpenVZ,它和Solaris Containers非常相似,通過打補丁的Linux內核來提供虛擬化、隔離、資源管理和檢查點。OpenVZ標誌著內核級別的虛擬化真正成為主流,之後不斷有相關的技術被加入內核
  • 2006年,Google發佈Process Containers記錄和隔離每個進程的資源使用(包括CPU、內存、硬盤I/O、網絡等),後改名為cgroups(Control Groups),並於2007年被加入V2.6.24 Linux內核中
  • 2008年,出現第一個比較完善的LXC容器技術,基於已被加入內核的cgroups和Linux namespaces實現,不需要打補丁,LXC就能運行在任意vanila內核的Linux上
  • 2011年,CloudFoundry發佈Warden,與LXC不同,Warden可以工作在任何操作系統上,作為守護進程運行,還提供了管理容器的API
  • 2013年Google公司建立開源容器技術棧lmctfy,Google開啟這個項目是為了通過容器實現高性能,高資源利用率,同時接近零開銷的虛擬化技術。目前Kubernetes中的監控工具cAdvisor就起源於lmctfy項目;2015年,Google將lmctfy的核心技術貢獻給libcontainer
  • 2013年Docker誕生,Docker最早是dotCloud內部的項目,和Warden類似,Docker最初也用了LXC,後來開發libcontainer替換LXC;與其他容器技術不同的是,Docker圍繞容器構建了一套完整的生態,包括容器鏡像標準、容器Registry、REST API、CLI、容器集群管理工具Docker Swarm等
  • 2014年CoreOS為改進Docker在安全方面的缺陷,重寫容器引擎創建了rkt,相關容器工具產品包括:服務發現工具etcd和網絡工具flannel
  • 2016年微軟公司發佈基於Windows的容器技術Hyper-V Container,其原理和Linux下的容器技術類似,可以保證在某個容器裡運行的進程與外界是隔離的,兼顧虛擬機的安全性和容器的輕量級

容器技術框架

容器技術(序)

通過研究、梳理和分析現有的容器技術,形成容器相關的技術架構

  • 服務器層 當運行容器鏡像時,容器本身需要運行在傳統操作系統(物理機或VM)之上,容器並不關心服務層如何提供和管理,它期望的是能夠獲得這些服務器資源
  • 資源管理層 包含服務器、操作系統等資源的管理。其中如果是物理服務器,需要涉及物理機管理系統(Rocks等);如果是虛擬機,需要使用虛擬化平臺。無論是哪一種形態的服務器都需要對其中的OS加一管理(Chef、Puppet、Ansible和SaltStack等工具);傳統的存儲和網絡管理也包含在資源管理層。資源管理層的核心目標是對服務器和操作系統資源進行管理,以支持上層的容器運行引擎
  • 運行引擎層 主要指常見容器系統,如Docker、rkt、Hyper、CRI-O;這些容器系統的共通作用包括啟動容器鏡像、運行容器應用和管理容器實例。運行引擎又可以分為管理程序和運行時兩個模塊,是單機程序(類似於虛擬化軟件KVM和Xen),引擎運行於服務器操作系統之上,接受上層集群系統的管理
  • 相關開源項目
  • 資源隔離 Cgroup、Hypervisor
  • 訪問限制 Namespace、Hypervisor
  • 管理程序 Docker Engine、OCID、hyperd、rkt、CRI-O
  • 運行時環境 runC(Docker)、runV(Hyper)、runZ(Solaris)
  • 集群管理層 可以把容器的集群管理系統類和針對VM的集群管理系統劃等號,都是通過對一組服務器運行分佈式應用;區別在於,VM的集群管理系統需要運行在物理服務器上,容器集群管理系統可以運行在物理服務器和VM上
  • 容器集群管理系統包括 Kubernetes、Docker Swarm、Mesos

集群管理層涉及到的相關開源項目包括

  • 指揮調度 Docker Swarm、Kubernetes、Mesos
  • 服務發現 Etcd、Consul、Zookeeper、DNS
  • 監控 Prometheus
  • 存儲 Flocker
  • 網絡 Calico、Weave、Flannel
  • 應用層 指所有運行於容器之上的應用程序,以及所需輔助的系統,包括:監控、日誌、安全、編排、鏡像倉庫等
  • 監控模塊 Prometheus、cAdvisor、Sysdis等
  • 日誌 Fluentd、LogStash
  • 安全 容器鏡像的安全掃描、運行環境的安全隔離、集群環境的安全管理
  • 編排 Docker Compose、CoreOS Fleet
  • CI/CD Jenkins、Buildbot、Gitlab CI、Drone.io
  • 鏡像倉庫 Docker Hub、VMware Harbor、Huawei Dockyard
容器技術(序)

雲計算架構圖

容器技術的關鍵技術內容

  • 鏡像 容器鏡像包括操作系統文件、應用本身的文件、應用所依賴的軟件包和庫文件
  • 運行時引擎
  • 容器編排 容器啟動、容器的應用部署、容器的應用部署
  • 容器集群 將多臺物理機抽象為邏輯上單一調度實體的技術,為容器化的應用提供資源調度、服務發現、彈性伸縮、負責均衡等功能,同時監控和管理整個服務器集群,提供高質量、不間斷的應用服務。容器集群主要包含以下技術
  • 資源調度 以集中化方式管理和調度資源,按需為容器提供CPU、內存等資源
  • 服務發現 通過全局可訪問的註冊中心實現任何一個應用能夠獲取當前環境的細節,自動加入到當前的應用集群中
  • 彈性伸縮 在資源層面,監控集群資源使用情況,自動增減主機資源;在應用層面,可通過策略自動增減用於實例來實現業務能力的彈性伸縮
  • 負載均衡 當應用壓力增加,集群自動擴展服務將負載均衡至每一個運行節點;當某個節點出現故障,應用實例重新部署運行到健康的節點
  • 服務註冊和發現 容器技術在構建自動化運維場景中,服務註冊和發現是兩個重要的環節,一般通過一個全局性的配置服務來實現
  • 熱遷移 動態遷移或實施遷移,是指將整個容器的運行時狀態完整保存下來,同時可以快速地在其他主機或平臺上恢復運行。主要應用在兩個方面
  • 有多個操作單元執行任務,熱遷移能迅速地複製與遷移容器,做到無感知運行作業
  • 可以處理數據中心中集群的負載均衡,大量數據湧來無法運行計算時,可利用熱遷移創建多個容器處理運算任務,調節信息數據處理峰谷,配置管理負載均衡比例,降低應用延遲

小結

文章對虛擬化技術及容器技術的發展演進做了簡單介紹,作為本系列課程的序。後期更多精彩內容分享,歡迎持續關注

參考文獻

[1] 《系統虛擬化 原理與實現》

[2] 《容器技術及其應用白皮書 V1.0》

容器技術專欄主題預告

1.OCI容器技術規範

2.容器鏡像規範

3.容器運行時規範

4.鏡像倉庫規範

5.Docker


分享到:


相關文章: