云計(jì)算筆記一:Docker與K8S

Docker產(chǎn)生的原因

研發(fā)本地開(kāi)發(fā)的代碼,交付運(yùn)維部署到生產(chǎn)環(huán)境時(shí)稠茂,會(huì)由于環(huán)境、配置等各種非代碼因素的原因無(wú)法順利發(fā)布情妖,每次發(fā)版時(shí)需要浪費(fèi)人力物力去排查問(wèn)題睬关。

Docker的簡(jiǎn)介

Docker屬于容器,而容器就是將軟件打包成標(biāo)準(zhǔn)化單元毡证,以用于開(kāi)發(fā)电爹、交付和部署。以前是代碼即應(yīng)用料睛,現(xiàn)在是運(yùn)行環(huán)境丐箩、代碼,才是應(yīng)用恤煞,不會(huì)出現(xiàn)本地可以運(yùn)行屎勘,但是生產(chǎn)卻無(wú)法運(yùn)行。一次構(gòu)建處處運(yùn)行居扒,減少人工運(yùn)行成本挑秉。

圖1:Docker將除內(nèi)核外的內(nèi)容統(tǒng)一打包
圖2:圖解Docker

虛擬機(jī)和Docker區(qū)別

虛擬機(jī)模擬的是整套環(huán)境,包括硬件苔货、環(huán)境犀概。虛擬機(jī)的啟動(dòng)時(shí)長(zhǎng)是分鐘級(jí),而docker可以做到秒級(jí)夜惭。虛擬機(jī)資源占用多姻灶、冗余步驟多、啟動(dòng)慢诈茧。

虛擬機(jī)時(shí)在一個(gè)操作系統(tǒng)里運(yùn)行另外一種操作系統(tǒng)产喉,比如在Windows系統(tǒng)里面運(yùn)行Linux,應(yīng)用程序無(wú)感知。因?yàn)樘摂M機(jī)看上去和真實(shí)系統(tǒng)一模一樣敢会,而對(duì)于底層系統(tǒng)來(lái)說(shuō)曾沈,虛擬機(jī)就是一個(gè)普通文件,不需要了就刪除鸥昏,對(duì)其他部分毫無(wú)影響塞俱。

圖3:虛擬機(jī)案例

容器和虛擬機(jī)區(qū)別,容器不再是整套環(huán)境的模擬吏垮,而是需要的庫(kù)資源和設(shè)置障涯,和應(yīng)用代碼綁定在一個(gè)環(huán)境中。

傳統(tǒng)虛擬機(jī)技術(shù)是虛擬出一套硬件后膳汪,在其上運(yùn)行一個(gè)完整操作系統(tǒng)唯蝶,在該系統(tǒng)上再運(yùn)行所需應(yīng)用進(jìn)程;而容器內(nèi)的應(yīng)用進(jìn)程直接運(yùn)行于宿主的內(nèi)核遗嗽,容器內(nèi)沒(méi)有自己的內(nèi)核粘我,而且也沒(méi)有進(jìn)行硬件虛擬。因此容器要比傳統(tǒng)虛擬機(jī)更為輕便。

圖4:虛擬機(jī)容器對(duì)照

鏡像簡(jiǎn)介

Docker包括三個(gè)基本概念:鏡像、容器屈嗤、倉(cāng)庫(kù)删豺。

鏡像(Image)——一個(gè)特殊的文件系統(tǒng),即可直接在OS上運(yùn)行的代碼和環(huán)境

容器(Container)——鏡像運(yùn)行時(shí)的實(shí)體仔涩,正在對(duì)外提供服務(wù)的實(shí)體

倉(cāng)庫(kù)(Repository)——集中存放鏡像文件的地方

容器鏡像是輕量的、可執(zhí)行的獨(dú)立軟件包 ,包含軟件運(yùn)行所需的所有內(nèi)容:代碼搁料、運(yùn)行時(shí)環(huán)境、系統(tǒng)工具系羞、系統(tǒng)庫(kù)和設(shè)置郭计。鏡像解決的問(wèn)題是,彈性擴(kuò)容數(shù)十臺(tái)集群的機(jī)器椒振,不可能通過(guò)人手工去維護(hù)昭伸,而是通過(guò)鏡像去復(fù)制粘貼到不同服務(wù)器上去。

Docker - Build, Ship, and Run Any App, Anywhere

Build(構(gòu)建鏡像):鏡像就像是集裝箱包括文件以及運(yùn)行環(huán)境等等資源澎迎。

Ship(運(yùn)輸鏡像):主機(jī)和鏡像倉(cāng)庫(kù)間運(yùn)輸庐杨,這里的倉(cāng)庫(kù)就像是超級(jí)碼頭一樣选调。

Run (運(yùn)行鏡像):運(yùn)行的鏡像就是一個(gè)容器,容器就是運(yùn)行程序的地方灵份。

Docker運(yùn)行過(guò)程也就是去倉(cāng)庫(kù)把鏡像拉到本地仁堪,然后用一條命令把鏡像運(yùn)行起來(lái)變成容器。所以填渠,我們也常常將Docker稱為碼頭工人或碼頭裝卸工弦聂,這和Docker的中文翻譯搬運(yùn)工人如出一轍。

容器服務(wù)K8S

Kubernetes是Google在2014年開(kāi)源的一個(gè)容器集群管理系統(tǒng)氛什,Kubernetes簡(jiǎn)稱K8S莺葫。K8S用于容器化應(yīng)用程序的部署,擴(kuò)展和管理枪眉。K8S提供了容器編排捺檬,資源調(diào)度,彈性伸縮瑰谜,部署管理欺冀,服務(wù)發(fā)現(xiàn)等一系列功能。

容器解決了研發(fā)環(huán)境和生產(chǎn)環(huán)境一致性的問(wèn)題萨脑。而Kubernetes目標(biāo)是讓批量部署容器化應(yīng)用簡(jiǎn)單高效隐轩。

容器K8S特點(diǎn)

【1】自我修復(fù):在節(jié)點(diǎn)故障時(shí)重新啟動(dòng)失敗的容器,替換和重新部署渤早,保證預(yù)期的副本數(shù)量职车;殺死健康檢查失敗的容器,并且在未準(zhǔn)備好之前不會(huì)處理客戶端請(qǐng)求鹊杖,確保線上服務(wù)不中斷悴灵。

【2】彈性伸縮:使用命令、UI或者基于CPU使用情況自動(dòng)快速擴(kuò)容和縮容應(yīng)用程序?qū)嵗畋停WC應(yīng)用業(yè)務(wù)高峰并發(fā)時(shí)的高可用性积瞒;業(yè)務(wù)低峰時(shí)回收資源,以最小成本運(yùn)行服務(wù)登下。

【3】自動(dòng)部署和回滾:K8S采用滾動(dòng)更新策略更新應(yīng)用茫孔,一次更新一個(gè)Pod,而不是同時(shí)刪除所有Pod被芳,如果更新過(guò)程中出現(xiàn)問(wèn)題缰贝,將回滾更改,確保升級(jí)不受影響業(yè)務(wù)畔濒。

【4】服務(wù)發(fā)現(xiàn)和負(fù)載均衡:K8S為多個(gè)容器提供一個(gè)統(tǒng)一訪問(wèn)入口(內(nèi)部IP地址和一個(gè)DNS名稱)剩晴,并且負(fù)載均衡關(guān)聯(lián)的所有容器,使得用戶無(wú)需考慮容器IP問(wèn)題侵状。

【5】機(jī)密和配置管理管理機(jī)密數(shù)據(jù)和應(yīng)用程序配置赞弥,而不需要把敏感數(shù)據(jù)暴露在鏡像里毅整,提高敏感數(shù)據(jù)安全性。并可以將一些常用的配置存儲(chǔ)在K8S中绽左,方便應(yīng)用程序使用毛嫉。

【6】存儲(chǔ)編排:掛載外部存儲(chǔ)系統(tǒng),無(wú)論是來(lái)自本地存儲(chǔ)妇菱,公有云(如AWS),還是網(wǎng)絡(luò)存儲(chǔ)(如NFS暴区、GlusterFS闯团、Ceph)都作為集群資源的一部分使用,極大提高存儲(chǔ)使用靈活性仙粱。

【7】批處理:提供一次性任務(wù)房交,定時(shí)任務(wù);滿足批量數(shù)據(jù)處理和分析的場(chǎng)景伐割。


圖5:K8S架構(gòu)

Masternode:統(tǒng)一入口由Master節(jié)點(diǎn)的APIServer實(shí)現(xiàn)候味。

scheduler:是負(fù)責(zé)調(diào)度策略

Controller Manager:作為集群內(nèi)部的管理控制中心,負(fù)責(zé)集群內(nèi)的Node隔心、Pod副本白群、服務(wù)端點(diǎn)(Endpoint)、命名空間(Namespace)硬霍、服務(wù)賬號(hào)(ServiceAccount)帜慢、資源定額(ResourceQuota)的管理,當(dāng)某個(gè)Node意外宕機(jī)時(shí)唯卖,Controller Manager會(huì)及時(shí)發(fā)現(xiàn)并執(zhí)行自動(dòng)化修復(fù)流程粱玲,確保集群始終處于預(yù)期的工作狀態(tài)。

Worknode就是對(duì)應(yīng)的部署了同樣業(yè)務(wù)代碼的節(jié)點(diǎn)拜轨。

Kube_proxy提供網(wǎng)絡(luò)代理等負(fù)載均衡功能抽减。

pod是worknode節(jié)點(diǎn)上運(yùn)行的多個(gè)實(shí)例,實(shí)現(xiàn)高可用橄碾、彈性擴(kuò)展卵沉。因?yàn)槭菬o(wú)狀態(tài)服務(wù),如果實(shí)例異常無(wú)法使用堪嫂,實(shí)例漂移之后偎箫,可以不依賴任何數(shù)據(jù)。有狀態(tài)服務(wù)則是依賴網(wǎng)絡(luò)IP皆串,存儲(chǔ)的數(shù)據(jù)淹办。


圖6: Controller Manager圖解

Controller Manager中的Replication Controller,稱為副本控制器恶复。副本控制器的作用即保證集群中一個(gè)RC所關(guān)聯(lián)的Pod副本數(shù)始終保持預(yù)設(shè)值怜森。

Controller Manager中的Endpoints表示了一個(gè)Service對(duì)應(yīng)的所有Pod副本的訪問(wèn)地址速挑,而Endpoints Controller負(fù)責(zé)生成和維護(hù)所有Endpoints對(duì)象的控制器。它負(fù)責(zé)監(jiān)聽(tīng)Service和對(duì)應(yīng)的Pod副本的變化副硅。



圖7:K8S圖解

Pod是kubernetes中你可以創(chuàng)建和部署的最小也是最簡(jiǎn)單位姥宝。一個(gè)Pod代表著集群中運(yùn)行的一個(gè)進(jìn)程,可能由一個(gè)或者多個(gè)容器組合在一起共享資源恐疲。

為什么k8s使用Pod在容器之上再封裝一層呢腊满?

一個(gè)很重要的原因是Docker容器之間的通信受到網(wǎng)絡(luò)機(jī)制的限制。在Docker的世界中培己,一個(gè)容器需要通過(guò)link方式才能訪問(wèn)另一個(gè)容器提供的服務(wù)(端口)碳蛋。大量容器之間的link將是一個(gè)非常繁重的工作。通過(guò)Pod的概念將多個(gè)容器組合在一個(gè)虛擬的“主機(jī)”內(nèi)省咨,可以實(shí)現(xiàn)容器之間僅需通過(guò)Localhost就能相互通信了肃弟。

Ingress是用戶訪問(wèn)域名之后,解析成IP零蓉,分發(fā)給對(duì)應(yīng)Service笤受。而Service則是容器對(duì)外統(tǒng)一暴露的接口,隱藏容器內(nèi)部的實(shí)現(xiàn)邏輯敌蜂。由于容器是無(wú)狀態(tài)服務(wù)箩兽,當(dāng)pod服務(wù)異常重啟新的pod替代時(shí),會(huì)產(chǎn)生新的IP地址紊册。

node則是pod所運(yùn)行的主機(jī),可能是物理機(jī)比肄,也可能是虛擬機(jī)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囊陡,一起剝皮案震驚了整個(gè)濱河市芳绩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撞反,老刑警劉巖妥色,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異遏片,居然都是意外死亡嘹害,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)吮便,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)笔呀,“玉大人,你說(shuō)我怎么就攤上這事髓需⌒硎Γ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)微渠。 經(jīng)常有香客問(wèn)我搭幻,道長(zhǎng),這世上最難降的妖魔是什么逞盆? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任檀蹋,我火速辦了婚禮,結(jié)果婚禮上云芦,老公的妹妹穿的比我還像新娘俯逾。我一直安慰自己,他們只是感情好舅逸,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布纱昧。 她就那樣靜靜地躺著,像睡著了一般堡赔。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上设联,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天善已,我揣著相機(jī)與錄音,去河邊找鬼离例。 笑死换团,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宫蛆。 我是一名探鬼主播艘包,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耀盗!你這毒婦竟也來(lái)了想虎?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤叛拷,失蹤者是張志新(化名)和其女友劉穎舌厨,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體忿薇,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡裙椭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了署浩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揉燃。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖筋栋,靈堂內(nèi)的尸體忽然破棺而出炊汤,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布婿崭,位于F島的核電站拨拓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏氓栈。R本人自食惡果不足惜渣磷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望授瘦。 院中可真熱鬧醋界,春花似錦、人聲如沸提完。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)徒欣。三九已至逐样,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間打肝,已是汗流浹背脂新。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留粗梭,地道東北人争便。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像断医,于是被迫代替她去往敵國(guó)和親滞乙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容