有了容器为什么kubernetes还需要Pod?
簡介
容器并不是軟件開發(fā)的銀彈,沒有任何一種技術(shù)能解決軟件開發(fā)中的所有問題
當(dāng)我們采用容器化技術(shù)的時候,摒棄了傳統(tǒng)的物理機或者虛擬機的部署方式,以一種更加輕快,便捷的方式來部署我們的應(yīng)用。到容器化的進階,再加上kubernetes對容器的編排技術(shù),使得容器化的利益進一步擴大。但是對于kubernetes來說,直接調(diào)度編排管理的基本單位并非容器,而是另外一種結(jié)構(gòu)體。
假設(shè)容器中同時運行著多個不相關(guān)的進程,這些進程的持續(xù)運行,管理,以及輸入輸出日志會是容器的責(zé)任。如果這些不相關(guān)的進程同時都有標(biāo)準(zhǔn)的輸出,而此時我們很難確定每個進程具體輸出了什么內(nèi)容。另一方面,每個容器是一個邏輯的運行單位,有著自己的命名空間,IP以及端口和其他信息,假如非一個團隊開發(fā)的不同進程監(jiān)聽了相同的端口號,必將發(fā)生資源的爭奪沖突。雖然多個進程運行在同一個容器中,無論是通過進程間通信還是通過存儲文件進行共享文件都很容易,但是Docker和kubernetes還是期望每個進程都運行在自己的容器中,除非是和自己相關(guān)的子進程。如果你的多個進程有著依賴關(guān)系(例如:一個進程的啟動依賴于另外一個進程),這樣的多個進程推薦運行在相同的容器中。
由于不推薦將無關(guān)的進程運行在同一個容器中,但是特殊情況下還存在要求多個相關(guān)進程運行于同一個容器的需求,kubernetes提供了一種更高級的結(jié)構(gòu)來把容器捆綁在一起,并將這種結(jié)構(gòu)作為調(diào)度部署的基本單元,這個結(jié)構(gòu)就是Pod。
Pod是一組并置的容器,是kubernetes中基本的構(gòu)建模塊。但是這并不意味著一個Pod總是包含多個容器,在實際應(yīng)用中每個Pod只有一個容器是最常見的部署方式。這里要注意一點,雖然對于kubernetes來說,并不關(guān)心Pod位于哪個節(jié)點上,但是一個Pod的多個容器位于多個節(jié)點是不允許的,換句話說,同一個Pod的多個容器總是運行在同一個集群節(jié)點上。
kubernetes部署和操作的基本單位是Pod
隔離
相同Pod下運行的容器之間可以共享一些資源,但是并非全部資源(話句話說,這些容器并非完全隔離的),kubernetes通過配置可以讓同一個Pod內(nèi)的容器共享相同的linux命名空間和network等資源,所以這些容器共享相同的主機名和網(wǎng)絡(luò)接口,話句話說,這些容器在Pod中可以進行IPC通信,就像在局域網(wǎng)中一樣。既然共享相同的IP和端口號,那么多個容器就不能綁定到相同的端口,否則會出現(xiàn)端口沖突,所以這也是官方推薦一個Pod只運行一個容器的原因之一。
每個Pod都有自己獨立的Ip和端口空間,所以不同的Pod內(nèi)的容器永遠不會發(fā)生端口沖突。同一個Pod中的容器具有相同的loopback,因此可以通過localhost與同一Pod中的其他容器進行通信
Pod網(wǎng)絡(luò)
在同一個kubernetes集群中的Pod就和局域網(wǎng)內(nèi)的每臺服務(wù)器一樣,他們共享一個網(wǎng)絡(luò)地址空間,這個網(wǎng)絡(luò)是通過軟件基于真實鏈路來實現(xiàn)的。所以只要知道一個Pod的IP地址就可以進行訪問,這個通信過程不通過網(wǎng)關(guān),在通信上性能非常好。由于kubernetes把資源進行了抽象,所以Pod無論位于哪個服務(wù)器節(jié)點上,對于同一個集群內(nèi)的Pod來說都一樣。
Pod使用多個容器
在多數(shù)情況下,我還是建議每個Pod運行一個容器,但是如果你的多個容器有互相依賴關(guān)系(比如一個容器的啟動依賴于另外一個容器),就需要把多個容器部署到一個Pod。一個Pod中運行一個容器更多的是基于應(yīng)用分層的考慮,例如:一個應(yīng)用的容器需要調(diào)用一個數(shù)據(jù)庫的容器,這兩個容器應(yīng)該分配到不同的Pod中,不僅僅是為了提高集群機器的利用率,更是為了之后不同層次的擴容。對于kubernetes來說,操作和部署的基本單位是Pod,所以kubernetes擴容的單位是Pod并非容器,如果我們的應(yīng)用層有性能瓶頸,我們就可以單獨的對應(yīng)用層的Pod進行單獨擴容,其他層的Pod保持不變,這不僅僅是節(jié)省資金成本的問題了,而是橫向擴展的靈活性問題。
●程序員修神之路--打通Docker鏡像發(fā)布容器運行流程
●程序員修神之路--容器技術(shù)為什么會這么流行(記得去抽獎)
●程序員修神之路--kubernetes是微服務(wù)發(fā)展的必然產(chǎn)物
●程序員過關(guān)斬將--要想獲取我的用戶信息,就得按照規(guī)矩來
●程序員過關(guān)斬將--更加優(yōu)雅的Token認(rèn)證方式JWT
●程序員過關(guān)斬將--cookie和session的關(guān)系其實很簡單
●程序員修神之路--用NOSql給高并發(fā)系統(tǒng)加速
●程序員修神之路--高并發(fā)系統(tǒng)設(shè)計負載均衡架構(gòu)
●程序員修神之路--做好分庫分表其實很難之一(繼續(xù)送書)
●程序員修神之路--做好分庫分表其實很難之二(送書繼續(xù))
●程序員過關(guān)斬將--你為什么還在用存儲過程?
●程序員過關(guān)斬將--小小的分頁引發(fā)的加班血案
●程序員修神之路--問世間異步為何物?
●程序員修神之路--提高網(wǎng)站的吞吐量????
總結(jié)
以上是生活随笔為你收集整理的有了容器为什么kubernetes还需要Pod?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 国产自主研发编程语言火了,同行十二年,不
- 下一篇: 使用 OAS(OpenAPI标准)来描述