Pod 是 Kubernetes 中最小的執(zhí)行單元。一個(gè) pod 封裝了一個(gè)或多個(gè)應(yīng)用程序。Pod 本質(zhì)上是短暫的,如果 pod(或它執(zhí)行的節(jié)點(diǎn))發(fā)生故障,Kubernetes 可以自動(dòng)創(chuàng)建該 pod 的新副本以繼續(xù)操作。Pod 包含一個(gè)或多個(gè) 容器 (例如 Docker 容器)。Pod 還提供環(huán)境依賴項(xiàng),包括持久存儲(chǔ)卷(永久且可用于集群中所有 pod 的存儲(chǔ))和在 pod 中運(yùn)行容器所需的配置數(shù)據(jù)。
Pod 有什么作用?
Pod 代表在集群上運(yùn)行的進(jìn)程。通過(guò)將 pod 限制為單個(gè)進(jìn)程,Kubernetes 可以報(bào)告集群中運(yùn)行的每個(gè)進(jìn)程的運(yùn)行狀況。豆莢有:
- 唯一的 IP 地址(允許它們相互通信)
- 持久存儲(chǔ)卷(根據(jù)需要)
- 確定容器應(yīng)如何運(yùn)行的配置信息。
盡管大多數(shù) pod 都包含一個(gè)容器,但許多 pod 會(huì)有幾個(gè)容器緊密協(xié)作以執(zhí)行所需的功能。
豆莢有什么好處?
當(dāng) pod 包含多個(gè)容器時(shí),它們之間的通信和數(shù)據(jù)共享會(huì)被簡(jiǎn)化。由于 pod 中的所有容器共享相同的網(wǎng)絡(luò)命名空間,因此它們可以相互定位并通過(guò) localhost 進(jìn)行通信。Pod 可以通過(guò)使用另一個(gè) pod 的 IP 地址或通過(guò)引用駐留在另一個(gè) pod 中的資源來(lái)相互通信。
Pod 可以包含在 Pod 啟動(dòng)時(shí)運(yùn)行的容器,例如在應(yīng)用程序容器運(yùn)行之前執(zhí)行所需的啟動(dòng)。此外,Pod 簡(jiǎn)化了可擴(kuò)展性,允許根據(jù)需求變化自動(dòng)創(chuàng)建和關(guān)閉副本 Pod。
吊艙是如何工作的?
Pod 由稱為控制器的工作負(fù)載資源創(chuàng)建,控制器管理集群中 Pod 的推出、復(fù)制和運(yùn)行狀況。例如,如果集群中的一個(gè)節(jié)點(diǎn)發(fā)生故障,控制器會(huì)檢測(cè)到該節(jié)點(diǎn)上的 pod 沒有響應(yīng),并在其他節(jié)點(diǎn)上創(chuàng)建替換 pod。
三種最常見的控制器類型是:
- 臨時(shí)的批處理類型作業(yè) 的作業(yè),將運(yùn)行任務(wù)完成
- 無(wú)狀態(tài)和持久性應(yīng)用程序的部署 ,例如 Web 服務(wù)器(HPPT 服務(wù)器)
- StatefulSets 用于有狀態(tài)和持久性的應(yīng)用程序,例如數(shù)據(jù)庫(kù)
如果一個(gè) pod 有多個(gè)容器,它們都一起調(diào)度在集群中的同一臺(tái)服務(wù)器上,無(wú)論是虛擬機(jī)還是物理服務(wù)器。pod 中的所有容器共享它們的資源和依賴關(guān)系,并且可以協(xié)調(diào)它們的執(zhí)行和終止。例如,pod 可以包含在應(yīng)用程序容器運(yùn)行之前運(yùn)行的“init”容器,為隨后的應(yīng)用程序設(shè)置環(huán)境。
Pod 幾乎總是由控制器創(chuàng)建,然后控制器可以自動(dòng)管理 pod 生命周期,包括替換失敗的 pod、在必要時(shí)復(fù)制 pod,以及在它們完成或不再需要時(shí)將 pod 從集群節(jié)點(diǎn)中逐出。
控制器使用 pod 模板中的信息來(lái)創(chuàng)建 pod,控制器確保正在運(yùn)行的 pod 與 pod 模板中定義的部署相匹配,例如通過(guò)創(chuàng)建副本以匹配部署中定義的數(shù)量。
Pod 之間是如何通信的?
創(chuàng)建 pod 時(shí),會(huì)為其分配自己的唯一 IP 地址。如果 pod 中有多個(gè)容器,它們之間可以簡(jiǎn)單地使用 localhost 進(jìn)行通信。pod 外部的通信是通過(guò)暴露一個(gè)端口來(lái)實(shí)現(xiàn)的。集群中 pod 之間的通信利用了 Kubernetes 為集群中的每個(gè) pid 分配集群私有 IP 地址這一事實(shí),從而無(wú)需在 pod 之間顯式創(chuàng)建鏈接或?qū)⑷萜鞫丝谟成涞街鳈C(jī)端口。通過(guò)這種方式,集群中的每個(gè) pod 都可以“看到”彼此,而無(wú)需 NAT。
什么是基本的 kubectl 命令?
Kubectl 提供了許多命令,允許用戶創(chuàng)建 pod、使用部署運(yùn)行它們、檢查正在運(yùn)行的 pod 的狀態(tài)以及停止不再需要的 pod。JSON(JavaScript Object Notation)或 YAML(YAML Ain't Markup Language)命令對(duì)于編碼命令都是有效的。
常用的 kubectl 命令如下:
得到
kubectl get 命令將顯示一個(gè)或多個(gè)資源的表格信息。可以使用標(biāo)簽選擇器過(guò)濾信息。可以僅從現(xiàn)有命名空間或集群中的所有命名空間顯示信息。
命令“kubectl api-resources”將生成所有受支持資源的列表,您可以“獲取”有關(guān)這些資源的信息。kubectl get 命令的一般格式是:
$ kubectl get [(-o|--output=)json|yaml|wide|custom-columns=...|custom-columns-file=...|go-template=...|go-template-file =...|jsonpath=...|jsonpath-file=...] (TYPE[.VERSION][.GROUP] [NAME | -l label] | TYPE[.VERSION][.GROUP]/NAME .. .) [旗幟]
創(chuàng)建 Pod
Pod 是使用 create 命令創(chuàng)建的,格式如下:
$ kubectl 創(chuàng)建 -f 文件名。
例如,命令:
kubectl create -f ./mypod.yaml 將從 YAML 文件“mypod”創(chuàng)建一個(gè)新 pod
刪除 Pod
命令 “kubectl delete -f ./mypod.yaml” 將從集群中刪除 pod “mypod”。刪除 pod 是一個(gè)優(yōu)雅的過(guò)程;Pod 將在被強(qiáng)制終止之前繼續(xù)運(yùn)行一段寬限期(默認(rèn)為 30 秒)。如果需要,可以使用 –grace-period 標(biāo)志覆蓋寬限期值。