kubernetes中的Pod簡述與實踐
Pod的概念
詳細的Pod解釋可參考k8s官網,關于Pod的概念主要有以下幾點:
(1)Pod是kubernetes中你可以建立和部署的最小也是最簡的機關。一個Pod代表着叢集中運作的一個程序;
(2)在Kubrenetes叢集中Pod的使用方式;
(3)Pod中如何管理多個容器
了解Pod
上面已經說了“Pod是kubernetes中你可以建立和部署的最小也是最簡的機關。一個Pod代表着叢集中運作的一個程序。”Pod中封裝着應用的容器(有的情況下是好幾個容器),存儲、獨立的網絡IP,管理容器如何運作的政策選項。Pod代表着部署的一個機關:kubernetes中應用的一個執行個體,可能由一個或者多個容器組合在一起共享資源。
#容器進行時,看參考如下文章或部落格:
(1)解密容器運作時
(2)Kubernetes(k8s)容器運作時(CRI)簡介
(3)容器運作時接口、容器網絡接口、容器存儲接口解析
Kubrenetes叢集中Pod的兩種使用方式之一
一個Pod中運作一個容器。
“每個Pod中一個容器”的模式是最常見的用法;在這種使用方式中,你可以把Pod想象成是單個容器的封裝,kuberentes管理的是Pod而不是直接管理容器。
Kubrenetes叢集中Pod的兩種使用方式之二
在一個Pod中同時運作多個容器。
一個Pod中也可以同時封裝幾個需要緊密耦合互相協作的容器,它們之間共享資源。這些在同一個Pod中的容器可以互相協作成為一個service機關——一個容器共享檔案,另一個“sidecar”容器來更新這些檔案。Pod将這些容器的存儲資源作為一個實體來管理。
##說明:文檔中“ image: dockerhub.com/redis:3.2.8”并不是真實的,如有需要請自行去下載下傳!
##說明
在一個Pod中同時運作多個容器是一種比較進階的用法。隻有當你的容器需要緊密配合協作的時候才考慮用這種模式。例如,你有一個容器作為web伺服器運作,需要用到共享的volume,有另一個“sidecar”容器來從遠端擷取資源更新這些檔案,如下圖所示:
Pod資源
Pod中可以共享兩種資源:網絡和存儲。
(1)網絡
每個Pod都會被配置設定一個唯一的IP位址。Pod中的所有容器共享網絡空間,包括IP位址和端口。Pod内部的容器可以使用localhost互相通信。Pod中的容器與外界通信時,必須配置設定共享網絡資源(例如使用主控端的端口映射)。
(2)存儲
可以Pod指定多個共享的Volume。Pod中的所有容器都可以通路共享的volume。Volume也可以用來持久化Pod中的存儲資源,以防容器重新開機後檔案丢失。
使用Pod
你很少會直接在kubernetes中建立單個Pod。因為Pod的生命周期是短暫的,用後即焚的實體。當Pod被建立後(不論是由你直接建立還是被其他Controller),都會被Kuberentes排程到叢集的Node上。直到Pod的程序終止、被删掉、因為缺少資源而被驅逐、或者Node故障之前這個Pod都會一直保持在那個Node上。
(1)重新開機Pod中的容器跟重新開機Pod不是一回事。Pod隻提供容器的運作環境并保持容器的運作狀态,重新開機容器不會造成Pod重新開機。
(2)Pod不會自愈。如果Pod運作的Node故障,或者是排程器本身故障,這個Pod就會被删除。同樣的,如果Pod所在Node缺少資源或者Pod處于維護狀态,Pod也會被驅逐。Kubernetes使用更進階的稱為Controller的抽象層,來管理Pod執行個體。雖然可以直接使用Pod,但是在Kubernetes中通常是使用Controller來管理Pod的。
Pod和Controller
Controller可以建立和管理多個Pod,提供副本管理、滾動更新和叢集級别的自愈能力。例如,如果一個Node故障,Controller就能自動将該節點上的Pod排程到其他健康的Node上。
具體的執行個體可參考:建立和管理多個Pod--Deployment