目錄
序言
1 前言
2 為什么需要pod
3 什么是Pod?
3.1 Pod的組成
3.2 Pod的用途
3.3 Pod的生命周期
3.4 Pod的特點
4 Pod的使用
5 結(jié)論?
序言
任何一件事情,只要堅持六個月以上,你都可以看到質(zhì)的飛躍。
今天學習一下K8s-Pod相關(guān)內(nèi)容,希望此文,能幫助讀者對K8s-pod有一個進一步的了解
文章標記顏色說明:
- 黃色:重要標題
- 紅色:用來標記結(jié)論
- 綠色:用來標記一級論點
- 藍色:用來標記二級論點
1 前言
Kubernetes(簡稱k8s)是一個流行的開源容器編排系統(tǒng),它能夠簡化應用程序部署、管理和擴展。在Kubernetes中,Pod是最基本的部署單元。
本文將對Kubernetes Pod進行詳細介紹。
2 為什么需要pod
相信你在學習和使用 Kubernetes 項目的過程中,已經(jīng)不止一次地想要問這樣一個問題:
為什么我們會需要 Pod?
我們知道,容器的本質(zhì)是一種特殊的進程,如果映射到系統(tǒng)中,容器鏡像就是這個系統(tǒng)里的“.exe”安裝包。那么 Kubernetes 呢?Kubernetes 就是操作系統(tǒng)!
在一個真正的操作系統(tǒng)里,進程并不是“孤苦伶仃”地獨自運行的,而是以進程組的方式,“有原則地”組織在一起。
而 Kubernetes 項目所做的,其實就是將“進程組”的概念映射到了容器技術(shù)中,并使其成為了這個云計算“操作系統(tǒng)”里的“一等公民”。
Pod 是 Kubernetes 里的原子調(diào)度單位。這就意味著,Kubernetes 項目的調(diào)度器,是統(tǒng)一按照 Pod 而非容器的資源需求進行計算的。
關(guān)于 Pod 最重要的一個事實是:它只是一個邏輯概念。
也就是說,Kubernetes 真正處理的,還是宿主機操作系統(tǒng)上 Linux 容器的 Namespace 和 Cgroups,而并不存在一個所謂的 Pod 的邊界或者隔離環(huán)境。
那么,Pod 又是怎么被“創(chuàng)建”出來的呢?
答案是:Pod,其實是一組共享了某些資源的容器。
具體的說:
Pod 里的所有容器,共享的是同一個 Network Namespace,并且可以聲明共享同一個 Volume。
pod的實現(xiàn):
在 Kubernetes 項目里,Pod 的實現(xiàn)需要使用一個中間容器,這個容器叫作 Infra 容器。在這個 Pod 中,Infra 容器永遠都是第一個被創(chuàng)建的容器,
而其他用戶定義的容器,則通過 Join Network Namespace 的方式,與 Infra 容器關(guān)聯(lián)在一起。這樣的組織關(guān)系,叫做pod??梢杂孟旅孢@樣一個示意圖來表達:?
?如上圖所示,這個 Pod 里有兩個用戶容器 A 和 B,還有一個 Infra 容器。
Infra 容器一定要占用極少的資源,所以它使用的是一個非常特殊的鏡像,叫作:
k8s.gcr.io/pause
。這個鏡像是一個用匯編語言編寫的、永遠處于“暫停”狀態(tài)的容器,解壓后的大小也只有 100~200 KB 左右。而在 Infra 容器“Hold 住”Network Namespace 后,用戶容器就可以加入到 Infra 容器的 Network Namespace 當中了。
所以,如果你查看這些容器在宿主機上的 Namespace 文件,它們指向的值一定是完全一樣的。
這也就意味著,對于 Pod 里的容器 A 和容器 B 來說:
- 通信:它們可以直接使用 localhost 進行通信;
- 網(wǎng)絡(luò):它們看到的網(wǎng)絡(luò)設(shè)備跟 Infra 容器看到的完全一樣;
- IP地址:一個 Pod 只有一個 IP 地址,也就是這個 Pod 的 Network Namespace 對應的 IP 地址;
- 其他網(wǎng)絡(luò)資源:其他的所有網(wǎng)絡(luò)資源,都是一個 Pod 一份,并且被該 Pod 中的所有容器共享;
- 生命周期:Pod 的生命周期只跟 Infra 容器一致,而與容器 A 和 B 無關(guān)。
而對于同一個 Pod 里面的所有用戶容器來說,它們的進出流量,認為都是通過 Infra 容器完成的。
這一點很重要,因為將來如果你要為 Kubernetes 開發(fā)一個網(wǎng)絡(luò)插件時,應該重點考慮的是如何配置這個 Pod 的 Network Namespace,而不是每一個用戶容器如何使用你的網(wǎng)絡(luò)配置,這是沒有意義的。
有了這個設(shè)計之后,共享 Volume 就簡單多了:Kubernetes 項目只要把所有 Volume 的定義都設(shè)計在 Pod 層級即可。
3 什么是Pod?
Pod是Kubernetes中最小的可部署單元,它是一個或多個緊密關(guān)聯(lián)的容器的組合,這些容器共享同一個網(wǎng)絡(luò)命名空間和存儲卷。Pod提供了一個抽象層,它封裝了容器在節(jié)點上的運行環(huán)境,例如存儲、網(wǎng)絡(luò)和運行時環(huán)境。
3.1 Pod的組成
Pod由以下組件組成:
- 容器:Pod中可以有一個或多個容器。
- 共享存儲:Pod中的所有容器都可以訪問共享存儲卷。
- 網(wǎng)絡(luò):Pod中的所有容器都共享相同的網(wǎng)絡(luò)命名空間和IP地址。
3.2 Pod的用途
Pod是K8s中最基本的計算單元,用于托管應用程序或服務。Pod可用于:
- 運行單個容器應用程序。
- 運行多個相關(guān)容器應用程序。
- 運行應用程序和sidecar容器,sidecar容器提供支持應用程序所需的其他功能,如日志記錄、監(jiān)視和調(diào)試。
- 提供應用程序和其依賴項之間的網(wǎng)絡(luò)通信。
- 提供應用程序和存儲之間的訪問。
3.3 Pod的生命周期
Pod具有以下生命周期:
- 創(chuàng)建:當Pod定義被提交到K8s API服務器時,Pod被創(chuàng)建。
- 運行:當Pod被調(diào)度到節(jié)點上時,Pod處于運行狀態(tài)。
- 更新:可以通過更新Pod的定義來更新Pod中的容器和其他資源。
- 擴展:可以通過創(chuàng)建更多的Pod實例來擴展應用程序。
- 刪除:當Pod被刪除時,Pod中的容器被停止并且Pod中的資源被釋放。
3.4 Pod的特點
Pod具有以下特點:
- Pod是最小的可部署單元,它封裝了一個或多個容器。
- Pod提供了容器共享網(wǎng)絡(luò)和存儲的能力。
- Pod具有自己的IP地址和DNS名稱,可以作為一個獨立的服務進行訪問。
- Pod可以水平擴展,即可以通過副本集進行復制并進行負載均衡。
- Pod可以使用親和性和反親和性進行節(jié)點調(diào)度,以滿足特定的調(diào)度需求。
4 Pod的使用
要創(chuàng)建一個Pod,必須定義一個Pod描述文件,該文件描述了Pod的規(guī)范、容器和相關(guān)的資源。下面是一個示例Pod描述文件:
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
在上面的示例中,我們定義了一個名為nginx-pod的Pod,它包含一個名為nginx的容器,該容器使用最新的nginx鏡像,并監(jiān)聽80端口。
要創(chuàng)建該Pod,可以使用kubectl apply命令:
kubectl apply -f nginx-pod.yaml
該命令將會創(chuàng)建一個名為nginx-pod的Pod,并且啟動一個nginx容器。
5 結(jié)論
Pod是Kubernetes中最基本的部署單元,它封裝了一個或多個容器,并提供容器共享網(wǎng)絡(luò)和存儲的能力。文章來源:http://www.zghlxwxcb.cn/news/detail-791312.html
Pod也可以作為一個獨立的服務進行訪問,并且可以通過副本集進行復制并進行負載均衡。要使用Pod,必須定義一個Pod描述文件,并使用kubectl apply命令創(chuàng)建Pod。文章來源地址http://www.zghlxwxcb.cn/news/detail-791312.html
到了這里,關(guān)于【K8S系列】Pod詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!