吉林省建筑市場(chǎng)監(jiān)管公共服務(wù)平臺(tái)朝陽seo
Pod是kubernetes中最小的資源管理組件,Pod也是最小化運(yùn)行容器化應(yīng)用的資源對(duì)象。一個(gè)Pod代表著集群中運(yùn)行的一個(gè)進(jìn)程。kubernetes中其他大多數(shù)組件都是圍繞著Pod來進(jìn)行支撐和擴(kuò)展Pod功能的,例如,用于管理Pod運(yùn)行的StatefulSet和Deployment等控制器對(duì)象,用于暴露Pod應(yīng)用的Service和Ingress對(duì)象,為Pod提供存儲(chǔ)的PersistentVolume存儲(chǔ)資源對(duì)象等。
//在Kubrenetes集群中Pod有如下兩種使用方式:
●一個(gè)Pod中運(yùn)行一個(gè)容器?!懊總€(gè)Pod中一個(gè)容器”的模式是最常見的用法;在這種使用方式中,你可以把Pod想象成是單個(gè)容器的封裝,kuberentes管理的是Pod而不是直接管理容器。
●在一個(gè)Pod中同時(shí)運(yùn)行多個(gè)容器。一個(gè)Pod中也可以同時(shí)封裝幾個(gè)需要緊密耦合互相協(xié)作的容器,它們之間共享資源。這些在同一個(gè)Pod中的容器可以互相協(xié)作成為一個(gè)service單位,比如一個(gè)容器共享文件,另一個(gè)“sidecar”容器來更新這些文件。Pod將這些容器的存儲(chǔ)資源作為一個(gè)實(shí)體來管理。
一個(gè)Pod下的容器必須運(yùn)行于同一節(jié)點(diǎn)上?,F(xiàn)代容器技術(shù)建議一個(gè)容器只運(yùn)行一個(gè)進(jìn)程,該進(jìn)程在容器中PID命令空間中的進(jìn)程號(hào)為1,可直接接收并處理信號(hào),進(jìn)程終止時(shí)容器生命周期也就結(jié)束了。若想在容器內(nèi)運(yùn)行多個(gè)進(jìn)程,需要有一個(gè)類似Linux操作系統(tǒng)init進(jìn)程的管控類進(jìn)程,以樹狀結(jié)構(gòu)完成多進(jìn)程的生命周期管理。運(yùn)行于各自容器內(nèi)的進(jìn)程無法直接完成網(wǎng)絡(luò)通信,這是由于容器間的隔離機(jī)制導(dǎo)致,k8s中的Pod資源抽象正是解決此類問題,Pod對(duì)象是一組容器的集合,這些容器共享Network、UTS及IPC命令空間,因此具有相同的域名、主機(jī)名和網(wǎng)絡(luò)接口,并可通過IPC直接通信。
Pod資源中針對(duì)各容器提供網(wǎng)絡(luò)命令空間等共享機(jī)制的是底層基礎(chǔ)容器pause,基礎(chǔ)容器(也可稱為父容器)pause就是為了管理Pod容器間的共享操作,這個(gè)父容器需要能夠準(zhǔn)確地知道如何去創(chuàng)建共享運(yùn)行環(huán)境的容器,還能管理這些容器的生命周期。為了實(shí)現(xiàn)這個(gè)父容器的構(gòu)想,kubernetes中,用pause容器來作為一個(gè)Pod中所有容器的父容器。這個(gè)pause容器有兩個(gè)核心的功能,一是它提供整個(gè)Pod的Linux命名空間的基礎(chǔ)。二來啟用PID命名空間,它在每個(gè)Pod中都作為PID為1進(jìn)程(init進(jìn)程),并回收僵尸進(jìn)程。
//pause容器使得Pod中的所有容器可以共享兩種資源:網(wǎng)絡(luò)和存儲(chǔ)。
●網(wǎng)絡(luò):
每個(gè)Pod都會(huì)被分配一個(gè)唯一的IP地址。Pod中的所有容器共享網(wǎng)絡(luò)空間,包括IP地址和端口。Pod內(nèi)部的容器可以使用localhost互相通信。Pod中的容器與外界通信時(shí),必須分配共享網(wǎng)絡(luò)資源(例如使用宿主機(jī)的端口映射)。
●存儲(chǔ):
Pod可以指定多個(gè)共享的Volume。Pod中的所有容器都可以訪問共享的Volume。Volume也可以用來持久化Pod中的存儲(chǔ)資源,以防容器重啟后文件丟失。
//總結(jié):
每個(gè)Pod都有一個(gè)特殊的被稱為“基礎(chǔ)容器”的Pause容器。Pause容器對(duì)應(yīng)的鏡像屬于Kubernetes平臺(tái)的一部分,除了Pause容器,每個(gè)Pod還包含一個(gè)或者多個(gè)緊密相關(guān)的用戶應(yīng)用容器。
//kubernetes中的pause容器主要為每個(gè)容器提供以下功能:
●在pod中擔(dān)任Linux命名空間(如網(wǎng)絡(luò)命令空間)共享的基礎(chǔ);
●啟用PID命名空間,開啟init進(jìn)程。
協(xié)調(diào)他的容器生命周期
提供健康檢查和生存探針
//Kubernetes設(shè)計(jì)這樣的Pod概念和特殊組成結(jié)構(gòu)有什么用意?????
●原因一:在一組容器作為一個(gè)單元的情況下,難以對(duì)整體的容器簡(jiǎn)單地進(jìn)行判斷及有效地進(jìn)行行動(dòng)。比如,一個(gè)容器死亡了 那么引入與業(yè)務(wù)無關(guān)的Pause容器作為Pod的基礎(chǔ)容器,以它的狀態(tài)代表著整個(gè)容器組的狀態(tài),這樣就可以解決該問題。
●原因二:Pod里的多個(gè)應(yīng)用容器共享Pause容器的IP,共享Pause容器掛載的Volume,這樣簡(jiǎn)化了應(yīng)用容器之間的通信問題,也解決了容器之間的文件共享問題。
//通常把Pod分為兩類:
●自主式Pod?
這種Pod本身是不能自我修復(fù)的,當(dāng)Pod被創(chuàng)建后(不論是由你直接創(chuàng)建還是被其他Controller),都會(huì)被Kuberentes調(diào)度到集群的Node上。直到Pod的進(jìn)程終止、被刪掉、因?yàn)槿鄙儋Y源而被驅(qū)逐、或者Node故障之前這個(gè)Pod都會(huì)一直保持在那個(gè)Node上。Pod不會(huì)自愈。如果Pod運(yùn)行的Node故障,或者是調(diào)度器本身故障,這個(gè)Pod就會(huì)被刪除。同樣的,如果Pod所在Node缺少資源或者Pod處于維護(hù)狀態(tài),Pod也會(huì)被驅(qū)逐。
●控制器管理的Pod
Kubernetes使用更高級(jí)的稱為Controller的抽象層,來管理Pod實(shí)例。Controller可以創(chuàng)建和管理多個(gè)Pod,提供副本管理、滾動(dòng)升級(jí)和集群級(jí)別的自愈能力。例如,如果一個(gè)Node故障,Controller就能自動(dòng)將該節(jié)點(diǎn)上的Pod調(diào)度到其他健康的Node上。雖然可以直接使用Pod,但是在Kubernetes中通常是使用Controller來管理Pod的。