成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

談?wù)凱od在微服務(wù)中的運(yùn)用

MASAILA / 1851人閱讀

摘要:本文整理自時(shí)速云線上微信群分享第十期本文主要包括的基本概念使用場(chǎng)景,以及如何在時(shí)速云平臺(tái)上進(jìn)行的編排部署,希望對(duì)大家在進(jìn)行微服務(wù)架構(gòu)實(shí)踐時(shí)有所幫助。問(wèn)關(guān)于提供訪問(wèn)容器數(shù)據(jù)的能力,中包含一個(gè)業(yè)務(wù)和一個(gè)服務(wù),時(shí)速云的控制臺(tái)可以進(jìn)入到容器內(nèi)部。

本文整理自【時(shí)速云線上微信群分享】第十期

本文主要包括Pod的基本概念、使用場(chǎng)景,以及如何在時(shí)速云平臺(tái)上進(jìn)行Pod的編排部署,希望對(duì)大家在進(jìn)行微服務(wù)架構(gòu)實(shí)踐時(shí)有所幫助。

1.我們先來(lái)看一下Pod的基本特性

Pod是 Kubernetes為部署、管理、編排容器化應(yīng)用提出的概念,也是Kubernetes中的最小部署單元,直譯過(guò)來(lái)的意思是“豆莢”,既簡(jiǎn)單又實(shí)用。

Pod是由一組緊耦合的容器組成的容器組,當(dāng)然目前最流行的就是Docker容器,Pod就可以作為1或者多個(gè)Docker 容器的載體,當(dāng)然也支持CoreOS的 rkt,并很容易擴(kuò)展支持更多容器技術(shù)。

Pod中的所用容器會(huì)被一致調(diào)度、同節(jié)點(diǎn)部署,并且在一個(gè)“共享環(huán)境”中運(yùn)行。這里的“共享環(huán)境”包括以下幾點(diǎn):

1)所有容器共享一個(gè)IP地址和端口空間,意味著容器之間可以通過(guò)localhost高效訪問(wèn),不能有端口沖突

2)允許容器之間共享存儲(chǔ)卷,通過(guò)文件系統(tǒng)交互信息

3)容器之間可以通過(guò)IPC(inter-process communication)進(jìn)行通信(目前這個(gè)feature還沒(méi)有實(shí)現(xiàn),主要依賴于Docker對(duì)容器之間進(jìn)程通信的支持,在Docker社區(qū)有issue track)
所以,如果按照每個(gè)Docker容器一個(gè)process的建議,Pod則是支持多個(gè)關(guān)系緊密進(jìn)程很好的方式,更像是一個(gè)容器化的虛擬機(jī)。

Pod也提供探針功能,對(duì)容器服務(wù)進(jìn)行健康檢查,目前有兩種方式:

1)LivenessProbe,用來(lái)檢測(cè)服務(wù)是否正常運(yùn)行,如果定義的規(guī)則失敗了,系統(tǒng)就會(huì)殺掉這個(gè)容器,默認(rèn)情況下自動(dòng)創(chuàng)建一個(gè)新的容器。

比如一個(gè)容器服務(wù)對(duì)外提供Restful Service,服務(wù)可能會(huì)在某些情況下hang或者響應(yīng)時(shí)間變長(zhǎng),我們就可以定義一個(gè)URL作為health check,一旦這個(gè)URL沒(méi)有正常響應(yīng),就認(rèn)為需要重啟服務(wù),這時(shí)候就可以使用 LivenessProbe。

2)ReadinessProbe,用來(lái)標(biāo)識(shí)容器是否準(zhǔn)備好提供正常服務(wù),如果沒(méi)有啟動(dòng)完成檢測(cè)失敗,系統(tǒng)會(huì)將該服務(wù)節(jié)點(diǎn)從服務(wù)代理的列表中刪除,用戶的請(qǐng)求就不會(huì)路由到該節(jié)點(diǎn)了。Pod定義和LivenessProbe類似:

在Pod的生命周期管理中,還提供了在容器啟動(dòng)后(postStart) 和容器停止前(preStop)兩個(gè)handler,方便我們?cè)谶@兩個(gè)事件上添加自定義的hook操作。

比如我們可以定義在容器創(chuàng)建后,先執(zhí)行一條命令把自己的應(yīng)用復(fù)制到tomcat的webapps下,那么直到這個(gè)hook操作完成,才會(huì)進(jìn)行容器啟動(dòng)等后續(xù)操作。

2.接下來(lái),我們看看Pod有哪些主要的應(yīng)用場(chǎng)景

Pod可以用來(lái)承載垂直化的集成應(yīng)用,比如LAMP,但是Pod的主要目的還是支持需要一起部署、一起管理的輔助進(jìn)程,包括:

1)內(nèi)容管理系統(tǒng),文件和數(shù)據(jù)加載進(jìn)程,本地cache管理進(jìn)程等

2)日志壓縮、rotation、備份、快照等

3)數(shù)據(jù)變化監(jiān)聽(tīng)、日志和監(jiān)控適配器,事件分發(fā)等

4)控制、管理、配置、升級(jí)程序

如果希望了解更多相關(guān)解釋,推薦一篇關(guān)于這種容器組的設(shè)計(jì)模式的文章,也是微服務(wù)架構(gòu)中很重要的思想:

http://blog.kubernetes.io/201...

下面我們來(lái)看幾個(gè)實(shí)際的使用場(chǎng)景:

1)業(yè)務(wù)服務(wù)需要收集日志

某服務(wù)模塊已經(jīng)實(shí)現(xiàn)了一些核心的業(yè)務(wù)邏輯,并且穩(wěn)定運(yùn)行了一段時(shí)間,日志記錄在了某個(gè)目錄下,按照不同級(jí)別分別為 error.log、warning.log、info.log,現(xiàn)在希望收集這些日志并發(fā)送到統(tǒng)一的日志處理服務(wù)器上。

這時(shí)我們可以修改原來(lái)的服務(wù)模塊,在其中添加日志收集、發(fā)送的服務(wù),但這樣可能會(huì)影響原來(lái)服務(wù)的配置、部署方式,從而帶來(lái)不必要的問(wèn)題和成本,也會(huì)增加業(yè)務(wù)邏輯和基礎(chǔ)服務(wù)的藕合度。

如果使用Pod的方式,通過(guò)簡(jiǎn)單的編排,既可以保持原有服務(wù)邏輯、部署方式不變,又可以增加新的日志收集服務(wù)。

而且如果我們對(duì)所有服務(wù)的日志生成有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),或者僅對(duì)日志收集服務(wù)稍加修改,就可以將日志收集服務(wù)和其他服務(wù)進(jìn)行Pod編排,提供統(tǒng)一、標(biāo)準(zhǔn)的日志收集方式。

這里的“核心業(yè)務(wù)服務(wù)”、“日志收集服務(wù)”分別是一個(gè)Docker鏡像,運(yùn)行在隔離的容器環(huán)境中。

2)提供ssh、ftp訪問(wèn)容器數(shù)據(jù)的能力

Docker Hub或者很多第三方的鏡像并沒(méi)有安裝sshd的服務(wù),不方便我們進(jìn)入容器進(jìn)行配置、代碼的修改、調(diào)試,很多時(shí)候需要重新構(gòu)建鏡像、或者在鏡像基礎(chǔ)上安裝sshd的服務(wù),這都需要時(shí)間和一定的學(xué)習(xí)成本。

而通過(guò)Pod的方式,我們就可以將現(xiàn)有鏡像和一個(gè)ssh、ftp鏡像進(jìn)行編排,獲得操作容器內(nèi)數(shù)據(jù)的能力。

3)代碼自動(dòng)更新

我們部署了一個(gè)node.js的應(yīng)用,而且部署了幾十、上百個(gè)節(jié)點(diǎn),那么我希望這個(gè)應(yīng)用可以定時(shí)的同步最新的代碼,以便自動(dòng)升級(jí)線上環(huán)境。

這時(shí),我們當(dāng)然也不希望改動(dòng)原來(lái)的node.js 應(yīng)用,可以開(kāi)發(fā)一個(gè)Git代碼倉(cāng)庫(kù)的自動(dòng)同步服務(wù),然后通過(guò)Pod的方式進(jìn)行編排,并共享代碼目錄,就可以達(dá)到更新node.js應(yīng)用代碼的效果。

并且這個(gè)同步服務(wù)還可以同其他使用Git代碼倉(cāng)庫(kù)的服務(wù)編排,實(shí)現(xiàn)同樣的需求。

4)適配不同IaaS平臺(tái)的環(huán)境

我們開(kāi)發(fā)了一個(gè)節(jié)點(diǎn)管理的agent,這個(gè)agent需要讀取當(dāng)前部署環(huán)境的一些信息,可以通過(guò)底層平臺(tái)的API實(shí)現(xiàn)。

但是,當(dāng)部署到AWS、阿里云、青云等不同平臺(tái)時(shí),API就無(wú)法統(tǒng)一了。這樣,我們可以實(shí)現(xiàn)不同平臺(tái)的適配服務(wù)來(lái)獲取各自的信息,并且和agent通過(guò)Pod編排部署,在不改變agent邏輯的情況下,通過(guò)服務(wù)組合來(lái)適配于不同平臺(tái)。

其實(shí),Kubernetes 的一些新的功能需求,也會(huì)建議先通過(guò)Pod的編排來(lái)解決,而不是直接修改Kubernetes的代碼,可見(jiàn)Pod還是用處多多的。

3.最后,我們一起看看如何在時(shí)速云平臺(tái)上進(jìn)行Pod的編排

1)登錄到時(shí)速云公有云平臺(tái),通過(guò)右側(cè)的導(dǎo)航,選擇“服務(wù)編排” -> “公有編排”,其中分為”P(pán)od編排“和“Stack編排”兩類,點(diǎn)擊“Pod 編排”可以看到官方示例”ubuntu-mysql”,這個(gè)模版會(huì)將ubuntu和mysql兩個(gè)容器編排在一個(gè)Pod中。

2)點(diǎn)擊“部署”,可以預(yù)覽yaml格式的編排文件:

其中關(guān)鍵是存儲(chǔ)卷的配置,我們需要提前創(chuàng)建這個(gè)存儲(chǔ)卷,并修改yaml中的 disk 屬性,以匹配自己的存儲(chǔ)卷。

如果我們需要修改存儲(chǔ)卷名稱,或者對(duì)其他鏡像進(jìn)行編排,可以復(fù)制這個(gè)模版,創(chuàng)建自己的Pod編排。注意:目前只有北京2區(qū)、杭州區(qū)支持存儲(chǔ)卷功能,所以請(qǐng)?jiān)谶@兩個(gè)區(qū)創(chuàng)建存儲(chǔ)和部署Pod。

創(chuàng)建成功后,可以在容器服務(wù)的列表中看到一個(gè)“多容器服務(wù)”:

點(diǎn)擊“查看所有服務(wù)地址”,可以看到對(duì)應(yīng)的mysql和ubuntu的訪問(wèn)地址。

通過(guò)ssh 登陸到22端口對(duì)應(yīng)的服務(wù)地址,就可以直接訪問(wèn)到mysql的數(shù)據(jù)了。

并且存儲(chǔ)卷中的數(shù)據(jù)會(huì)保存在獨(dú)立的分布式存儲(chǔ)系統(tǒng)中,保證數(shù)據(jù)的安全和高可用。

詳細(xì)信息可以參考官方文檔:

http://doc.tenxcloud.com/doc/...

所以,我們可以在很多實(shí)際的部署場(chǎng)景中充分發(fā)揮Pod的這些特性,將服務(wù)進(jìn)行更細(xì)力度的拆分,通過(guò)編排增強(qiáng)服務(wù)模塊,這樣既可以減少重復(fù)的開(kāi)發(fā)工作,降低服務(wù)的藕合度,也可以使我們的系統(tǒng)更輕量、更靈活。

Q&A

1.問(wèn):關(guān)于“提供ssh、ftp訪問(wèn)容器數(shù)據(jù)的能力”, pod中包含一個(gè)業(yè)務(wù)container和一個(gè)ssh服務(wù)container,時(shí)速云的控制臺(tái)可以進(jìn)入到容器內(nèi)部。那么ssh進(jìn)入的container只是提供ssh服務(wù)的container,好像也沒(méi)辦法ssh到業(yè)務(wù)container。

答:業(yè)務(wù)應(yīng)用Container和ssh服務(wù)container共享數(shù)據(jù)存儲(chǔ),可以通過(guò)ssh訪問(wèn)共享存儲(chǔ),這樣也避免了修改“業(yè)務(wù)應(yīng)用”中的不可變運(yùn)行環(huán)境。(參考“不可變基礎(chǔ)設(shè)施”)

2.問(wèn):pod和swarm的最大區(qū)別是什么?我感覺(jué)差不多,是不是Pod更偏上層一些?

答:兩者沒(méi)有可比性。Pod只是一種容器的部署、管理方式,是kubernetes的最小部署和管理單元,是一組容器的集合;swarm是容器編排工具,和kubernetes屬于同一類。

3.問(wèn):一個(gè)pod最好包含幾個(gè)容器?啟動(dòng)pod的配置文件里面能不能定義容器的大???

答:Pod里面多少個(gè)容器理論上沒(méi)有特別的限制,目前我們一般是2-3個(gè)。Pod里面定義的容器,基本上就是對(duì)Docker容器的定義。Pod中支持Docker容器本身的絕大部分參數(shù),比如cpu、memory、是否privilege、是否root等。Pod對(duì)Docker容器基本參數(shù)有所刪減,但從更高的層面進(jìn)行了擴(kuò)展。具體可以查看kubernetes文檔。

4.問(wèn):Pod中定義容器時(shí)包括pause嗎

答:每個(gè)Pod都會(huì)附帶一個(gè)pause容器,pause容器不執(zhí)行實(shí)際的業(yè)務(wù)邏輯,只是對(duì)pod的網(wǎng)絡(luò)、IO等進(jìn)行控制。

5.問(wèn):時(shí)速云對(duì)docker hub上的鏡像部署,也能提供ssh到容器內(nèi)部的功能么?我的理解是,“打開(kāi)web控制臺(tái)”是ssh到容器里。

答:嗯,web控制臺(tái)和ssh并不一樣。如果你使用scp、sftp傳送文件,則需要容器內(nèi)安裝sshd服務(wù)。

6.問(wèn):Pod沒(méi)用過(guò),不過(guò)用過(guò)docker compose, 它們倆有什么區(qū)別?

答:compose不支持緊耦合的容器組,也不支持容器共享存儲(chǔ)。

7.問(wèn):能定義容器(磁盤(pán))的大小嗎?如果有的話,在哪兒修改?

答:docker daemon的參數(shù)包含磁盤(pán)的定義,指定devicemapper的option來(lái)改變默認(rèn)大小。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/26678.html

相關(guān)文章

  • k8s如何管理Pod

    摘要:是運(yùn)行服務(wù)的基礎(chǔ),那我們?nèi)绾蝸?lái)管理呢,下面我們就來(lái)聊一聊。所以即使只有一個(gè)也應(yīng)該使用來(lái)進(jìn)行管理?,F(xiàn)在回到最開(kāi)始的問(wèn)題,如何通過(guò)修改副本數(shù)量。 這是在微信群分享的文章,也貼在這里。 在本次分享開(kāi)始前,讓我們先回想下Pod。Pod直譯是豆莢,可以把容器想像成豆莢里的豆子,把一個(gè)或多個(gè)關(guān)系緊密的豆子包在一起就是豆莢(一個(gè)Pod)。在k8s中我們不會(huì)直接操作容器,而是把容器包裝成Pod再進(jìn)行管...

    Cheng_Gang 評(píng)論0 收藏0
  • k8s如何管理Pod

    摘要:是運(yùn)行服務(wù)的基礎(chǔ),那我們?nèi)绾蝸?lái)管理呢,下面我們就來(lái)聊一聊。所以即使只有一個(gè)也應(yīng)該使用來(lái)進(jìn)行管理?,F(xiàn)在回到最開(kāi)始的問(wèn)題,如何通過(guò)修改副本數(shù)量。 這是在微信群分享的文章,也貼在這里。 在本次分享開(kāi)始前,讓我們先回想下Pod。Pod直譯是豆莢,可以把容器想像成豆莢里的豆子,把一個(gè)或多個(gè)關(guān)系緊密的豆子包在一起就是豆莢(一個(gè)Pod)。在k8s中我們不會(huì)直接操作容器,而是把容器包裝成Pod再進(jìn)行管...

    zzbo 評(píng)論0 收藏0
  • k8s如何管理Pod

    摘要:本文整理自時(shí)速云線上微信群分享第十二期在本次分享開(kāi)始前,讓我們先回想下。但目前時(shí)速云平臺(tái)還不支持這種。問(wèn)時(shí)速云是怎么保持的高可用的答高可用目前是官方推薦的多方式,以及我們自己的監(jiān)管方式。 本文整理自【時(shí)速云線上微信群分享】第十二期 在本次分享開(kāi)始前,讓我們先回想下Pod。Pod直譯是豆莢,可以把容器想像成豆莢里的豆子,把一個(gè)或多個(gè)關(guān)系緊密的豆子包在一起就是豆莢(一個(gè)Pod)。在k8s中...

    Aldous 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<