Kubernetes中的多容器 Pod 設(shè)計(jì)模式
譯文【51CTO.com快譯】Pod
在Kubernetes中,Pod是一個(gè)可部署單元。如果要部署應(yīng)用程序,它必須將Pod作為容器部署在Pod中。盡管應(yīng)用程序可以在容器中運(yùn)行,但容器必須是Pod的一部分。Pod規(guī)范具有聲明容器規(guī)范的屬性容器。這個(gè)屬性是復(fù)數(shù)的。這意味著可以在Pod規(guī)范中聲明多個(gè)容器。
多容器設(shè)計(jì)考慮
但是Kubernetes管理員總是選擇單一容器Pod而不是多容器Pod。每個(gè)Pod采用一個(gè)容器是行業(yè)中的一人不成文做法。以下了解多容器Pod可以提供什么優(yōu)勢(shì)。
Pod有一個(gè)IP,而一個(gè)Pod中的所有容器可以共享相同的IP。如果為Pod創(chuàng)建了任何卷,則作為Pod一部分的所有容器都可以安裝該卷。因此,容器可以共享存儲(chǔ)空間,它們還可以通過(guò)本地主機(jī)相互通信。
在這種情況下,為什么仍然首選單一容器Pod。以具有用戶界面(UI)、后端、數(shù)據(jù)庫(kù)和消息傳遞層的Web應(yīng)用程序?yàn)槔?。將所有四個(gè)層部署為單個(gè)Pod中的四個(gè)容器。所有四個(gè)容器的資源、配置、操作要求都不同。后端和前端是面向客戶的。如果需要將這些擴(kuò)展到不同的層次,則不能單獨(dú)完成,由于不能擴(kuò)展容器,只能擴(kuò)展Pod。因此,如果擴(kuò)展Pod,也會(huì)創(chuàng)建數(shù)據(jù)庫(kù)和消息層的多個(gè)實(shí)例,盡管這不是必需的。
因此,最好將它們分開部署,因?yàn)橄駟为?dú)的一個(gè)Pod一樣管理和擴(kuò)展它們會(huì)更好。
在什么情況下,可以在同一個(gè)Pod中使用多個(gè)容器?
情況1–如果容器的生命周期相同。
情況2–如果兩個(gè)容器高度耦合。
情況3–如果需要使應(yīng)用程序無(wú)需任何代碼更改即可部署到Kubernetes。在這種情況下,應(yīng)用程序代碼缺乏利用Kubernetes功能的東西。在這種情況下,可以在應(yīng)用程序容器中引入一個(gè)輔助容器,這將打破這種障礙。
多容器設(shè)計(jì)模式
1.適配器模式
如今的家庭通常采用的是交流電,而人們使用的筆記本電腦使用的是直流電。在這種情況下,使用交流適配器從插座獲取電源,然后將其轉(zhuǎn)換為直流電并為筆記本電腦供電。在不改變供電模式的情況下,可以借助適配器為筆記本電腦充電。
那么如何將這種模式與Kubernetes有什么聯(lián)系?例如,如果在Kubernetes集群中安裝了一個(gè)集中監(jiān)控工具,它需要將所有應(yīng)用日志以“應(yīng)用程序(APP)-名稱(NAME)-主機(jī)名稱(HOSTNAME)-日期(DATE)-嚴(yán)重程度(SEVERITY)”格式打印。但是集群可以有許多應(yīng)用程序以多種語(yǔ)言編寫,并以多種格式打印日志。在這種情況下,所有應(yīng)用程序都更改其日志記錄格式是不明智的,就好像該工具將來(lái)會(huì)更改并且格式可能再次更改一樣。為了解決這個(gè)問(wèn)題,可以生成第二個(gè)容器來(lái)讀取主要應(yīng)用程序容器的日志,并將其處理成監(jiān)控工具所需的格式。這樣可以解決不匹配的問(wèn)題。
2.大使模式
大使是各國(guó)派駐他國(guó)的特使。這種模式如何在Kubernetes Pod提供幫助?
例如,如果有一個(gè)遺留應(yīng)用程序,其中DB URL在應(yīng)用程序內(nèi)被硬編碼為localhost。更改遺留應(yīng)用程序很困難,因?yàn)樗鼤?huì)在許多其他地方帶來(lái)更改。如果必須使其可在Kubernetes集群中部署,則需要更改代碼。可以使用大使模式在不更改代碼的情況下做到這一點(diǎn)。大使容器將應(yīng)用程序容器共置在同一個(gè)Pod中。它是一個(gè)代理,根據(jù)開發(fā)、質(zhì)量保證(QA)或Stage環(huán)境連接到正確的數(shù)據(jù)庫(kù)。
主應(yīng)用程序可以通過(guò)大使容器連接到諸如localhost之類的外部URL。大使模式找到正確的URL,并將其提供給位于localhost的應(yīng)用程序容器。主應(yīng)用程序容器不需要擔(dān)心正確的URL。這將被分配給大使容器。
3.邊車模式
邊車(Sidecar)的原理與挎斗摩托車類似,挎斗摩托車只是增加了一個(gè)座位,而沒(méi)有對(duì)其主要部署進(jìn)行任何更改,雖然這個(gè)座位不是摩托車的組成部分,但增強(qiáng)了性能。Sidecar容器也采用同樣的工作方式。邊車增強(qiáng)了與它一起部署的主容器的能力,而無(wú)需對(duì)主容器進(jìn)行任何更改。例如,應(yīng)用程序在某個(gè)文件夾中生成日志文件。
如果在Kubernetes集群中采用應(yīng)用程序監(jiān)控工具,需要將所有部署到集群的應(yīng)用程序的日志存儲(chǔ)在某個(gè)外部存儲(chǔ)空間中,那么在應(yīng)用程序級(jí)別根本無(wú)法完成。相反,可以使用一個(gè)邊車容器,它可以輕松地將日志文件存儲(chǔ)在所需的存儲(chǔ)空間中,而無(wú)需在主應(yīng)用程序級(jí)別進(jìn)行任何代碼更改。
結(jié)論
所有這些模式對(duì)于在不更改主要應(yīng)用程序的情況下執(zhí)行橫切作業(yè)非常有用。它們?yōu)橹魅萜魈峁┲С?,并且必須作為輔助容器進(jìn)行部署。這些工作負(fù)載必須以可以在不同Pod中重用的方式編寫。
為了解釋這種方法,使用適配器模式,必須將主容器的輸出轉(zhuǎn)換或處理為某種標(biāo)準(zhǔn)格式;大使模式用于提供網(wǎng)絡(luò)代理;邊車模式用于向主容器提供幫助程序/實(shí)用程序服務(wù)。
而人們嘗試使用這些模式可以充分利用Kubernetes集群。
原文連接:Multi-Container Pod Design Patterns in Kubernetes,作者:Aditya Bhuyan
【51CTO譯稿,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文譯者和出處為51CTO.com】