成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

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

MASAILA / 1964人閱讀

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

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

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

1.我們先來看一下Pod的基本特性

Pod是 Kubernetes為部署、管理、編排容器化應(yīng)用提出的概念,也是Kubernetes中的最小部署單元,直譯過來的意思是“豆莢”,既簡單又實(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地址和端口空間,意味著容器之間可以通過localhost高效訪問,不能有端口沖突

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

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

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

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

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

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

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

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

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

Pod可以用來承載垂直化的集成應(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)聽、日志和監(jiān)控適配器,事件分發(fā)等

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

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

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

下面我們來看幾個(gè)實(shí)際的使用場景:

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

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

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

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

而且如果我們對所有服務(wù)的日志生成有一個(gè)統(tǒng)一的標(biāo)準(zhǔn),或者僅對日志收集服務(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訪問容器數(shù)據(jù)的能力

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

而通過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)升級線上環(huán)境。

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

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

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

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

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

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

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

1)登錄到時(shí)速云公有云平臺(tái),通過右側(cè)的導(dǎo)航,選擇“服務(wù)編排” -> “公有編排”,其中分為”Pod編排“和“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ǔ)卷名稱,或者對其他鏡像進(jìn)行編排,可以復(fù)制這個(gè)模版,創(chuàng)建自己的Pod編排。注意:目前只有北京2區(qū)、杭州區(qū)支持存儲(chǔ)卷功能,所以請?jiān)谶@兩個(gè)區(qū)創(chuàng)建存儲(chǔ)和部署Pod。

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

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

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

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

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

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

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

Q&A

1.問:關(guān)于“提供ssh、ftp訪問容器數(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,好像也沒辦法ssh到業(yè)務(wù)container。

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

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

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

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

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

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

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

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

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

6.問:Pod沒用過,不過用過docker compose, 它們倆有什么區(qū)別?

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

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

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

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

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/26678.html

相關(guān)文章

  • k8s如何管理Pod

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

    Cheng_Gang 評論0 收藏0
  • k8s如何管理Pod

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

    zzbo 評論0 收藏0
  • k8s如何管理Pod

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

    Aldous 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<