虛擬化技術和容器技術
面試遇到的,有個大概印象,面試官說答得不對。。。。。
虛擬化 VMware Workstation
-
虛擬化,通過模擬計算機的硬體,來實現在同一臺計算機上同時執行多個不同的作業系統的技術。
-
在計算機中,虛擬化(英語:Virtualization)是一種資源管理技術,是將計算機的各種實體資源,如伺服器、網路、記憶體及儲存等,予以抽象、轉換後呈現出來,打破實體結構間的不可切割的障礙,使使用者可以比原本的組態更好的方式來應用這些資源。這些資源的新虛擬部分是不受現有資源的架設方式,地域或物理組態所限制。一般所指的虛擬化資源包括計算能力和資料儲存。
-
在實際的生產環境中,虛擬化技術主要用來解決高效能的物理硬體產能過剩和老的舊的硬體產能過低的重組重用,透明化底層物理硬體,從而最大化的利用物理硬體。
特點
- 虛擬化可以提高 IT 敏捷性、靈活性和可擴充套件性,同時大幅節約成本。更高的工作負載移動性、更高的效能和資源可用性、自動化運維 - 這些都是虛擬化的優勢,虛擬化技術可以使 IT 部門更輕鬆地進行管理以及降低擁有成本和運維成本。其他優勢包括:
- 降低資金成本和運維成本。
- 最大限度減少或消除停機。
- 提高 IT 部門的工作效率、效益、敏捷性和響應能力。
- 加快應用和資源的調配速度。
- 提高業務連續性和災難恢復能力。
- 簡化資料中心管理。
- 真正的 Software-Defined Data Center 的可用性。
分類
- 伺服器虛擬化
- 網路虛擬化
- 桌面虛擬化
- 虛擬化和雲端計算
常用的虛擬化軟體
- VMware系列
- VMware workstation(適合單臺計算機使用)、VMware vsphere(VMware esxi )、VMware Fusion(Mac)
- Xen 開源 半虛擬化
- XenServer 商業,廠商Ctirx,基於Xen的
- KVM 開源 基於linux核心模組 Hyper-V 商業,廠商微軟
- Openvz 開源 基於linux 虛擬機器和宿主機共用一個核心
- VirtualBox 開源 Sun公司開發 Oracle收購Sun
架構
-
目前分為兩種,寄居架構(Hosted Architecture)和裸金屬架構 (“Bare Metal” Architecture)
-
寄居架構就是在作業系統之上安裝和執行虛擬化程式,依賴於主機作業系統對裝置的支援和物理資源的管理;
-
裸金屬架構就是直接在硬體上面安裝虛擬化軟體,再在其上安裝作業系統和應用,依賴虛擬層核心和伺服器控制檯進行管理。
kvm 介紹
KVM是以色列初創公司Qumranet開發,2008年9月RedHat公司收購了Qumranet
KVM是Linux核心的一個模組,它把Linux核心變成了一個Hypervisor
KVM是完全開源的,RedHat基於KVM的虛擬化解決方案叫做RHEV
KVM在Linux作業系統裡面以程序的形式出現,由標準的Linux排程程式進行排程,這使得KVM能夠使用Linux核心的已有功能
只有一個KVM核心模組還不能實現虛擬化的全部功能,就好比作業系統只有核心還不能成為一個完整的作業系統一樣
QEMU是一個開源的虛擬化軟體,純軟體,可以虛擬化所以的硬體,效能不強
KVM基於QEMU開發了一個能夠執行在使用者空間的工具QEMU-KVM
磁碟、網路裝置等都是通過QEMU-KVM這個工具模擬出來的
KVM和QEMU-KVM通訊是通過/dev/kvm實現的
libvirt是用來管理KVM虛擬機器的API,其命令為virsh
詳細瞭解點這兒
容器docker
什麼是容器
-
容器(Container):容器是一種輕量級、可移植,並將應用程式進行打包的技術,使應用程式可以在幾乎任何地方以相同的方式執行。
-
Linux容器(LXC),LXC系統提供工具來管理容器,具有先進的網路和儲存支援,還有最小容器作業系統模版的廣泛選擇
-
容器是一種虛擬化的方案,和傳統的虛擬機器(通過中間層”guerst OS”執行服務)不同,Docker直接執行在作業系統之上。因此容器虛擬化也被稱之為作業系統虛擬化。Docker容器依賴於Linux核心特性,Namespace和Cgroups,所以只能執行在Linux之上。
一句話來概括的話,主機級虛擬化就是通過各種各樣的手段,把物理資源重新分配,然後抽象出一部分拿來做虛擬機器的虛擬硬體,是對硬體的模擬;而容器虛擬化技術相當於把作業系統進行虛擬化,把物理的作業系統模擬為邏輯上的多個作業系統,不同的作業系統有自己的使用者空間,實現了應用程式間的隔離。
特點
- 常見的傳統虛擬化技術如vSphere或Hyper-V是以作業系統為中心,而Container技術則是一種以應用程式為中心的虛擬化技術。傳統虛擬化技術從作業系統層下手,目標是建立一個可以用來執行整套作業系統的沙盒獨立執行環境,習慣以虛擬機器(Virtual Machine)來稱呼。而Container技術則是直接將一個應用程式所需的相關程式程式碼、函式庫、環境配置檔案都打包起來建立沙盒執行環境,為了和傳統虛擬化技術產生的虛擬機器區分,Container技術產生的環境就稱為Container。
- 最明顯的差別是,虛擬機器需要安裝作業系統(安裝Guest OS)才能執行應用程式,而Container內不需要安裝作業系統就能執行應用程式。Container技術不是在OS外來建立虛擬環境,而是在OS內的核心繫統層來打造虛擬執行環境,透過共享Host OS的作法,取代一個一個Guest OS的功用。Container也因此被稱為是OS層的虛擬化技術。
- Container技術採取共享Host OS的作法,而不需在每一個Container內執行Guest OS,因此建立Container不需要等待作業系統開機時間,不用1分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機器來的快。
比較
Hyper-V、KVM和Xen等虛擬機器管理程式都“基於虛擬化硬體模擬機制。這意味著,它們對系統要求很高。” 然而,容器卻使用共享的作業系統。這意味著它們在使用系統資源方面比虛擬機器管理程式要高效得多。容器不是對硬體進行虛擬化處理,而是駐留在單單一個Linux例項上。這反過來意味著,你可以“丟棄沒有用的99.9%的虛擬機器垃圾,剩下一個小巧簡潔的膠囊式容器,裡面含有你的應用程式,”,因此,藉助經過全面調優的容器系統,你就可以在同一硬體上擁有數量比使用Xen虛擬機器或KVM虛擬機器多出四到六倍的伺服器應用例項。
Docker目標
-
提供簡單輕量級的建模方式(docker的啟動是毫秒級的)
-
職責的邏輯分離:開發人員只需要關注容器中執行的程式,運維人員只需要關注對容器的管理。Docker開發提高了開發程式和部署容器的一致性
-
快速高效的開發宣告週期:縮短程式碼從開發、測試到部署上線的生命週期
-
鼓勵使用面向服務的架構:docker推薦單個容器只執行一個應用程式/程序,這樣就形成了一個分散式的應用程式模型,避免服務之間的互相影響。實現 高內聚,低耦合。
Docker缺陷
不安全 不利於調整 效能優化
kata-container
概述
-
kata containers是由OpenStack基金會管理,但獨立於OpenStack專案之外的容器專案。kata containers整合了Intel的 Clear Containers 和 Hyper.sh 的 runV,能夠支援不同平臺的硬體 (x86-64,arm等),並符合OCI(Open Container Initiative)規範,同時還可以相容k8s的 CRI(Container Runtime Interface)介面規範。專案包含幾個配套元件,即Runtime,Agent, Proxy,Shim等。專案已於6月份release了1.0版本。
-
從docker架構上看,kata-container和原來的runc是平級的。大家知道docker只是管理容器生命週期的框架,真正啟動容器最早用的是LXC,然後是runc,現在也可以換成kata了。所以說kata-container可以當做docker的一個外掛,啟動kata-container可以通過docker命令。Kata最大的亮點是解決了傳統容器共享核心的安全和隔離問題,辦法是讓每個容器執行在一個輕量級的虛擬機器中,使用單獨的核心。
-
Kata Container 是兩個現有的開源專案合併:Intel Clear Containers和Hyper runV。
Intel Clear Container專案的目標是通過英特爾®虛擬化技術(VT)解決容器內部的安全問題,並且能夠將容器作為輕量級虛擬機器(VM)啟動,提供了一個可選的執行時間,專注於效能(<100ms啟動時間),可與Kubernetes 和Docker 等常用容器環境互操作。英特爾®Clear Container表明,安全性和效能不必是一個折衷,將硬體隔離的安全性與容器的效能可以兼得。 -
docker 預設使用 runC 建立容器,所以可以在kata container可以在docker container外面再包一層VM,實現安全性。
k8s 為pods建立服務的傳統方法是採用docker建立容器,由容器提供pods服務,但現在可以通過kata container建立VM,在VM中再建立pods服務,更安全。pods是一個或多個container。
總結
-
docker容器,效能高,不安全;
-
VM虛擬化,安全性好,效能損耗大;
-
Kata Container輕量級虛擬機器的容器,即安全,效能也高。
-
開源容器專案Kata Containers,旨在將虛擬機器(VM)的安全優勢與容器的速度和可管理性統一起來。
-
Container技術和伺服器虛擬化並不是一樣的技術:
- 兩者雖然都屬於虛擬化的技術,目標都是為了將一套應用程式所需的執行環境打包起來,建立一個孤立環境,方便在不同的硬體中移動,但兩者的運作思維截然不同。簡單來說,傳統虛擬化技術如 vSphere或Hyper-V是以作業系統為中心,而Container技術則是一種以應用程式為中心的虛擬化技術。
- 傳統虛擬化技術從作業系統層下手,目標是建立一個可以用來執行整套作業系統的沙盒獨立執行環境,習慣以虛擬機器(Virtual Machine)來稱呼。Container技術則是直接將一個應用程式所需的相關程式程式碼、函式庫、環境配置檔案都打包起來建立沙盒執行環境,Container技術產生的環境就稱為Container。
-
兩者具體區別
虛擬機器需要安裝作業系統(安裝Guest OS)才能執行應用程式,而Container內不需要安裝作業系統就能執行應用程式
Container技術不是在OS外來建立虛擬環境,而是在OS內的核心繫統層來打造虛擬執行環境,透過共享Host OS的作法,取代一個一個Guest OS的功用。Container也因此被稱為是OS層的虛擬化技術。
Container是輕量級虛擬化技術
Container技術採取共享Host OS的作法,而不需在每一個Container內執行Guest OS,因此建立Container不需要等待作業系統開機時間,不用1分鐘或幾秒鐘就可以啟用,遠比需要數分鐘甚至數十分鐘才能開啟的傳統虛擬機器來的快。
Container技術的發展
早在1982年,Unix系統內建的chroot機制也是一種Container技術。其他如1998年的FreeBSD jails、2005年出現的Solaris Zones和OpenVZ,或像是Windows系統2004年就有的Sandboxie機制都屬於在作業系統內建立孤立虛擬執行環境的作法,都可稱為是Container的技術。直到2013年,dotCloud這家PaaS服務公司開源釋出了一套將Container標準化的平臺Docker,大受歡迎,所以,dotCloud決定以Docker為名成立新公司力推。