實(shí)踐|微軟Azure Container Service的容器化應(yīng)用

image

8月19日的數(shù)人云線下Meetup,微軟中國有限公司創(chuàng)新技術(shù)合作事業(yè)部技術(shù)顧問趙文婧,從容器、虛擬機(jī)、微服務(wù)等方面為大家分享了Azure云平臺容器技術(shù)服務(wù),以下是本次分享的實(shí)錄。

容器VS虛擬機(jī)

image

容器和虛擬機(jī)作為虛擬化技術(shù),為我們提供了一個(gè)隔離的、獨(dú)立的運(yùn)行環(huán)境,但兩者最大的不同之處是容量具有輕量級的優(yōu)勢,上圖可以看到,每個(gè)虛擬機(jī)內(nèi)部都有完整的操作系統(tǒng),但一個(gè)主機(jī)上運(yùn)行的多個(gè)容器是共享Linux內(nèi)核的,容器和虛擬機(jī)的不同之處可以分為以下幾點(diǎn):

  • 操作系統(tǒng):虛擬機(jī)有完整的操作系統(tǒng),容器共享內(nèi)核。
  • 體積:虛擬機(jī)包含完整的操作系統(tǒng),才創(chuàng)建過程中要給其分配一定量的內(nèi)存去支持運(yùn)轉(zhuǎn),所以虛擬機(jī)比容器的體積更大,消耗資源更多。
  • 啟動:在啟動虛擬機(jī)的過程當(dāng)中要從操作系統(tǒng)去啟動,因此啟動較慢,而容器的啟動時(shí)間是秒級的。
image

Docker是容器技術(shù)發(fā)展過程的重要變革,其ICON實(shí)鯨魚馱著非常多的集裝箱,這些集裝箱即容器,它帶來的主要變革有:提供了一套標(biāo)準(zhǔn)化的流程,可以用這個(gè)標(biāo)準(zhǔn)化的借口去將自己的應(yīng)用進(jìn)行鏡像打包,然后在不同的平臺上部署和運(yùn)行,Docker的寓意是碼頭工人,而它在我們部署運(yùn)行的過程中起到的是綠色遷移作用。

若把容器遷移過程想象為以集裝箱為核心的運(yùn)輸體系,那概念之間可以這樣對應(yīng):容器是集裝箱,云服務(wù)提供商是裝載集裝箱的港口,云服務(wù)商提供一些IaaS的服務(wù)可以理解為裝載集裝箱的拖船,同時(shí)在進(jìn)行部署運(yùn)行的過程中有一套標(biāo)準(zhǔn)化的流程,可以將其看做裝運(yùn)流程。

隨著容器的不斷發(fā)展,可以看到可以看到容器在云平臺和物理機(jī)平臺會形成一個(gè)綠色遷移發(fā)展,總結(jié)了容器的這兩個(gè)非常重要特點(diǎn)之后,接下來看一下Azure都提供了哪些容器服務(wù)。

Azure Container Service

image

Azure提供最重要的容器服務(wù)名為:Azure Container Service,首先,對于云平臺來說,它提供的很重要的資源是Infrastructure,無需購買虛擬機(jī)配置分布式集群,云平臺提供了基礎(chǔ)的框架如Azure上提供的虛擬機(jī),它也會有其自己的Scale Sets,這些虛擬機(jī)會根據(jù)需求擴(kuò)展VM的Sets,也會提供一些Availability Sts,幫助實(shí)現(xiàn)高可用。

有了基礎(chǔ)設(shè)施的架構(gòu),即可方便地在云平臺索取自己的一些計(jì)算機(jī)資源,在Infrastructure上,Azure Container Service提供了多種不同的編排工具,因?yàn)闃I(yè)務(wù)所用的容器是跨主機(jī)的,此時(shí)容器和容器之間需要進(jìn)行通信、數(shù)據(jù)管理、網(wǎng)絡(luò)管理等,編排工具可以幫助實(shí)現(xiàn)跨主機(jī)容器應(yīng)用管理,Azure Container Service提供了三種主流的編排工具:Kuberntes、Swarm、DC/OS,可按需求自行選擇。

眾所周知,Kubernetes內(nèi)部具有一些非常復(fù)雜的資源類型,雖然它提供了很多重要的功能,但在使用時(shí)也會非常繁瑣,這里有一些工具可以幫助更好地使用Kuberentes,如DEIS這家公司的Helm和Draft。

  • Helm相當(dāng)于軟件包的管理器,類似于Linux上的Apt-Get或Yum,通過Helm可以自動獲取一些名為Helm Chart的軟件包去快速構(gòu)建部署Kuberentes集群上的應(yīng)用。

  • Draft能夠自動識別應(yīng)用的語言,幫助去寫Dockerfile和Helm Charts以及快速的構(gòu)建部署引用,同時(shí),Kuberntes是谷歌根據(jù)多年的系統(tǒng)經(jīng)驗(yàn)做的編排工具,Kuberentes的創(chuàng)始人后來也加入了微軟支持Azure。

之前說到的Infrastructure和以上編排工具都通過Azure的ARM模型進(jìn)行構(gòu)建,大家知道AWS有Cloud Formation,阿里云上有Resource Orchestration,類似于這種模板文件,Azure上有自己的ARM文件,可以用一些很簡單的輸入,通過ARM模板在Azure進(jìn)行部署,除了可以在Azure的Portal上或Azure CLI上去創(chuàng)建Azure Container Service,也可以通過ACS的Engine去創(chuàng)建,使用一些簡單輸入的定義文件用ACS Engine轉(zhuǎn)化為ARM模板,從而快速去創(chuàng)建部署,ACS Engine現(xiàn)在是開源在GitHub上的,用戶可以在其中快速更改自己的部署,從而進(jìn)行一些自定義的容器服務(wù),我們也希望這些開源的代碼能夠?qū)ι鐓^(qū)做出貢獻(xiàn),也幫助我們ACS的服務(wù)更快更好地發(fā)展。

微服務(wù)+容器化

image

之前了解了Azure Container Service提供的一些服務(wù),下面再分享下微服務(wù)和容器化如何更好的結(jié)合,在集群部署的情況下,Azure Container Service在哪些方面起到相關(guān)作用。

首先,單體的應(yīng)用。在集群部署的過程中和容器化的應(yīng)用在集群部署的過程中有什么區(qū)別,提到微服務(wù),簡單地說即應(yīng)用程序有多少獨(dú)立的組件,希望它們能夠獨(dú)立的進(jìn)行開發(fā)測試以及運(yùn)行,但假設(shè)一些單體的應(yīng)用向把它部署到集群上時(shí),為了實(shí)現(xiàn)高可用,將它在集群上的每個(gè)節(jié)點(diǎn)都進(jìn)行部署,但對于容器化的應(yīng)用,可以把這些應(yīng)用拆分成多個(gè)獨(dú)立的組件,每個(gè)獨(dú)立的組件都能放在容器之中,為它提供一個(gè)獨(dú)立的運(yùn)行環(huán)境,此時(shí),當(dāng)應(yīng)用的模塊組件放在分布式集群這些節(jié)點(diǎn)上時(shí),即可自動地去根據(jù)分布式節(jié)點(diǎn)的計(jì)算資源調(diào)整模塊分布的位置,假如在ACS部署了一個(gè)集群,ACS會幫助做一些負(fù)載均衡及網(wǎng)絡(luò)管理的設(shè)置,可以在容器集群上更好地部署容器化應(yīng)用。

DevOps

image

說到DevOps,目前很難給它做一個(gè)具體的定義,但其主要目的是在應(yīng)用開發(fā)測試以及運(yùn)行過程中做一個(gè)更好地銜接,使應(yīng)用更新能夠快速地進(jìn)行發(fā)布,從而提升提升效率,所以DevOps和容器的特性不謀而合。

通過容器技術(shù)可以達(dá)到一次編寫部署,在這個(gè)基礎(chǔ)上構(gòu)建敏捷的DevOps開發(fā)若把應(yīng)用構(gòu)建在云上,使用Azure上的容器服務(wù),有一些工具可以使用如:Azure Container Registry,可以在它上面構(gòu)建私有的鏡像倉庫,其中存儲著Docker格式的鏡像,此倉庫可以與Azure Container Service提供的編排引擎進(jìn)行集成,如果想在Kubernetes集群上進(jìn)行應(yīng)用部署,可直接從這個(gè)鏡像倉庫中Push一個(gè)鏡像在上面運(yùn)行,這個(gè)Push下來的過程即可直接寫在Kubernetes相關(guān)的部署文件當(dāng)中。

鏡像倉庫是可以和Docker的鏡像倉庫兼容的,所以如果使用的是Docker工具,也可以進(jìn)行無縫遷移,同時(shí)在Azure上使用容器化服務(wù)以及一系列持續(xù)集成工具鏈包括Visual Studio Visual Studio Team Service以及Visual Studio Code,通過一系列的集成工具鏈即可構(gòu)建版本代碼庫,同時(shí)進(jìn)行人員分配的管理調(diào)度,達(dá)到更好的持續(xù)集成、持續(xù)交付概念。

Demo:用ACS服務(wù)運(yùn)行應(yīng)用

image

接下來會為大家用比較多的時(shí)間演示Demo:在ACS上創(chuàng)建一個(gè)服務(wù),并運(yùn)行應(yīng)用。

第一步:創(chuàng)建ACS的服務(wù)

點(diǎn)擊觀看Demo

有兩種方式:1、在Portal里面進(jìn)行創(chuàng)建,2、在Azure的CLI里面進(jìn)行創(chuàng)建。首先,這是Azure的Portal,進(jìn)到里面創(chuàng)建Azure Container Service,可以自定義服務(wù)名稱,因要使用Kubernetes,我定義這樣一個(gè)名字,選擇資源組,接下來定義Master節(jié)點(diǎn)的屬性,可以看到很多編排工具可以選擇,選擇Kubernetes,重新再來看下,最上面可以選擇三種不同的編排引擎,接下來我們會定義Master節(jié)點(diǎn)的用戶名,然后用SSH的Key去登錄我們的Portal。

將SSH的Key生成完畢后,直接粘進(jìn)去,下面是在創(chuàng)建服務(wù)時(shí)需要一個(gè)服務(wù)主體,之前已經(jīng)創(chuàng)建好了,使用它的ID和密碼,這里可以設(shè)置Agent節(jié)點(diǎn)的數(shù)量以及設(shè)置VM的Size,我們確認(rèn)信息,然后即可創(chuàng)建Kuberentes的集群了,同樣還有另外一種方法可以進(jìn)行Azure的CLI里,用Az Acs Create 這樣的命令來創(chuàng)建自己的集群,那么在這里我們可以指定我們的編排引擎,接著指定我們要將集群放在哪個(gè)資源組里面。

在Azure平臺里,其實(shí)都是通過資源組去管理服務(wù),比如服務(wù)需要什么樣的計(jì)算資源,都會統(tǒng)一放在某個(gè)資源組里,此時(shí),讓不需要這項(xiàng)服務(wù)即可刪除整個(gè)資源組,然后去刪除這些服務(wù),下面定義節(jié)點(diǎn)的VM Size以及SSH Key的這些選項(xiàng),進(jìn)入Portal里看下之前創(chuàng)建好的Kuberntes集群,可以看到這已經(jīng)定義了Agent Master這樣一些節(jié)點(diǎn),還包括一些負(fù)載均衡以及網(wǎng)絡(luò)的組件,進(jìn)到Cluster里面看下它的組成:一個(gè)Agent Pool,VM Size VM Count顯示等,其實(shí)只要一些很簡單的輸入,即可快速地在Azure上創(chuàng)建一個(gè)ACS服務(wù)。

第二步:測試?yán)討?yīng)用程序的本地鏡像部署和運(yùn)行

點(diǎn)擊觀看Demo

接下來將一個(gè)WEB的應(yīng)用部署在集群中,首先將WEB的應(yīng)用在本機(jī)上進(jìn)行鏡像的打包和運(yùn)行,從這個(gè)地址Clone一個(gè)應(yīng)用,確認(rèn)Dockers是正在運(yùn)行著的,查看本機(jī)上有哪些Docker鏡像,可以看到目前還沒有,接下來用Docker Compose這個(gè)命令去創(chuàng)建有關(guān)應(yīng)用的所有進(jìn)項(xiàng),它會讀取Docker Compose文件,進(jìn)到Docker-Compose文件里查看,定義了兩個(gè)服務(wù),包括Azure-Vote-Back和Azure-Vote-Front,Redis是數(shù)據(jù)庫的服務(wù),Azure-Vote-Front是前端的投票應(yīng)用服務(wù)。

在創(chuàng)建的過程中,會Push一些基礎(chǔ)鏡像擴(kuò),包括Nginx這個(gè)正在Pull下來的WEB Server鏡像,還有數(shù)據(jù)庫的鏡像,生成應(yīng)用自身的鏡像,完畢后,可以看到本地現(xiàn)在有三個(gè)鏡像,此時(shí)有兩個(gè)容器正在運(yùn)行,包括數(shù)據(jù)庫和應(yīng)用,再來確認(rèn)下Docker Compose的文件中所確定的應(yīng)用,本機(jī)和容器之間的端口映射,可以看到,進(jìn)到本機(jī)8080端口可以運(yùn)行WEB應(yīng)用,這是一個(gè)投票軟件,會在這個(gè)WEB上面進(jìn)行投票,而后數(shù)據(jù)庫會對這些投票進(jìn)行記錄,此應(yīng)用現(xiàn)在已經(jīng)在機(jī)器上運(yùn)行成功,下面會將這個(gè)應(yīng)用部署到剛才創(chuàng)建的集群上面。

第三步:創(chuàng)建Azure Registry并將應(yīng)用鏡像Push進(jìn)去

點(diǎn)擊觀看Demo

在將應(yīng)用Push到集成之前,首先需要創(chuàng)建一個(gè)Azure上的容器注冊表,即創(chuàng)建屬于自己的鏡像倉庫,可以看到鏡像倉庫已經(jīng)創(chuàng)建完成,可以使用其中的Login Server和Password進(jìn)行登錄,現(xiàn)在需要獲取此進(jìn)項(xiàng)倉庫的密碼,成功后在本地登錄到鏡像倉庫中,將之前創(chuàng)建的鏡像Push到進(jìn)項(xiàng)倉庫中,在此之前,需要用Docker Tag命令為鏡像打一個(gè)標(biāo)簽,之后用Docker Images確認(rèn),這是為了下次在進(jìn)行應(yīng)用更新時(shí)的版本控制。

現(xiàn)在把鏡像Push到剛才創(chuàng)建的鏡像倉庫中,在Push的過程里會不斷地顯示Push的階段,成功后進(jìn)到Azure的CLI中查看已經(jīng)Push成功鏡像的List,此時(shí)顯示了剛才大號標(biāo)簽的鏡像已經(jīng)Push到鏡像倉庫中。

第四步:用Kubectl連接到Kubernetes集群并在集群上運(yùn)行應(yīng)用

點(diǎn)擊觀看Demo

可以看到在這個(gè)應(yīng)用下載的例子中,有一個(gè)定義Kubernetes部署的文件,那么在這個(gè)文件中定義了不同的Deployment和不同的Service,可以在這個(gè)文件中寫清自己的部署,然后利用此文件創(chuàng)建Kubernetes的部署。

將這里使用的鏡像更換成之前在鏡像倉庫中Push進(jìn)去的鏡像,更換鏡像倉庫的Loginserver,然后會用Kubectl Create的命令根據(jù)剛才所看到的的部署文件去創(chuàng)建部署和服務(wù)。

現(xiàn)在創(chuàng)建了WEB應(yīng)用的部署和一些Service,接下來即可Get剛才創(chuàng)建的Service,然后同時(shí)用Watch參數(shù)進(jìn)行監(jiān)控,獲得IP后,即可將Watch關(guān)掉,進(jìn)入External的IP里查看應(yīng)用的運(yùn)行情況。

第五步:為集群做擴(kuò)展

點(diǎn)擊觀看Demo

進(jìn)入此IP后,即可看到UI界面,部署完應(yīng)用后,如何給集群做擴(kuò)展?有兩個(gè)方面:包括Kubernetes的單元Pod擴(kuò)展,也包括集群節(jié)點(diǎn)的擴(kuò)展,依次來看一下:

Kubernetes里面的Pods的情況,現(xiàn)在給Azure-Vote-Front進(jìn)行擴(kuò)展,用Kubectl Scale的這個(gè)命令擴(kuò)展副本數(shù)是5個(gè),擴(kuò)展完成后再用Kubectl Get Pods這個(gè)命令進(jìn)行查看,此時(shí)Azure-Vote-Front就變成了需要的5個(gè)量,可以在更多的量上去做自己的應(yīng)用計(jì)算資源的應(yīng)用,接下來看一下剛才部署文件中它其實(shí)是設(shè)置了有關(guān)請求的CUP的量,M其實(shí)指的是一千分之一核這樣的一個(gè)單位,請求CPU量為250M現(xiàn)在在500M之內(nèi),可以根據(jù)CPU的使用率去進(jìn)行后面的擴(kuò)展。

定義CPU的Pescent是50,即當(dāng)CPU的使用率超過50%時(shí),可以給它達(dá)到10個(gè)Azure-Vote-Front Pods的情況,可以通過這樣一個(gè)命令來查看已經(jīng)設(shè)置過的自動擴(kuò)展?fàn)顟B(tài),除了在Kubernetes的Pods做這樣一個(gè)擴(kuò)展,還可以在VM的Count這個(gè)層面上去做一個(gè)擴(kuò)展,可以設(shè)置New-Agent-Count這個(gè)數(shù)字為4,此時(shí)會從剛才的3個(gè)Count編程4個(gè)Count。

第六步:應(yīng)用更新后的快速發(fā)布

點(diǎn)擊觀看Demo

最后一步會為大家分享如何進(jìn)行應(yīng)用更新后的快速部署和運(yùn)行,進(jìn)到剛才下載下來的應(yīng)用,進(jìn)入U(xiǎn)I定義文件,將剛才的Cats和Dogs更改成其他的單詞,讓它可以顯示在UI上,以表示更新。完成后仍之前提過的Count應(yīng)用重新給應(yīng)用進(jìn)行打包鏡像,成功后此時(shí)將應(yīng)用以一個(gè)新的標(biāo)簽來傳到剛才的Registry里,顯示剛才的Count結(jié)果,定義Count為4,此時(shí)編程了新的VMcount,相當(dāng)于在Cluster理有4個(gè)可用的VM。

把剛才更新好的應(yīng)用重新打一個(gè)標(biāo)簽:V2,發(fā)現(xiàn)已經(jīng)定義成功,接下來把打好標(biāo)簽的鏡像Push到之前創(chuàng)建好的鏡像倉庫中,可以看到其實(shí)有一些內(nèi)容已經(jīng)存在了,這是剛才擴(kuò)展后的情況,對這個(gè)更新好的鏡像進(jìn)行重新部署,它提示這個(gè)鏡像已經(jīng)更新成功,重新看到Pods的情況是有一些已經(jīng)進(jìn)行更新了,從最右邊的Age來看Pods的存在時(shí)間,下面重新Get Service來去查看這個(gè)應(yīng)用的運(yùn)行結(jié)果,登錄到這個(gè)響應(yīng)的IP里去查看一下。

可以看到現(xiàn)在選項(xiàng)已經(jīng)編程了White和Black,從進(jìn)行應(yīng)用更新到快速在集群上部署運(yùn)行,只需要很短的時(shí)間即可進(jìn)行。

今天給大家介紹的內(nèi)容主要是有關(guān)Azure Container Service上面的容器化應(yīng)用。謝謝大家。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評論 2 374

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