容器化實(shí)踐

說到容器化就免不了說Docker, 毫無疑問,DocKer成了近些年來最火熱燎孟,甚至最具顛覆性的技術(shù)之一。百度Docker,看到Docker官網(wǎng)幾個(gè)醒目的大字“Build, Ship, and Run Any App, Anywhere”涤姊,由此我們想到上世紀(jì)90年代Java發(fā)布的時(shí)候疹瘦,每一家公司都表示了極大的興趣,直到他們意識(shí)到Java實(shí)際上對(duì)他們自有的平臺(tái)其實(shí)是一種巨大威脅噩翠。Java的愿景是“Write Once戏自,Run Anywhere”, 而Docker提出了“Build once绎秒,Run anywhere浦妄,Configure once,Run anything”见芹。很大程度上剂娄,二者都對(duì)某些公司形成了潛在的威脅。盡管我們目前還看不到具體的一些公司針對(duì)可能的威脅采取的應(yīng)對(duì)措施玄呛,但未來是誰也無法保證類似Java或VMware的歷史不會(huì)重演阅懦。

Docker技術(shù)的簡(jiǎn)要綜述:

Docker利用了一些Linux核心工具,比如cGruops徘铝、Namespace耳胎、SELinux和AUFS等技術(shù),對(duì)進(jìn)程進(jìn)行封裝隔離惕它。由于隔離的進(jìn)程獨(dú)立于宿主和其它的隔離的進(jìn)程怕午,因此也稱其為容器。起初Docker只是LXC容器管理子系統(tǒng)的前端淹魄,但它在0.9版本中引入了libcontainer郁惜,從 1.11 開始,則進(jìn)一步演進(jìn)為使用runC和containerd甲锡。
Docker 在容器的基礎(chǔ)上兆蕉,進(jìn)行了進(jìn)一步的封裝羽戒,從文件系統(tǒng)、網(wǎng)絡(luò)互聯(lián)到進(jìn)程隔離等等虎韵,極大的簡(jiǎn)化了容器的創(chuàng)建和維護(hù)易稠。使得 Docker 技術(shù)比虛擬機(jī)技術(shù)更為輕便、快捷包蓝。


docker-execdriver-diagram.png

Docker和虛擬機(jī)對(duì)比

虛擬機(jī):
簡(jiǎn)單說虛擬機(jī)(VM)是將一臺(tái)服務(wù)器變成多臺(tái)服務(wù)器的物理硬件的抽象驶社。管理程序允許多臺(tái)虛擬機(jī)在單臺(tái)機(jī)器上運(yùn)行。每個(gè)VM都包含一個(gè)操作系統(tǒng)的完整副本养晋,一個(gè)或多個(gè)應(yīng)用程序衬吆,必需的二進(jìn)制文件和庫(kù) - 占用的空間很大。VM啟動(dòng)緩慢绳泉。
Docker:

容器是應(yīng)用程序?qū)拥囊粋€(gè)抽象逊抡,它將代碼和依賴關(guān)系打包在一起。多個(gè)容器可以在同一臺(tái)機(jī)器上運(yùn)行零酪,并與其他容器共享操作系統(tǒng)內(nèi)核冒嫡,每個(gè)容器在用戶空間中作為孤立進(jìn)程運(yùn)行。容器占用的空間少于虛擬機(jī)(容器圖像的大小通常為幾十MB)四苇,并且啟動(dòng)速度特別快孝凌。說白了,就是一個(gè)更輕量級(jí)的虛擬機(jī)月腋,但是這個(gè)虛擬機(jī)沒有操作系統(tǒng)和設(shè)備(操作系統(tǒng)是共享的)蟀架,則是一種以應(yīng)用程序?yàn)橹行牡奶摂M化技術(shù)
Docker-VM.png

Docker使用的階段

Docker自2013年來非常火熱來榆骚,隨著需求的變化分為兩個(gè)階段
第一階段:Docker還是當(dāng)初的Docker
是Docker對(duì)一個(gè)(或一組)進(jìn)程的封裝片拍,一個(gè)容器需要綁定宿主機(jī)的端口來向宿主機(jī)之外的網(wǎng)絡(luò)提供服務(wù),為了避免端口沖突妓肢,對(duì)于需要暴露端口的容器捌省,Docker會(huì)隨機(jī)綁定一個(gè)宿主機(jī)端口,這個(gè)時(shí)候就需要服務(wù)發(fā)現(xiàn)來幫助不同機(jī)器上的服務(wù)來進(jìn)行通信了碉钠「倩海可能更適用是單一個(gè)的程序或者程序關(guān)聯(lián)性很小的應(yīng)用,隨著系統(tǒng)慢慢的龐大就會(huì)暴露出問題喊废。
第二階段:開源的容器集群管理系統(tǒng)
常見的開源容器集群管理系統(tǒng)有Kubernetes祝高,Swarm和Mesos 。隨著Docker官方宣布支持Kubernetes污筷,Kubernetes大有統(tǒng)一容器天下之勢(shì)褂策,所以我們主要講一下kubernetes。
Kubernetes是Docker生態(tài)圈里的重要一員,Google開源的容器集群管理系統(tǒng)斤寂,為容器化的應(yīng)用提供部署運(yùn)行、資源調(diào)度揪惦、服務(wù)發(fā)現(xiàn)和動(dòng)態(tài)伸縮等一系列完整功能遍搞,提高了大規(guī)模容器集群管理的便捷性。
Kubernetes優(yōu)勢(shì):

  • 容器編排
  • 輕量級(jí)
  • 開源
  • 彈性伸縮
  • 負(fù)載均衡

講訴Container在kubernetes的大致過程器腋,用戶通過kubectl提交需要運(yùn)行的docker Container(pod)溪猿,apiserver負(fù)責(zé)etcd存儲(chǔ)的所有操作,且只有apiserver才直接操作etcd集群纫塌,scheduler掃描分配主機(jī)诊县,kubelet找到需要跑的Container在當(dāng)前Node中運(yùn)行,用戶提交RC描述措左,replication contorller監(jiān)視集群中的pod并保持pod數(shù)量依痊,用戶提交service描述文件,由kube proxy負(fù)責(zé)具體工作流量轉(zhuǎn)發(fā)怎披。如下圖:


K8sFramework.png

一個(gè)kuberbetes集群是由分布式存儲(chǔ)(etcd)胸嘁、服務(wù)節(jié)點(diǎn)(Minion,etcd現(xiàn)在稱為Node)和控制節(jié)點(diǎn)(Master)構(gòu)成的凉逛。所有的集群狀態(tài)都保存在etcd中性宏,Master節(jié)點(diǎn)上則運(yùn)行集群的管理控制模塊。Node節(jié)點(diǎn)是真正運(yùn)行應(yīng)用容器的主機(jī)節(jié)點(diǎn)状飞,在每個(gè)Minion節(jié)點(diǎn)上都會(huì)運(yùn)行一個(gè)Kubelet代理毫胜,控制該節(jié)點(diǎn)上的容器、鏡像和存儲(chǔ)卷等诬辈。

kuberbetes組件酵使,如圖:


kuberbetes核心組件.png

Pod

Pod是Kubernetes調(diào)度的基本單位,Pod 安排在節(jié)點(diǎn)上自晰,包含一組容器和卷凝化。同一個(gè)Pod里的容器共享同一個(gè)網(wǎng)絡(luò)命名空間,可以使用localhost互相通信酬荞。Pod是短暫的搓劫,不是持續(xù)性實(shí)體。

service

Service是對(duì)一組提供相同功能的Pods的抽象混巧,并為它們提供一個(gè)統(tǒng)一的入口枪向。借助Service,應(yīng)用可以方便的實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)與負(fù)載均衡咧党,并實(shí)現(xiàn)應(yīng)用的零宕機(jī)升級(jí)秘蛔。Service通過標(biāo)簽來選取服務(wù)后端,一般配合Replication Controller或者Deployment來保證后端容器的正常運(yùn)行。

Replication Controller

ReplicationController(也簡(jiǎn)稱為rc)用來確保容器應(yīng)用的副本數(shù)始終保持在用戶定義的副本數(shù)深员,即如果有容器異常退出负蠕,會(huì)自動(dòng)創(chuàng)建新的Pod來替代;而異常多出來的容器也會(huì)自動(dòng)回收倦畅。ReplicationController的典型應(yīng)用場(chǎng)景包括確保健康Pod的數(shù)量遮糖、彈性伸縮、滾動(dòng)升級(jí)以及應(yīng)用多版本發(fā)布跟蹤等叠赐。

apiserver

kube-apiserver是Kubernetes最重要的核心組件之一欲账,主要提供以下的功能

  • 提供集群管理的REST API接口,包括認(rèn)證授權(quán)芭概、數(shù)據(jù)校驗(yàn)以及集群狀態(tài)變更等
  • 提供其他模塊之間的數(shù)據(jù)交互和通信的樞紐(其他模塊通過API Server查詢或修改數(shù)據(jù)赛不,只有API Server才直接操作etcd)

scheduler

scheduler負(fù)責(zé)分配調(diào)度Pod到集群內(nèi)的節(jié)點(diǎn)上,它監(jiān)聽apiserver罢洲,查詢還未分配Node的Pod踢故,然后根據(jù)調(diào)度策略為這些Pod分配節(jié)點(diǎn)。
調(diào)度器需要充分考慮諸多的因素:

  • 公平調(diào)度
  • 資源高效利用
  • 數(shù)據(jù)本地化
  • 內(nèi)部負(fù)載干擾
  • 服務(wù)質(zhì)量

Controller Manager

Controller Manager是Kubernetes的大腦奏路,它通過apiserver監(jiān)控整個(gè)集群的狀態(tài)畴椰,并確保集群處于預(yù)期的工作狀態(tài)。

Kubelet

每個(gè)節(jié)點(diǎn)上都運(yùn)行一個(gè)kubelet服務(wù)進(jìn)程鸽粉,默認(rèn)監(jiān)聽10250端口斜脂,接收并執(zhí)行master發(fā)來的指令,管理Pod及Pod中的容器触机。每個(gè)kubelet進(jìn)程會(huì)在API Server上注冊(cè)節(jié)點(diǎn)自身信息帚戳,定期向master節(jié)點(diǎn)匯報(bào)節(jié)點(diǎn)的資源使用情況,并通過cAdvisor監(jiān)控節(jié)點(diǎn)和容器的資源儡首。

proxy

每臺(tái)機(jī)器上都運(yùn)行一個(gè)kube-proxy服務(wù)片任,它監(jiān)聽API server中service和endpoint的變化情況,并通過iptables等來為服務(wù)配置負(fù)載均衡蔬胯。

應(yīng)用部署架構(gòu)圖:


K8sDeploy.png

主要講一下Gkube

容器控制程序对供,由Jenkins job通過 Execute shell 調(diào)用,主要功能是管理kubernetes集群氛濒,創(chuàng)建产场,刪除,變更舞竿,查看pod(docker)容器京景。python3.4編寫,調(diào)用kubernetes etcd glusterfs的API進(jìn)行資源管理骗奖。主要邏輯是當(dāng)job進(jìn)行調(diào)用后查詢etcd是否有該job對(duì)應(yīng)的docker信息确徙,如果有則移交給代碼更新腳本醒串,如果沒有則創(chuàng)建一個(gè)容器,并初始化部署環(huán)境鄙皇,然后發(fā)布代碼芜赌。

部署成果展示:

Kubernetes

訪問的K8s跑的應(yīng)用
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市育苟,隨后出現(xiàn)的幾起案子较鼓,更是在濱河造成了極大的恐慌,老刑警劉巖违柏,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異香椎,居然都是意外死亡漱竖,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門畜伐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馍惹,“玉大人,你說我怎么就攤上這事玛界⊥蚍” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵慎框,是天一觀的道長(zhǎng)良狈。 經(jīng)常有香客問我,道長(zhǎng)笨枯,這世上最難降的妖魔是什么薪丁? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮馅精,結(jié)果婚禮上严嗜,老公的妹妹穿的比我還像新娘。我一直安慰自己洲敢,他們只是感情好漫玄,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著压彭,像睡著了一般睦优。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哮塞,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天刨秆,我揣著相機(jī)與錄音,去河邊找鬼忆畅。 笑死衡未,一個(gè)胖子當(dāng)著我的面吹牛尸执,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缓醋,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼如失,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了送粱?” 一聲冷哼從身側(cè)響起褪贵,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎抗俄,沒想到半個(gè)月后脆丁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡动雹,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年槽卫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胰蝠。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡歼培,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茸塞,到底是詐尸還是另有隱情躲庄,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布钾虐,位于F島的核電站噪窘,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏禾唁。R本人自食惡果不足惜效览,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望荡短。 院中可真熱鬧丐枉,春花似錦、人聲如沸掘托。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)闪盔。三九已至弯院,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間泪掀,已是汗流浹背听绳。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留异赫,地道東北人椅挣。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓头岔,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親鼠证。 傳聞我的和親對(duì)象是個(gè)殘疾皇子峡竣,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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

  • 記錄餐飲圈APP后端容器化技術(shù)選型,以及實(shí)踐過程量九。 項(xiàng)目介紹 簡(jiǎn)單介紹一下餐飲圈項(xiàng)目規(guī)模适掰,以及團(tuán)隊(duì)配置,用以作為技...
    FrancisW閱讀 563評(píng)論 4 1
  • docker實(shí)現(xiàn)了更便捷的單機(jī)容器虛擬化的管理, docker的位置處于操作系統(tǒng)層與應(yīng)用層之間; 相對(duì)傳統(tǒng)虛擬化(...
    Harvey_L閱讀 19,904評(píng)論 3 44
  • 環(huán)境規(guī)劃 手里的環(huán)境是四臺(tái)安裝了CentOS 7的主機(jī)荠列。環(huán)境規(guī)劃如下: Kubernetes Master 節(jié)點(diǎn):...
    負(fù)二貸閱讀 3,259評(píng)論 6 26
  • Kubernetes作為容器應(yīng)用的管理中心类浪,通過對(duì)Pod的數(shù)量進(jìn)行監(jiān)控,并且根據(jù)主機(jī)或容器失效的狀態(tài)將新的Pod調(diào)...
    輝耀輝耀閱讀 4,605評(píng)論 0 13
  • kubernetes 簡(jiǎn)介 一個(gè)迅速過一遍kubernetes 非常不錯(cuò)的資源:基于Kubernetes構(gòu)建Doc...
    bradyjoestar閱讀 15,281評(píng)論 2 7