激動(dòng)人心的時(shí)刻到了,終于到核心概念這一步了,前面的知識(shí)是有點(diǎn)“干燥了”。不急后面會(huì)看見代碼,可以多像金山打字一樣打一打代碼,熟悉一下yaml格式
Pod 在 Kubernetes 架構(gòu)中的位置和實(shí)現(xiàn)原理
Pod 在架構(gòu)中的位置
Pod 位于 Kubernetes 架構(gòu)的核心中,是構(gòu)建應(yīng)用的最小單元。Pod 可以用來(lái)運(yùn)行各種類型的應(yīng)用,包括 Web 應(yīng)用程序、數(shù)據(jù)庫(kù)、緩存、批處理作業(yè)等。
Pod 具體實(shí)現(xiàn)
- 容器: Pod 中的容器是 Pod 的基本組成單元,每個(gè)容器都是一個(gè)獨(dú)立的運(yùn)行環(huán)境。
- 共享資源: Pod 中的容器共享網(wǎng)絡(luò)、IPC 和存儲(chǔ)資源,這使得 Pod 內(nèi)部的容器之間可以進(jìn)行高效的通信和數(shù)據(jù)交換。
- 調(diào)度: Kubernetes 會(huì)根據(jù) Pod 的調(diào)度策略將其調(diào)度到合適的節(jié)點(diǎn)上運(yùn)行。
- 管理: Kubernetes 會(huì)對(duì) Pod 進(jìn)行生命周期管理,包括創(chuàng)建、運(yùn)行、重啟、終止等操作。
Pod 的實(shí)現(xiàn)依賴于 Kubernetes 的幾個(gè)核心組件:
- API Server: Kubernetes 的 API Server 是一個(gè) RESTful API,用于管理 Kubernetes 集群中的所有資源,包括 Pod。
- Scheduler: Kubernetes 的 Scheduler 負(fù)責(zé)將 Pod 調(diào)度到合適的節(jié)點(diǎn)上運(yùn)行。
- Kubelet: Kubelet 是運(yùn)行在每個(gè)節(jié)點(diǎn)上的代理,負(fù)責(zé)在節(jié)點(diǎn)上管理 Pod 的生命周期。
Pod 為什么在 Kubernetes 中很重要
Pod 在 Kubernetes 中扮演著重要的角色,主要有以下幾個(gè)原因:
- Pod 提供了一種簡(jiǎn)單易用的方式來(lái)部署和管理容器。 Pod 可以將多個(gè)容器作為一個(gè)單元進(jìn)行管理,簡(jiǎn)化了操作和維護(hù)。
- Pod 可以提高資源利用率。 Pod 可以將多個(gè)容器調(diào)度到同一個(gè)節(jié)點(diǎn)上運(yùn)行,從而提高資源利用率。
- Pod 可以提高應(yīng)用的可靠性。 Pod 可以通過(guò)重啟策略來(lái)保證應(yīng)用的可靠性。
Pod 的最佳實(shí)踐
在使用 Pod 時(shí),盡量遵循以下實(shí)踐:
- 每個(gè) Pod 僅包含一個(gè)容器。 除非有特殊需求,否則每個(gè) Pod 應(yīng)僅包含一個(gè)容器,以簡(jiǎn)化管理和維護(hù)。
- 使用合理的資源配置。 為 Pod 分配合理的資源,既要滿足應(yīng)用需求,又要避免資源浪費(fèi)。
- 定義端口配置。 為容器定義端口配置,以便其他 Pod 或服務(wù)可以訪問(wèn)容器。
- 使用 Pod 擴(kuò)縮容。 根據(jù)應(yīng)用需求,使用 Pod 擴(kuò)縮容策略來(lái)動(dòng)態(tài)調(diào)整 Pod 數(shù)量。
為什么Kubernetes會(huì)設(shè)計(jì)出一個(gè)全新的Pod的概念并且Pod有這樣特殊的組成結(jié)構(gòu)?
-
原因之一:在一組容器作為一個(gè)單元的情況下,我們難以簡(jiǎn)單地對(duì)“整體”進(jìn)行判斷及有效地行動(dòng)。
比如,一個(gè)容器死亡了,此時(shí)算是整體死亡么?是N/M的死亡率么?引入業(yè)務(wù)無(wú)關(guān)并且不易死亡的Pause容器作為Pod的根容器,以它的狀態(tài)代表整個(gè)容器組的狀態(tài),就簡(jiǎn)單、巧妙地解決了這個(gè)難題。
-
原因之二:Pod里的多個(gè)業(yè)務(wù)容器共享Pause容器的IP,共享Pause容器掛接的Volume
這樣既簡(jiǎn)化了密切關(guān)聯(lián)的業(yè)務(wù)容器之間的通信問(wèn)題,也很好地解決了它們之間的文件共享問(wèn)題。
Pod 概述
Pod 是 Kubernetes 中的核心概念,代表了一組并置的容器。 Pod 中的容器共享網(wǎng)絡(luò)、IPC 和存儲(chǔ)資源,并作為單個(gè)單元進(jìn)行調(diào)度和管理。Pod 可以包含一個(gè)或多個(gè)容器,但通常情況下,每個(gè) Pod 僅包含一個(gè)容器。
Pod 類型
類型 | 描述 | 典型應(yīng)用場(chǎng)景 | 詳細(xì)說(shuō)明 |
---|---|---|---|
普通 Pod | 運(yùn)行應(yīng)用程序 | Web 應(yīng)用程序、數(shù)據(jù)庫(kù)、緩存 | 適用于任何類型的應(yīng)用程序,可以根據(jù)需要進(jìn)行定制。 |
守護(hù)進(jìn)程 Pod | 確保 Pod 始終運(yùn)行 | 監(jiān)控代理、日志收集器 | 即使節(jié)點(diǎn)發(fā)生故障,也能確保 Pod 始終運(yùn)行。 |
無(wú)狀態(tài) Pod | 不保留任何數(shù)據(jù) | Web 服務(wù)器、負(fù)載均衡器 | Pod 終止后,所有數(shù)據(jù)都會(huì)丟失。 |
有狀態(tài) Pod | 保留數(shù)據(jù) | 數(shù)據(jù)庫(kù)、緩存、存儲(chǔ) | 使用持久卷存儲(chǔ)數(shù)據(jù),即使 Pod 終止后,數(shù)據(jù)仍然存在。 |
批處理 Pod | 執(zhí)行一次性任務(wù) | 數(shù)據(jù)處理、機(jī)器學(xué)習(xí)、分析 | 適用于需要并行執(zhí)行的任務(wù),完成后自動(dòng)銷毀。 |
Pod 特性
特性 | 描述 | 優(yōu)勢(shì) | 詳細(xì)說(shuō)明 |
---|---|---|---|
可移植性 | 在不同集群間遷移 | 提高部署靈活性 | 可以輕松地在不同的 Kubernetes 集群之間遷移 Pod,無(wú)需修改配置。 |
可擴(kuò)展性 | 按需擴(kuò)縮容 | 滿足流量變化需求 | 可以根據(jù)需要?jiǎng)討B(tài)擴(kuò)縮容 Pod,以滿足應(yīng)用流量的變化。 |
資源隔離 | 容器間相互隔離 | 提高資源利用率,確保應(yīng)用穩(wěn)定性 | 每個(gè)容器都擁有自己的資源配額,互不影響。 |
故障恢復(fù) | 自動(dòng)重啟 | 提高應(yīng)用可靠性 | Pod 失敗后可以自動(dòng)重啟,確保應(yīng)用始終可用。 |
Pod 生命周期
階段 | 描述 | 詳細(xì)說(shuō)明 |
---|---|---|
Pending | 等待調(diào)度 | Pod 尚未被分配到節(jié)點(diǎn)上。 |
Running | 正在運(yùn)行 | Pod 已經(jīng)運(yùn)行在節(jié)點(diǎn)上。 |
Succeeded | 成功完成 | Pod 已經(jīng)成功完成了任務(wù)。 |
Failed | 失敗 | Pod 運(yùn)行失敗。 |
Unknown | 狀態(tài)未知 | Pod 的狀態(tài)無(wú)法確定。 |
Pod 重啟策略
策略 | 描述 | 適用場(chǎng)景 | 詳細(xì)說(shuō)明 |
---|---|---|---|
Always | 始終重啟 | 持續(xù)運(yùn)行應(yīng)用 | Pod 失敗后會(huì)一直嘗試重啟,直到成功。 |
OnFailure | 因錯(cuò)誤失敗時(shí)重啟 | 可容忍短暫中斷應(yīng)用 | 只有當(dāng) Pod 因錯(cuò)誤而失敗時(shí)才會(huì)重啟。 |
Never | 不重啟 | 不需要自動(dòng)恢復(fù)應(yīng)用 | Pod 失敗后不會(huì)自動(dòng)重啟。 |
總結(jié)
Pod 是 Kubernetes 中的核心概念,理解 Pod 的工作原理和配置方式對(duì)于使用 Kubernetes 進(jìn)行應(yīng)用部署至關(guān)重要。這里放一張yaml格式的資源定義代碼圖片
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-854946.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-854946.html
Pod 常見屬性
屬性 | 說(shuō)明 | 默認(rèn)值 | 可選值 |
---|---|---|---|
apiVersion |
指示 Pod 使用的 Kubernetes API 版本 | v1 |
- |
kind |
指示資源類型 | Pod |
- |
metadata.name |
Pod 名稱 | 必填 | - |
metadata.namespace |
Pod 命名空間 | default |
- |
metadata.labels |
Pod 標(biāo)簽 | - | - |
spec.containers |
Pod 中的容器列表 | 必填 | - |
spec.containers.name |
容器名稱 | 必填 | - |
spec.containers.image |
容器鏡像 | 必填 | - |
spec.containers.command |
容器啟動(dòng)命令 | - | - |
spec.containers.args |
容器啟動(dòng)參數(shù) | - | - |
spec.containers.resources.limits.cpu |
容器 CPU 資源限制 | - | - |
spec.containers.resources.limits.memory |
容器內(nèi)存資源限制 | - | - |
spec.containers.resources.requests.cpu |
容器 CPU 資源請(qǐng)求 | - | - |
spec.containers.resources.requests.memory |
容器內(nèi)存資源請(qǐng)求 | - | - |
spec.containers.ports.name |
容器端口名稱 | - | - |
spec.containers.ports.containerPort |
容器端口號(hào) | 必填 | - |
spec.containers.ports.protocol |
容器端口協(xié)議 | TCP |
TCP, UDP |
spec.restartPolicy |
Pod 重啟策略 | Always |
Always, Never, OnFailure |
spec.schedulerName |
Pod 調(diào)度使用的調(diào)度器名稱 | default |
- |
spec.nodeSelector |
Pod 調(diào)度到節(jié)點(diǎn)的選擇器 | - | - |
spec.affinity |
Pod 的親和性規(guī)則 | - | - |
spec.tolerations |
Pod 的容忍度規(guī)則 | - | - |
spec.volumes |
Pod 使用的卷 | - | - |
spec.volumes.name |
卷名稱 | 必填 | - |
spec.volumes.hostPath.path |
主機(jī)路徑卷掛載路徑 | - | - |
spec.volumes.emptyDir.medium |
空目錄卷存儲(chǔ)介質(zhì) | - | Memory, None |
status.conditions |
Pod 的條件列表 | - | - |
status.conditions.type |
條件類型 | Ready, Running, etc. |
- |
status.conditions.status |
條件狀態(tài) | True, False |
- |
status.conditions.reason |
條件原因 | - | - |
status.containerStatuses |
Pod 中每個(gè)容器的運(yùn)行狀態(tài) | - | - |
status.containerStatuses.name |
容器名稱 | - | - |
status.containerStatuses.image |
容器鏡像 | - | - |
status.containerStatuses.containerID |
容器 ID | - | - |
status.containerStatuses.state.running |
容器運(yùn)行狀態(tài) | - | - |
status.containerStatuses.state.terminated.reason |
容器終止原因 | - | - |
status.containerStatuses.state.terminated.exitCode |
容器退出碼 | - | - |
status.hostIP |
Pod 所在節(jié)點(diǎn)的 IP 地址 | - | - |
status.podIP |
Pod 的 IP 地址 | - | - |
status.startTime |
Pod 的創(chuàng)建時(shí)間 | - | - |
到了這里,關(guān)于深入掌握k8s核心概念--Pod(一)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!