Kubernetes(K8s)
一秦踪、認(rèn)識虛擬化
1照卦、什么是虛擬化
在計(jì)算機(jī)中,虛擬化(英語:Virtualization)是一種資源管理技術(shù)捺檬,是將計(jì)算機(jī)的各種實(shí)體資源,如服務(wù)器贸铜、網(wǎng)絡(luò)堡纬、內(nèi)存及存儲等,予以抽象蒿秦、轉(zhuǎn)換后呈現(xiàn)出來烤镐,打破實(shí)體結(jié)構(gòu)間的不可切割的障礙,使用戶可以比原本的組態(tài)更好的方式來應(yīng)用這些資源棍鳖。這些資源的新虛擬部份是不受現(xiàn)有資源的架設(shè)方式炮叶,地域或物理組態(tài)所限制。一般所指的虛擬化資源包括計(jì)算能力和資料存儲渡处。
虛擬化技術(shù)是一套解決方案镜悉。完整的情況需要CPU、主板芯片組医瘫、BIOS和軟件的支持侣肄,例如VMM軟件或者某些操作系統(tǒng)本身。即使只是CPU支持虛擬化技術(shù)醇份,在配合VMM的軟件情況下稼锅,也會比完全不支持虛擬化技術(shù)的系統(tǒng)有更好的性能。
在實(shí)際的生產(chǎn)環(huán)境中被芳,虛擬化技術(shù)主要用來解決高性能的物理硬件產(chǎn)能過剩和老的舊的硬件產(chǎn)能過低的重組重用缰贝,透明化底層物理硬件,從而最大化的利用物理硬件 對資源充分利用
虛擬化技術(shù)種類很多畔濒,例如:軟件虛擬化、硬件虛擬化锣咒、內(nèi)存虛擬化侵状、網(wǎng)絡(luò)虛擬化(vip)、桌面虛擬化毅整、服務(wù)虛擬化趣兄、虛擬機(jī)等等。
2悼嫉、虛擬化分類
(1)全虛擬化架構(gòu)
虛擬機(jī)的監(jiān)視器(hypervisor)是類似于用戶的應(yīng)用程序運(yùn)行在主機(jī)的OS之上艇潭,如VMware的workstation,這種虛擬化產(chǎn)品提供了虛擬的硬件。
(2)OS層虛擬化架構(gòu)
(3)硬件層虛擬化
硬件層的虛擬化具有高性能和隔離性蹋凝,因?yàn)閔ypervisor直接在硬件上運(yùn)行鲁纠,有利于控制VM的OS訪問硬件資源,使用這種解決方案的產(chǎn)品有VMware ESXi 和 Xen server
Hypervisor是一種運(yùn)行在物理服務(wù)器和操作系統(tǒng)之間的中間軟件層,可允許多個(gè)操作系統(tǒng)和應(yīng)用共享一套基礎(chǔ)物理硬件鳍寂,因此也可以看作是虛擬環(huán)境中的“元”操作系統(tǒng)改含,它可以協(xié)調(diào)訪問服務(wù)器上的所有物理設(shè)備和虛擬機(jī),也叫虛擬機(jī)監(jiān)視器(Virtual Machine Monitor迄汛,VMM)捍壤。
Hypervisor是所有虛擬化技術(shù)的核心。當(dāng)服務(wù)器啟動(dòng)并執(zhí)行Hypervisor時(shí)鞍爱,它會給每一臺虛擬機(jī)分配適量的內(nèi)存鹃觉、CPU、網(wǎng)絡(luò)和磁盤睹逃,并加載所有虛擬機(jī)的客戶操作系統(tǒng)盗扇。 宿主機(jī)
Hypervisor是所有虛擬化技術(shù)的核心,軟硬件架構(gòu)和管理更高效唯卖、更靈活粱玲,硬件的效能能夠更好地發(fā)揮出來。常見的產(chǎn)品有:VMware拜轨、KVM抽减、Xen等等
二、云計(jì)算&容器技術(shù)
1橄碾、OpenStack與KVM卵沉、VMWare
1.1、OpenStack
OpenStack:開源管理項(xiàng)目 OpenStack是一個(gè)旨在為公共及私有云的建設(shè)與管理提供軟件的開源項(xiàng)目法牲。它不是一個(gè)軟件史汗,而是由幾個(gè)主要的組件組合起來完成一些具體的工作。OpenStack由以下五個(gè)相對獨(dú)立的組件構(gòu)成:
· OpenStack Compute(Nova)是一套控制器拒垃,用于虛擬機(jī)計(jì)算或使用群組啟動(dòng)虛擬機(jī)實(shí)例;
· OpenStack鏡像服務(wù)(Glance)是一套虛擬機(jī)鏡像查找及檢索系統(tǒng)停撞,實(shí)現(xiàn)虛擬機(jī)鏡像管理;
· OpenStack對象存儲(Swift)是一套用于在大規(guī)模可擴(kuò)展系統(tǒng)中通過內(nèi)置冗余及容錯(cuò)機(jī)制悼瓮,以對象為單位的存儲系統(tǒng)戈毒,類似于Amazon S3;
· OpenStack Keystone,用于用戶身份服務(wù)與資源管理以及
· OpenStack Horizon横堡,基于Django的儀表板接口埋市,是個(gè)圖形化管理前端。 這個(gè)起初由美國國家航空航天局和Rackspace在2010年末合作研發(fā)的開源項(xiàng)目命贴,旨在打造易于部署道宅、功能豐富且易于擴(kuò)展的云計(jì)算平臺食听。OpenStack項(xiàng)目的首要任務(wù)是簡化云的部署過程并為其帶來良好的可擴(kuò)展性,企圖成為數(shù)據(jù)中心的操作系統(tǒng)污茵,即云操作系統(tǒng)樱报。
*Openstack*****項(xiàng)目層級關(guān)系:
· 第一層是基礎(chǔ)設(shè)施層,這一層主要包含Nova省咨、Glance和Keystone肃弟,如果我們要想得到最基本的基礎(chǔ)設(shè)施的服務(wù),必須安裝部署這三個(gè)項(xiàng)目零蓉。
· 第二層是擴(kuò)展基礎(chǔ)設(shè)施層笤受,這一層可以讓我們得到更多跟基礎(chǔ)設(shè)施相關(guān)的高級服務(wù),主要包含Cinder敌蜂、Swift箩兽、Neutron、Designate和Ironic等章喉,其中Cinder提供塊存儲汗贫,Swift提供對象存儲,Neutron提供網(wǎng)絡(luò)服務(wù)秸脱,Designate提供DNS服務(wù)落包,Ironic提供裸機(jī)服務(wù)。
· 第三層是可選的增強(qiáng)特性摊唇,幫用戶提供一些更加高級的功能咐蝇,主要包含Ceilometer觅闽、Horizon和Barbican侈净,其中Ceilometer提供監(jiān)控、計(jì)量服務(wù)晕鹊,Horizon提供用戶界面岛请,Barbican提供秘鑰管理服務(wù)旭寿。
· 第四層主要是消費(fèi)型服務(wù),所謂的消費(fèi)型服務(wù)崇败,主要是指第四層的服務(wù)都需要通過使用前三層的服務(wù)來工作盅称。
第四層主要有Heat、Magnum后室、Sahara微渠、Solum和Murano等,其中Heat主要提供orchestration服務(wù)咧擂,Magnum主要提供容器服務(wù),Sahara主要提供大數(shù)據(jù)服務(wù)檀蹋,我們可以通過Sahara很方便地部署Hadoop松申、Spark集群云芦。Solum主要提供應(yīng)用開發(fā)的服務(wù),并且可以提供一些類似于CI/CD的功能贸桶。Muarno主要提供應(yīng)用目錄的服務(wù)舅逸,類似于App Store,就是用戶可以把一些常用的應(yīng)用發(fā)布出來供其他用戶去使用皇筛。最右邊是Kolla琉历,Kolla的主要功能是容器化所有的OpenStack服務(wù),便于OpenStack安裝部署和升級水醋。
1.2旗笔、KVM
KVM(Kernel-based Virtual Machine)基于內(nèi)核的虛擬機(jī) KVM是集成到Linux內(nèi)核的Hypervisor,是X86架構(gòu)且硬件支持虛擬化技術(shù)(Intel VT或AMD-V)的Linux的全虛擬化解決方案拄踪。它是Linux的一個(gè)很小的模塊蝇恶,利用Linux做大量的事,如任務(wù)調(diào)度惶桐、內(nèi)存管理與硬件設(shè)備交互等撮弧。 KVM最大的好處就在于它是與Linux內(nèi)核集成的,所以速度很快姚糊。
1.3贿衍、VMWARE
VMWare (Virtual Machine ware)是一個(gè)“虛擬PC”虛擬機(jī)管理管理軟件。它的產(chǎn)品可以使你在一臺機(jī)器上同時(shí)運(yùn)行二個(gè)或更多Windows救恨、DOS贸辈、LINUX系統(tǒng)。
與“多啟動(dòng)”系統(tǒng)相比忿薇,VMWare采用了完全不同的概念裙椭。多啟動(dòng)系統(tǒng)在一個(gè)時(shí)刻只能運(yùn)行一個(gè)系統(tǒng),在系統(tǒng)切換時(shí)需要重新啟動(dòng)機(jī)器署浩。VMWare是真正“同時(shí)”運(yùn)行揉燃,多個(gè)操作系統(tǒng)在主系統(tǒng)的平臺上,就象標(biāo)準(zhǔn)Windows應(yīng)用程序那樣切換筋栋。而且每個(gè)操作系統(tǒng)你都可以進(jìn)行虛擬的分區(qū)炊汤、配置而不影響真實(shí)硬盤的數(shù)據(jù),你甚至可以通過網(wǎng)卡將幾臺虛擬機(jī)用網(wǎng)卡連接為一個(gè)局域網(wǎng)弊攘,極其方便抢腐。安裝在VMware操作系統(tǒng)性能上比直接安裝在硬盤上的系統(tǒng)低不少,因此襟交,比較適合學(xué)習(xí)和測試迈倍。
2、容器的發(fā)展
2.1捣域、LXC
LXC指代的是Linux Containers啼染,其功能通過Cgroups以及Linux Namespaces實(shí)現(xiàn)宴合。也是第一套完整的Linux容器管理實(shí)現(xiàn)方案。在LXC出現(xiàn)之前迹鹅, Linux上已經(jīng)有了類似 Linux-Vserver卦洽、OpenVZ 和 FreeVPS。雖然這些技術(shù)都已經(jīng)成熟斜棚,但是這些解決方案還沒有將它們的容器支持集成到主流 Linux 內(nèi)核阀蒂。相較于其它容器技術(shù),LXC能夠在無需任何額外補(bǔ)丁的前提下運(yùn)行在原版Linux內(nèi)核之上弟蚀。目前LXC項(xiàng)目由Canonical有限公司負(fù)責(zé)贊助及托管蚤霞。
2.2、Docker
Docker項(xiàng)目最初是由一家名為DotCloud的平臺即服務(wù)廠商所打造粗梭,其后該公司更名為Docker争便。Docker在起步階段使用LXC,而后利用自己的Libcontainer庫將其替換下來断医。與其它容器平臺不同滞乙,Docker引入了一整套與容器管理相關(guān)的生態(tài)系統(tǒng)。其中包括一套高效的分層式容器鏡像模型鉴嗤、一套全局及本地容器注冊表斩启、一個(gè)精簡化REST API以及一套命令行界面等等。
與Docker具有同樣目標(biāo)功能的另外一種容器技術(shù)就是CoreOS公司開發(fā)的Rocket. Rocket基于App Container規(guī)范并使其成為一項(xiàng)更為開放的標(biāo)準(zhǔn)醉锅。
3兔簇、Docker容器技術(shù)
3.1、Docker歷史
2010年硬耍,幾個(gè)搞IT的年輕人垄琐,在美國舊金山成立了一家名叫“dotCloud”的公司。
這家公司主要提供基于PaaS的云計(jì)算技術(shù)服務(wù)经柴。具體來說狸窘,是和LXC有關(guān)的容器技術(shù)。LXC坯认,就是Linux容器虛擬技術(shù)(Linux container)翻擒、后來,dotCloud公司將自己的容器技術(shù)進(jìn)行了簡化和標(biāo)準(zhǔn)化牛哺,并命名為——Docker陋气。
Docker技術(shù)誕生之后,并沒有引起行業(yè)的關(guān)注引润。而dotCloud公司巩趁,作為一家小型創(chuàng)業(yè)企業(yè),在激烈的競爭之下淳附,也步履維艱晶渠。正當(dāng)他們快要堅(jiān)持不下去的時(shí)候凰荚,腦子里蹦出了“開源”的想法。
什么是“開源”褒脯?開源,就是開放源代碼缆毁。也就是將原來內(nèi)部保密的程序源代碼開放給所有人番川,然后讓大家一起參與進(jìn)來,貢獻(xiàn)代碼和意見脊框。
Open Source颁督,開源
有的軟件是一開始就開源的。也有的軟件浇雹,是混不下去沉御,創(chuàng)造者又不想放棄,所以選擇開源昭灵。自己養(yǎng)不活吠裆,就吃“百家飯”嘛。
2013年3月烂完,dotCloud公司的創(chuàng)始人之一试疙,Docker之父,28歲的Solomon?Hykes正式?jīng)Q定抠蚣,將Docker項(xiàng)目開源祝旷。
不開則已,一開驚人嘶窄。
越來越多的IT工程師發(fā)現(xiàn)了Docker的優(yōu)點(diǎn)怀跛,然后蜂擁而至,加入Docker開源社區(qū)柄冲。
Docker的人氣迅速攀升吻谋,速度之快,令人瞠目結(jié)舌羊初。
開源當(dāng)月滨溉,Docker 0.1版本發(fā)布。此后的每一個(gè)月长赞,Docker都會發(fā)布一個(gè)版本晦攒。到2014年6月9日,Docker 1.0版本正式發(fā)布得哆。
此時(shí)的Docker脯颜,已經(jīng)成為行業(yè)里人氣最火爆的開源技術(shù),沒有之一贩据。甚至像Google栋操、微軟闸餐、Amazon、VMware這樣的巨頭矾芙,都對它青睞有加舍沙,表示將全力支持。
Docker火了之后剔宪,dotCloud公司干脆把公司名字也改成了Docker Inc.拂铡。
Docker和容器技術(shù)為什么會這么火爆?說白了葱绒,就是因?yàn)樗拜p”感帅。
3.2、Docker原理
容器是一種輕量級的虛擬化技術(shù)地淀,因?yàn)樗摂M機(jī)比起來失球,它少了一層 hypervisor 層。先看一下下面這張圖帮毁,這張圖簡單描述了一個(gè)容器的啟動(dòng)過程实苞。
注: hypervisor:一種運(yùn)行在物理服務(wù)器和操作系統(tǒng)之間的中間層軟件,可以允許多個(gè)操作系統(tǒng)和應(yīng)用共享一套基礎(chǔ)物理硬件作箍∮擦海可以將hypervisor看做是虛擬環(huán)境中的“元”操作系統(tǒng),可以協(xié)調(diào)訪問服務(wù)器上的所有物理設(shè)備和虛擬機(jī)胞得,所以又稱為虛擬機(jī)監(jiān)視器(virtual machine monitor)荧止。
hypervisor是所有虛擬化技術(shù)的核心,非中斷的支持多工作負(fù)載遷移是hypervisor的基本功能阶剑。當(dāng)服務(wù)器啟動(dòng)并執(zhí)行hypervisor時(shí)跃巡,會給每一臺虛擬機(jī)分配適量的內(nèi)存,cpu牧愁,網(wǎng)絡(luò)和磁盤資源素邪,并且加載所有虛擬機(jī)的客戶操作系統(tǒng)。
最下面是一個(gè)磁盤猪半,容器的鏡像是存儲在磁盤上面的兔朦。上層是一個(gè)容器引擎,容器引擎可以是 docker磨确,也可以是其它的容器引擎沽甥。引擎向下發(fā)一個(gè)請求,比如說創(chuàng)建容器乏奥,這時(shí)候它就把磁盤上面的容器鏡像運(yùn)行成在宿主機(jī)上的一個(gè)進(jìn)程摆舟。
對于容器來說,最重要的是怎么保證這個(gè)進(jìn)程所用到的資源是被隔離和被限制住的,在 Linux 內(nèi)核上面是由 cgroup 和 namespace 這兩個(gè)技術(shù)來保證的
3.3恨诱、NameSpace
namespace 是用來做資源隔離的媳瞪,在 Linux 內(nèi)核上有七種 namespace,docker 中用到了前六種照宝。第七種 cgroup namespace 在 docker 本身并沒有用到蛇受,但是在 runC 實(shí)現(xiàn)中實(shí)現(xiàn)了 cgroup namespace
[圖片上傳失敗...(image-3792bc-1631429687773)]
1)第一個(gè)是 mout namespace。mout namespace 就是保證容器看到的文件系統(tǒng)的視圖硫豆,是容器鏡像提供的一個(gè)文件系統(tǒng)龙巨,也就是說它看不見宿主機(jī)上的其他文件,除了通過 -v 參數(shù) bound 的那種模式熊响,是可以把宿主機(jī)上面的一些目錄和文件,讓它在容器里面可見的诗赌;
2)第二個(gè)是 uts namespace汗茄,這個(gè) namespace 主要是隔離了 hostname 和 domain;
3)第三個(gè)是 pid namespace铭若,這個(gè) namespace 是保證了容器的 init 進(jìn)程是以 1 號進(jìn)程來啟動(dòng)的洪碳;
4)第四個(gè)是網(wǎng)絡(luò) namespace,除了容器用 host 網(wǎng)絡(luò)這種模式之外叼屠,其他所有的網(wǎng)絡(luò)模式都有一個(gè)自己的 network namespace 的文件瞳腌;
5)第五個(gè)是 user namespace,這個(gè) namespace 是控制用戶 UID 和 GID 在容器內(nèi)部和宿主機(jī)上的一個(gè)映射镜雨,不過這個(gè) namespace 用的比較少嫂侍;
6)第六個(gè)是 IPC namespace,這個(gè) namespace 是控制了進(jìn)程兼通信的一些東西荚坞,比方說信號量挑宠;
7)第七個(gè)是 cgroup namespace,上圖右邊有兩張示意圖颓影,分別是表示開啟和關(guān)閉 cgroup namespace各淀。用 cgroup namespace 帶來的一個(gè)好處是容器中看到的 cgroup 視圖是以根的形式來呈現(xiàn)的,這樣的話就和宿主機(jī)上面進(jìn)程看到的 cgroup namespace 的一個(gè)視圖方式是相同的诡挂;另外一個(gè)好處是讓容器內(nèi)部使用 cgroup 會變得更安全碎浇。
4、Docker&KVM&OpenStack
4.1璃俗、Docker&KVM
VM 利用 Hypervisor 虛擬化技術(shù)來模擬 CPU奴璃、內(nèi)存等硬件資源,這樣就可以在宿主機(jī)上建立一個(gè) Guest OS旧找,這是常說的安裝一個(gè)虛擬機(jī)溺健。
每一個(gè) Guest OS 都有一個(gè)獨(dú)立的內(nèi)核,比如 Ubuntu、CentOS 甚至是 Windows 等鞭缭,在這樣的 Guest OS 之下剖膳,每個(gè)應(yīng)用都是相互獨(dú)立的,VM 可以提供一個(gè)更好的隔離效果岭辣。但這樣的隔離效果需要付出一定的代價(jià)吱晒,因?yàn)樾枰岩徊糠值挠?jì)算資源交給虛擬化,這樣就很難充分利用現(xiàn)有的計(jì)算資源沦童,并且每個(gè) Guest OS 都需要占用大量的磁盤空間仑濒,比如 Windows 操作系統(tǒng)的安裝需要 10~30G 的磁盤空間,Ubuntu 也需要 5~6G偷遗,同時(shí)這樣的方式啟動(dòng)很慢墩瞳。正是因?yàn)樘摂M機(jī)技術(shù)的缺點(diǎn),催生出了容器技術(shù)氏豌。
容器是針對于進(jìn)程而言的喉酌,因此無需 Guest OS,只需要一個(gè)獨(dú)立的文件系統(tǒng)提供其所需要文件集合即可泵喘。所有的文件隔離都是進(jìn)程級別的泪电,因此啟動(dòng)時(shí)間快于 VM,并且所需的磁盤空間也小于 VM纪铺。當(dāng)然了相速,進(jìn)程級別的隔離并沒有想象中的那么好,隔離效果相比 VM 要差很多鲜锚。
總體而言突诬,容器和 VM 相比,各有優(yōu)劣烹棉,因此容器技術(shù)也在向著強(qiáng)隔離方向發(fā)展攒霹。
Docker提供了一種程序運(yùn)行的容器,同時(shí)保證這些容器相互隔離浆洗。虛擬機(jī)也有類似的功能催束,但是它通過Hypervisor創(chuàng)建了一個(gè)完整的操作系統(tǒng)棧。不同于虛擬機(jī)的方式伏社,Docker依賴于Linux自帶的LXC(Linux Containers)技術(shù)抠刺。LXC利用了Linux可以對進(jìn)程做內(nèi)存、CPU摘昌、網(wǎng)絡(luò)隔離的特性速妖。Docker鏡像不需要新啟動(dòng)一個(gè)操作系統(tǒng),因此提供了一種輕量級的打包和運(yùn)行程序的方式聪黎。而且Docker能夠直接訪問硬件罕容,從而使它的I/O操作比虛擬機(jī)要快得多。
疑問:
Docker可以直接跑在物理服務(wù)器上,這引起大家的疑問:假如已經(jīng)用了Docker锦秒,還有必要使用OpenStack嗎露泊?
Docker和KVM的性能測試對比圖表。和預(yù)期的一樣旅择,啟動(dòng)KVM和Docker容器的時(shí)間差異非常顯著惭笑,而且在內(nèi)存和CPU利用率上,雙方差距非常大生真,如下表所示沉噩。
雙方巨大的性能差異,導(dǎo)致了在相同工作負(fù)載下柱蟀,KVM需要更多的CPU和內(nèi)存資源川蒙,導(dǎo)致成本上升。
4.2长已、KVM&openstack
openstack是云管理平臺派歌,其本身并不提供虛擬化功能,真正的虛擬化能力是由底層的hypervisor(如KVM痰哨、Qemu、Xen等)提供匾嘱。所謂管理平臺斤斧,就是為了方便使用而已。如果沒有openstack霎烙,一樣可以通過virsh撬讽、virt-manager來實(shí)現(xiàn)創(chuàng)建虛擬機(jī)的操作,只不過敲命令行的方式需要一定的學(xué)習(xí)成本悬垃,對于普通用戶不是很友好游昼。
KVM是最底層的hypervisor,是用來模擬CPU的運(yùn)行尝蠕,然鵝一個(gè)用戶能在KVM上完成虛擬機(jī)的操作還需要network及周邊的I/O支持烘豌,所以便借鑒了qemu進(jìn)行一定的修改,形成qemu-kvm看彼。但是openstack不會直接控制qemu-kvm廊佩,會用一個(gè)libvirt的庫去間接控制qemu-kvm。qemu-kvm的地位就像底層驅(qū)動(dòng)來著靖榕。
OpenStack:開源管理項(xiàng)目
OpenStack是一個(gè)旨在為公共及私有云的建設(shè)與管理提供軟件的開源項(xiàng)目标锄。它不是一個(gè)軟件,而是由幾個(gè)主要的組件組合起來完成一些具體的工作茁计。OpenStack由以下五個(gè)相對獨(dú)立的組件構(gòu)成:
OpenStack Compute(Nova)是一套控制器料皇,用于虛擬機(jī)計(jì)算或使用群組啟動(dòng)虛擬機(jī)實(shí)例;
OpenStack鏡像服務(wù)(Glance)是一套虛擬機(jī)鏡像查找及檢索系統(tǒng),實(shí)現(xiàn)虛擬機(jī)鏡像管理践剂;
OpenStack對象存儲(Swift)是一套用于在大規(guī)墓砥可擴(kuò)展系統(tǒng)中通過內(nèi)置冗余及容錯(cuò)機(jī)制,以對象為單位的存儲系統(tǒng)舷手,類似于Amazon S3拧簸;
OpenStack Keystone,用于用戶身份服務(wù)與資源管理以及
OpenStack Horizon男窟,基于Django的儀表板接口盆赤,是個(gè)圖形化管理前端。
這個(gè)起初由美國國家航空航天局和Rackspace在2010年末合作研發(fā)的開源項(xiàng)目歉眷,旨在打造易于部署牺六、功能豐富且易于擴(kuò)展的云計(jì)算平臺。OpenStack項(xiàng)目的首要任務(wù)是簡化云的部署過程并為其帶來良好的可擴(kuò)展性汗捡,企圖成為數(shù)據(jù)中心的操作系統(tǒng)淑际,即云操作系統(tǒng)。
KVM:開放虛擬化技術(shù)
KVM(Kernel-based Virtual Machine)是一個(gè)開源的系統(tǒng)虛擬化模塊扇住,它需要硬件支持春缕,如Intel VT技術(shù)或者AMD V技術(shù),是基于硬件的完全虛擬化艘蹋,完全內(nèi)置于Linux锄贼。
2008年,紅帽收購Qumranet獲得了KVM技術(shù)女阀,并將其作為虛擬化戰(zhàn)略的一部分大力推廣宅荤,在2011年發(fā)布RHEL6時(shí)支持KVM作為唯一的hypervisor。KVM主打的就是高性能浸策、擴(kuò)展性冯键、高安全,以及低成本庸汗。
與Linux的緣分
一個(gè)被某些熱心支持者成為云時(shí)代的Linux惫确,是公有云與私有云的開源操作系統(tǒng)。一個(gè)則是Linux內(nèi)核的一部分夫晌,將Linux轉(zhuǎn)換成一個(gè)Type-1 hypervisor雕薪,無需任何變更就能享受現(xiàn)有的Linux內(nèi)核進(jìn)程調(diào)度、內(nèi)存管理和設(shè)備支持晓淀。
OpenStack炙手可熱所袁,它如同Linux一樣,旨在構(gòu)建一個(gè)內(nèi)核凶掰,所有的軟件廠商都圍繞著它進(jìn)行工作燥爷。OpenStack的許多子項(xiàng)目蜈亩,對云計(jì)算平臺中的各種資源(如計(jì)算能力、存儲前翎、網(wǎng)絡(luò))提供敏捷管理稚配。此外,OpenStack也提供對虛擬化技術(shù)的支持港华。
KVM集成在Linux的各個(gè)主要發(fā)行版本中道川,使用Linux自身的調(diào)度器進(jìn)行管理。KVM專注于成為最好的虛擬機(jī)監(jiān)控器立宜,是使用Linux企業(yè)的不二選擇冒萄,加上它還支持Windows平臺,所以也是異構(gòu)環(huán)境的最佳選擇橙数。
OpenStack與KVM都發(fā)展迅猛
OpenStack是一個(gè)擁有眾多支持者的大項(xiàng)目尊流。時(shí)至今日,已經(jīng)有超過180家企業(yè)和400多位開發(fā)人員對這一項(xiàng)目積極地做著貢獻(xiàn)灯帮,而其生態(tài)系統(tǒng)甚至更為龐大崖技,已經(jīng)超過了5600人和850家機(jī)構(gòu)。在今年9月钟哥,OpenStack基會正式成立迎献。白金會員有紅帽、IBM與惠普等腻贰,黃金會員包括思科忿晕、戴爾與英特爾等。
OpenStack基本上是一個(gè)軟件項(xiàng)目银受,有近55萬行代碼。分解成核心項(xiàng)目鸦采、孵化項(xiàng)目宾巍,以及支持項(xiàng)目和相關(guān)項(xiàng)目。除了以上提及的五大組成渔伯,與虛擬網(wǎng)絡(luò)有關(guān)的Quantum首次被列為核心項(xiàng)目顶霞。
KVM是一個(gè)脫穎而出的開放虛擬化技術(shù)。它是由一個(gè)大型的锣吼、活躍的開放社區(qū)共同開發(fā)的选浑,紅帽、IBM玄叠、SUSE等都是其成員古徒。2011年,IBM读恃、紅帽隧膘、英特爾與惠普等建立開放虛擬化聯(lián)盟(OVA)代态,幫助構(gòu)建KVM生態(tài)系統(tǒng),提升KVM采用率疹吃。如今蹦疑,OVA已經(jīng)擁有超過250名成員公司,其中萨驶,IBM有60多位程序員專門工作于KVM開源社區(qū)歉摧。
4.3、Docker&openstack
OpenStack和Docker之間是很好的互補(bǔ)關(guān)系腔呜。Docker的出現(xiàn)能讓IaaS層的資源使用得更加充分叁温,因?yàn)镈ocker相對虛擬機(jī)來說更輕量
對資源的利用率會更加充分;
云平臺提供一個(gè)完整管理數(shù)據(jù)中心的解決方案育谬,至于用哪種hypervisor或container只是云平臺中的一個(gè)小部分券盅。像OpenStack這樣的云平臺包含了多租戶的安全、隔離膛檀、管理锰镀、監(jiān)控、存儲咖刃、網(wǎng)絡(luò)等其他部分泳炉。云數(shù)據(jù)中心的管理需要很多服務(wù)支撐,但這和用Docker還是KVM其實(shí)沒多大關(guān)系嚎杨。
Docker不是一個(gè)全功能的VM, 它有很多嚴(yán)重的缺陷花鹅,比如安全、Windows支持枫浙,因此不能完全替代KVM∨偎啵現(xiàn)在Docker社區(qū)一直在彌補(bǔ)這些缺陷,當(dāng)然這會帶來一定的性能損耗箩帚。
5真友、云原生
云原生是一條最佳路徑或者最佳實(shí)踐。更詳細(xì)的說紧帕,***云原生為用戶指定了一條低心智負(fù)擔(dān)的盔然、敏捷的、能夠以可擴(kuò)展是嗜、可復(fù)制的方式最大化地利用云的能力愈案、發(fā)揮云的價(jià)值的最佳路徑。***
云原生的技術(shù)范疇包括了以下幾個(gè)方面:
第一部分是云應(yīng)用定義與開發(fā)流程鹅搪。這包括應(yīng)用定義與鏡像制作站绪、配置 CI/CD、消息和 Streaming 以及數(shù)據(jù)庫等丽柿。
第二部分是云應(yīng)用的編排與管理流程崇众。這也是 Kubernetes 比較關(guān)注的一部分掂僵,包括了應(yīng)用編排與調(diào)度、服務(wù)發(fā)現(xiàn)治理顷歌、遠(yuǎn)程調(diào)用锰蓬、API 網(wǎng)關(guān)以及 Service Mesh。
第三部分是監(jiān)控與可觀測性眯漩。這部分所強(qiáng)調(diào)的是云上應(yīng)用如何進(jìn)行監(jiān)控芹扭、日志收集、Tracing 以及在云上如何實(shí)現(xiàn)破壞性測試赦抖,也就是混沌工程的概念舱卡。
第四部分就是云原生的底層技術(shù),比如容器運(yùn)行時(shí)队萤、云原生存儲技術(shù)轮锥、云原生網(wǎng)絡(luò)技術(shù)等。
第五部分是云原生工具集要尔,在前面的這些核心技術(shù)點(diǎn)之上舍杜,還有很多配套的生態(tài)或者周邊的工具需要使用,比如流程自動(dòng)化與配置管理赵辕、容器鏡像倉庫既绩、云原生安全技術(shù)以及云端密碼管理等。
最后則是 Serverless还惠。Serverless 是一種 PaaS 的特殊形態(tài)饲握,它定義了一種更為“極端抽象”的應(yīng)用編寫方式,包含了 FaaS 和 BaaS 這樣的概念蚕键。而無論是 FaaS 還是 BaaS救欧,其最為典型的特點(diǎn)就是按實(shí)際使用計(jì)費(fèi)(Pay as you go),因此 Serverless 計(jì)費(fèi)也是重要的知識和概念锣光。
三颜矿、容器編排技術(shù)
1、應(yīng)用部署變遷
2嫉晶、容器管理
怎么去管理這么多的容器
? 怎么橫向擴(kuò)展
? 容器down 了,怎么恢復(fù)
? 更新容器后不影響業(yè)務(wù)
? 如何監(jiān)控容器
? 如何調(diào)度新創(chuàng)建的容器
? 數(shù)據(jù)安全問題
3田篇、docker-compose
容器編排工具
4替废、Swarm
目前三大主流的容器平臺Swarm, Mesos和Kubernetes具有不同的容器調(diào)度系統(tǒng) ;
Swarm的特點(diǎn)是直接調(diào)度Docker容器泊柬,并且提供和標(biāo)準(zhǔn)Docker API一致的API椎镣。
每臺服務(wù)器上都裝有Docker并且開啟了基于HTTP的DockerAPI。這個(gè)集群中有一個(gè)SwarmManager的管理者兽赁,用來管理集群中的容器資源状答。管理者的管理對象不是服務(wù)器層面而是集群層面的冷守,也就是說通過Manager,我們只能籠統(tǒng)地向集群發(fā)出指令而不能具體到某臺具體的服務(wù)器上要干什么(這也是Swarm的根本所在)惊科。至于具體的管理實(shí)現(xiàn)方式拍摇,Manager向外暴露了一個(gè)HTTP接口,外部用戶通過這個(gè)HTTP接口來實(shí)現(xiàn)對集群的管理馆截。
5充活、Mesos
Mesos針對不同的運(yùn)行框架采用相對獨(dú)立的調(diào)度系統(tǒng),其框架提供了Docker容器的原生支持蜡娶。 Mesos并不負(fù)責(zé)調(diào)度而是負(fù)責(zé)委派授權(quán)混卵,畢竟很多框架都已經(jīng)實(shí)現(xiàn)了復(fù)雜的調(diào)度。
6窖张、Kubernetes
Kubernetes則采用了Pod和Label這樣的概念把容器組合成一個(gè)個(gè)的互相存在依賴關(guān)系的邏輯單元幕随。相關(guān)容器被組合成Pod后被共同部署和調(diào)度,形成服務(wù)(Service)宿接。這個(gè)是Kubernetes和Swarm赘淮,Mesos的主要區(qū)別。
Kubernetes(k8s)是自動(dòng)化容器操作的開源平臺澄阳,這些操作包括部署拥知,調(diào)度和節(jié)點(diǎn)集群間擴(kuò)展。如果你曾經(jīng)用過Docker容器技術(shù)部署容器碎赢,那么可以將Docker看成Kubernetes內(nèi)部使用的低級別組件低剔。Kubernetes不僅僅支持Docker,還支持Rocket肮塞,這是另一種容器技術(shù)襟齿。
使用Kubernetes可以:
自動(dòng)化容器的部署和復(fù)制
隨時(shí)擴(kuò)展或收縮容器規(guī)模
將容器組織成組,并且提供容器間的負(fù)載均衡
很容易地升級應(yīng)用程序容器的新版本
提供容器彈性枕赵,如果容器失效就替換它猜欺,等等...