- Kubernetes進(jìn)階實(shí)戰(zhàn)
- 馬永亮
- 2036字
- 2019-03-13 14:20:33
1.1 容器技術(shù)概述
容器是一種輕量級(jí)、可移植、自包含的軟件打包技術(shù),它使得應(yīng)用程序可以在幾乎任何地方以相同的方式運(yùn)行。軟件開發(fā)工程師在自己筆記本上創(chuàng)建并測(cè)試完成的容器,無須任何修改就能夠在生產(chǎn)系統(tǒng)的虛擬機(jī)、物理機(jī)或云主機(jī)上運(yùn)行。
容器由應(yīng)用程序本身和它的環(huán)境依賴(庫和其他應(yīng)用程序)兩部分組成,并在宿主機(jī)(Host)操作系統(tǒng)的用戶空間中運(yùn)行,但與操作系統(tǒng)的其他進(jìn)程互相隔離,它們的實(shí)現(xiàn)機(jī)制有別于諸如VMWare、KVM和Xen等實(shí)現(xiàn)方案的傳統(tǒng)虛擬化技術(shù)。容器與虛擬機(jī)的對(duì)比關(guān)系如圖1-1所示。

圖1-1 容器和虛擬機(jī)對(duì)比(http://www.nuagenetworks.net/blog/containers/)
由于同一個(gè)宿主機(jī)上的所有容器都共享其底層操作系統(tǒng)(內(nèi)核空間),這就使得容器在體積上要比傳統(tǒng)的虛擬機(jī)小得多。另外,啟動(dòng)容器無須啟動(dòng)整個(gè)操作系統(tǒng),所以容器部署和啟動(dòng)的速度更快,開銷更小,也更容易遷移。事實(shí)上,容器賦予了應(yīng)用程序超強(qiáng)的可移植能力。
1.1.1 容器技術(shù)的功用
IT系統(tǒng)在架構(gòu)上已經(jīng)迭代數(shù)十年之久,其環(huán)境復(fù)雜程度日趨加重,直有積重難返之勢(shì)。現(xiàn)如今,應(yīng)用程序開發(fā)人員通常需要同時(shí)使用多種服務(wù)構(gòu)建,并要架構(gòu)IT信息系統(tǒng),涉及MQ、Cache和DB等,且很可能要部署到不同的環(huán)境中,如物理服務(wù)器、虛擬服務(wù)器、私有云或公有云之上。這些不同的主機(jī)或許還有著不同的系統(tǒng)環(huán)境,如RHEL、Debian或SUSE等Linux發(fā)行版,甚至是UNIX、Windows等。
結(jié)果,一方面應(yīng)用程序包含了多種服務(wù),每種服務(wù)均可能存在依賴的庫和軟件包;另一方面存在多種部署環(huán)境,而服務(wù)在運(yùn)行時(shí)又可能需要?jiǎng)討B(tài)遷移到不同的環(huán)境中。于是,各種服務(wù)和環(huán)境通過排列組合產(chǎn)生了一個(gè)大部署矩陣。應(yīng)用程序開發(fā)工程師在編寫代碼時(shí)需要考慮不同的運(yùn)行環(huán)境,而運(yùn)維工程師則需要為不同的服務(wù)和平臺(tái)配置環(huán)境。對(duì)他們雙方來說,這都必將是一項(xiàng)困難而艱巨的任務(wù)。
幸運(yùn)的是,貨運(yùn)系統(tǒng)的集裝箱機(jī)制為解決這個(gè)難題提供了有效的借鑒方案。Docker正是將集裝箱思想運(yùn)用到軟件打包上,為代碼提供了一個(gè)基于容器的標(biāo)準(zhǔn)化運(yùn)輸系統(tǒng)。Docker可以將幾乎任何應(yīng)用程序及其依賴的運(yùn)行環(huán)境都打包成一個(gè)輕量級(jí)、可移植、自包含的容器,并能夠運(yùn)行于支持Docker容器引擎的所有操作系統(tǒng)之上。簡言之,容器的優(yōu)勢(shì)主要表現(xiàn)在以下兩個(gè)方面。
?□應(yīng)用程序開發(fā)工程師:“一次構(gòu)建,到處運(yùn)行”(Build Once, Run Anywhere)。容器意味著環(huán)境隔離和可重復(fù)性,開發(fā)人員只需為應(yīng)用創(chuàng)建一個(gè)運(yùn)行環(huán)境,并將其打包成容器便可在各種部署環(huán)境上運(yùn)行,并與它所在的宿主機(jī)環(huán)境隔離。
?□運(yùn)維工程師:“一次配置,運(yùn)行所有”(Configure Once, Run Anything)。一旦配置好標(biāo)準(zhǔn)的容器運(yùn)行時(shí)環(huán)境,服務(wù)器就可以運(yùn)行任何容器,這使得運(yùn)維人員的工作變得更高效、一致和可重復(fù)。容器消除了開發(fā)、測(cè)試、生產(chǎn)環(huán)境的不一致性。
1.1.2 容器簡史
容器技術(shù)的概念最初出現(xiàn)在2000年,當(dāng)時(shí)稱為FreeBSD jail,這種技術(shù)可將FreeBSD系統(tǒng)分區(qū)為多個(gè)子系統(tǒng)(也稱為Jail)。2001年,通過Jacques Gélinas的VServer項(xiàng)目,隔離環(huán)境的實(shí)施理念進(jìn)入了Linux領(lǐng)域。
Jail的目的是讓進(jìn)程在經(jīng)過修改的chroot環(huán)境中創(chuàng)建,而不會(huì)脫離和影響整個(gè)系統(tǒng)——chroot環(huán)境對(duì)文件系統(tǒng)、網(wǎng)絡(luò)和用戶的訪問都實(shí)現(xiàn)了虛擬化。然而,Jail在實(shí)施方面存在著不少的局限性,當(dāng)它與Namespaces和CGroups等技術(shù)結(jié)合在一起之后,才讓這種隔離方法從構(gòu)想變?yōu)榱爽F(xiàn)實(shí)。后來,Linux容器項(xiàng)目(LXC)又為其添加了一些用戶常用的工具、模板、庫和語言綁定,從而較好地改善了用戶使用容器技術(shù)時(shí)的體驗(yàn)。
Docker在LXC項(xiàng)目的基礎(chǔ)上,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等方面對(duì)容器技術(shù)進(jìn)行了進(jìn)一步的封裝,極大地簡化了容器的創(chuàng)建和維護(hù)過程,從而促進(jìn)了容器技術(shù)的大流行。Docker最初是由dotCloud公司創(chuàng)始人Solomon Hykes在法國期間發(fā)起的一個(gè)公司內(nèi)部項(xiàng)目,并于2013年3月以Apache 2.0授權(quán)協(xié)議開源,其項(xiàng)目代碼托管于GitHub之上。雖然其最初的實(shí)現(xiàn)是基于LXC項(xiàng)目的,但Docker在后來的0.7版本轉(zhuǎn)為使用自行開發(fā)的libcontainer容器引擎,而1.11版本又將其換作了runC和containerd。
提示
在2017年4月舉行的DockerCon上,Docker公司將GitHub上原本隸屬于Docker組織的Docker項(xiàng)目直接轉(zhuǎn)移到了一個(gè)新的名為Moby的組織下,并將其重命名為Moby項(xiàng)目。
1.1.3 Docker的功能限制
Docker本身非常適合用于管理單個(gè)容器,不過,一旦開始使用越來越多的容器封裝和運(yùn)行應(yīng)用程序,必將會(huì)導(dǎo)致其管理和編排變得越來越困難。最終,用戶不得不對(duì)容器實(shí)施分組,以便跨所有容器提供網(wǎng)絡(luò)、安全、監(jiān)控等服務(wù)。于是,以Kubernetes為代表的容器編排系統(tǒng)應(yīng)運(yùn)而生。
真正的生產(chǎn)型應(yīng)用會(huì)涉及多個(gè)容器,這些容器必須跨多個(gè)服務(wù)器主機(jī)進(jìn)行部署。Kubernetes可以提供所需的編排和管理功能,以便用戶針對(duì)這些工作負(fù)載輕松完成大規(guī)模容器部署。而且,借助于Kubernetes的編排功能,用戶可以構(gòu)建出跨多個(gè)容器的應(yīng)用服務(wù),并且可以實(shí)現(xiàn)跨集群調(diào)度、擴(kuò)展容器,以及長期持續(xù)管理這些容器的健康狀況等。使用中,Kubernetes還需要與網(wǎng)絡(luò)、存儲(chǔ)、安全性、監(jiān)控及其他服務(wù)進(jìn)行整合,以提供全面的容器基礎(chǔ)架構(gòu),如圖1-2所示。

圖1-2 容器與容器編排(來源:RedHat Inc.)
Kubernetes利用容器的擴(kuò)縮容機(jī)制解決了許多常見的問題,它將容器歸類到一起,形成“容器集”(Pod),為分組的容器增加了一個(gè)抽象層,用于幫助用戶調(diào)度工作負(fù)載(workload),并為這些容器提供所需的聯(lián)網(wǎng)和存儲(chǔ)等服務(wù)。Kubernetes的其他部分可幫助用戶在這些Pod之間達(dá)成負(fù)載均衡,同時(shí)確保運(yùn)行正確數(shù)量的容器,以充分支持實(shí)際的工作負(fù)載。
- OpenDaylight Cookbook
- Git Version Control Cookbook
- Vue.js 3.x從入門到精通(視頻教學(xué)版)
- WSO2 Developer’s Guide
- Raspberry Pi for Secret Agents(Third Edition)
- Vue.js 3.0源碼解析(微課視頻版)
- The DevOps 2.4 Toolkit
- Python深度學(xué)習(xí):基于TensorFlow
- 微信小程序開發(fā)與實(shí)戰(zhàn)(微課版)
- Access 2010數(shù)據(jù)庫應(yīng)用技術(shù)實(shí)驗(yàn)指導(dǎo)與習(xí)題選解(第2版)
- Hadoop大數(shù)據(jù)分析技術(shù)
- Python Programming for Arduino
- OpenCV Android開發(fā)實(shí)戰(zhàn)
- Mobile Forensics:Advanced Investigative Strategies
- 金融商業(yè)數(shù)據(jù)分析:基于Python和SAS