??The Begin??點點關注,收藏不迷路??
|
1、什么是Pod?
Pod是Kubernetes中最小的調度單元,它可以包含一個或多個容器。Pod中的所有容器共享網絡和存儲卷,它們一起運行在同一個節(jié)點上。Pod提供了一種抽象層,使得容器可以作為一個邏輯單元來管理。
Pod中的容器共享IP地址、端口空間和存儲,它們可以通過localhost / 127.0.0.1相互通信。
Pod的運行需要根據Kubernetes集群的工作節(jié)點來運行,具體調度哪個節(jié)點,根據調度器(Scheduler)實現。
2、Pod 的組成
1、容器:Pod中可以包含一個或多個容器,這些容器共享網絡和存儲卷。
2、共享網絡命名空間:Pod中的所有容器共享同一個網絡命名空間,它們可以相互通信。
3、存儲卷:Pod中的容器可以共享存儲卷,這些存儲卷可以用于數據持久化或共享。
3、Pod 如何管理多個容器
在 Kubernetes 中,Pod 是最小的可部署單元,可以包含一個或多個容器。Pod 內的所有容器共享相同的網絡命名空間、IP 地址和存儲卷,并在同一主機上調度。
例如:
可以將一個主要容器與一個或多個 Sidecar 容器組合在同一個 Pod 中。主要容器負責應用程序的主要邏輯,而 Sidecar 容器可以處理輔助任務,例如日志收集、監(jiān)控等。
要管理多個容器的 Pod,需要仔細設計容器之間的交互和共享資源,并利用 Kubernetes 提供的各種功能來簡化管理和操作。
比如:Kubernetes 提供了各種資源來管理多容器的 Pod,如 Deployment、StatefulSet、DaemonSet 等。這些資源可以自動管理 Pod 的部署、擴展和更新。
4、Pod 的網絡
在容器化應用中,Pod 中的容器需要相互通信,以及與外部系統進行通信。Pod 網絡提供了一種機制來管理這種通信,并確保安全、高效地進行網絡連接。
Pod 網絡的特性:
1、容器間通信:Pod 網絡允許 Pod 內的容器相互通信,這使得容器之間可以共享資源和信息。
2、跨節(jié)點通信:Pod 可以分布在 Kubernetes 集群的不同節(jié)點上,Pod 網絡負責確保跨節(jié)點的通信。
3、服務發(fā)現:Pod 網絡通常與 Kubernetes 中的服務發(fā)現機制結合使用,使得應用程序能夠輕松地發(fā)現和連接到其他服務。
4、網絡策略:Pod 網絡可以實施網絡策略,限制 Pod 之間的通信,提高安全性。
Pod 網絡實現方式:
1、Overlay 網絡:使用 Overlay 網絡技術(如 VXLAN、Flannel、Calico 等)創(chuàng)建一個虛擬網絡層,使得 Pod 可以透明地跨節(jié)點通信。
2、Host 網絡:容器直接使用節(jié)點的網絡命名空間,與節(jié)點共享網絡配置。這種方式效率高,但缺乏網絡隔離性。
3、混合網絡:結合 Overlay 網絡和 Host 網絡的優(yōu)勢,提供更靈活的網絡管理方式。
5、Pod 的存儲方式
容器是短暫的,它們可以隨時啟動、停止或重新調度。因此,任何存儲在容器中的數據都會隨著容器的生命周期而消失。為了持久化存儲應用程序的數據,需要一種機制來確保數據的持久性和可靠性。
Pod 存儲的特性:
1、持久性:Pod 存儲提供持久化的存儲機制,確保數據在容器重新啟動或遷移時不會丟失。
2、可靠性:Pod 存儲通常提供數據的備份、復制和恢復機制,以確保數據的可靠性和安全性。
3、性能:Pod 存儲應該具有良好的性能,能夠滿足應用程序對存儲的高吞吐量和低延遲的需求。
4、擴展性:Pod 存儲應該能夠方便地擴展以應對不斷增長的數據量和請求量。
Pod 存儲的實現方式:
1、空白存儲:它不會持久化保存任何數據,只是一種臨時存儲卷類型,在容器退出后會被刪除,用于臨時操作。
2、持久卷:通過 Kubernetes 的持久卷機制,可以將外部存儲卷掛載到 Pod 中,以實現數據的持久化存儲。
3、配置存儲:用于存儲敏感信息的一種資源,比如密碼、API 密鑰等。通常用于 Pod 的環(huán)境變量或者文件中,跨pod共享數據使用,與容器內部數據無關。
6、Pod 的工作方式
6.1 自主式 Pod
自主式 Pod(也稱為靜態(tài))Pod 是 Kubernetes 中的一種特殊類型的 Pod,它們不受控制器的管理,而是由用戶直接創(chuàng)建和管理。這意味著它們不受 ReplicaSet、Deployment 或其他控制器的管理。
自主式 Pod 通常用于特殊用例(測試、開發(fā)環(huán)境
)。
自主式 Pod 如果被刪除、即會從集群中徹底刪除,不會自動創(chuàng)建。
創(chuàng)建自主式 Pod 的一般步驟:
例子(創(chuàng)建自主式 Nginx Pod):
1、編寫 Nginx Pod 的 YAML 配置文件:
vim nginx-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service
spec:
type: NodePort
selector:
app: nginx
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30007
注意:nginx-service 將會匹配所有帶有 app: nginx 標簽的 Pods,并通過 NodePort 30007 將流量轉發(fā)到這些 Pods 的 80 端口。
2、 將 YAML 文件應用到 Kubernetes 集群:
kubectl apply -f nginx-pod.yaml
3. 驗證 Pod 是否成功創(chuàng)建:
kubectl get pods
kubectl get pods -o wide -l app=nginx
#查看Pod 的詳細信息
kubectl describe pod nginx
4. 訪問 Nginx Pod:
既然 Service 類型是 NodePort,可以通過任意 Kubernetes 集群節(jié)點的 IP 地址加上端口號 30007 來訪問 Nginx 服務,如 http://:30007。
5. 驗證自主式Pod刪除:
##刪除前面創(chuàng)建的自主式 Nginx Pod
[root@k8s-master test]# kubectl delete pod nginx-pod
pod "nginx-pod" deleted
[root@k8s-master test]#
[root@k8s-master test]# kubectl get pods -o wide -l app=nginx
No resources found in default namespace.
[root@k8s-master test]#
**結論**:
一旦刪除自主式 Pod,其狀態(tài)將無法恢復。在 Kubernetes 中,自主式 Pod 不會被控制器(如 Deployment 或 StatefulSet)所管理,因此刪除后無法自動重建。
6.2 監(jiān)控和管理 Pod
通常在生產環(huán)境中,Pod 都會由控制器對象(如 Deployment、StatefulSet、DaemonSet 等)進行管理,以確保高可用性、自動伸縮和故障恢復等功能。
這樣做的好處包括能夠更靈活地管理 Pod、自動重啟失敗的 Pod、根據需求擴展或縮減 Pod 數量等。
Kubernetes 會持續(xù)監(jiān)控 Pod 的狀態(tài),并確保其處于期望的狀態(tài)。如果 Pod 發(fā)生故障或終止,Kubernetes 將嘗試重新啟動 Pod,直到它達到期望的狀態(tài)為止。
1、編寫 Nginx Pod 的 YAML 配置文件:
前面的YAML 文件中包含了一個 Pod 和一個 Service 的定義,但沒有使用控制器(如 Deployment 或 StatefulSet、Daemonset等)來管理 Pod。
例如:使用Deployment控制器來管理 Pod,修改 前面YAML 文件以包含 Deployment 部分。
vim nginx-deployment-service.yaml
apiVersion: apps/v1
kind: Deployment # 指定資源的類型,這里是一個 Deployment 資源。
metadata:
name: nginx-deployment # 設置 Deployment 的名稱為 nginx-deployment
spec: # 規(guī)格部分,包含了 Deployment 的規(guī)格信息
replicas: 2 # 副本數為 2,表示將會創(chuàng)建 2 個 Pod,可以根據需要進行修改
selector:
matchLabels:
app: nginx # 選擇具有 app: nginx 標簽的 Pod
template:
metadata:
labels:
app: nginx # 為 Pod 設置標簽為 app: nginx
spec:
containers:
- name: nginx # 容器的名稱為 nginx
image: nginx:latest # 使用最新版本的 nginx 鏡像
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: nginx-service # 設置 Service 的名稱為 nginx-service
spec:
type: NodePort # 設置 Service 的類型為 NodePort,可以通過節(jié)點 IP 和節(jié)點端口來訪問 Service
selector:
app: nginx
ports:
- protocol: TCP
port: 80 # Service 監(jiān)聽的端口號為 80
targetPort: 80 # 將流量轉發(fā)到 Pod 中的端口號為 80 的容器
nodePort: 30007 # NodePort 類型的 Service 將會暴露在節(jié)點的 30007 端口上,可以通過節(jié)點 IP 和該端口來訪問 Service
2、 將 YAML 文件應用到 Kubernetes 集群:
kubectl apply -f nginx-deployment-service.yaml
3. 驗證 Pod 是否成功創(chuàng)建:
kubectl get pods
kubectl get pods -o wide -l app=nginx
#查看Pod 的詳細信息
kubectl describe pod nginx
5. 驗證控制器管理的Pod刪除:
測試:當刪除一個由控制器(如 Deployment)管理的 Pod 時,控制器將負責維護所需的副本數2。如果刪除了一個 Pod,控制器將會檢測到并嘗試按照定義的副本數重新創(chuàng)建 Pod,以確保所需的 Pod 數量處于正常狀態(tài)。
1、刪除 Pod:首先,我們將刪除由控制器管理的 Pod nginx-deployment-544dc8b7c4-5s9mk。
kubectl delete pods nginx-deployment-544dc8b7c4-5s9mk
2、驗證 Pod 刪除:使用以下命令確認 Pod 是否已被刪除:
kubectl get pods
3、等待 Pod 恢復:等待一段時間,讓控制器檢測到 Pod 的刪除并采取行動。根據配置,可能需要幾秒鐘或幾分鐘來重新創(chuàng)建 Pod。
4、確認 Pod 是否已恢復:再次運行以下命令來檢查 Pod 是否已被重新創(chuàng)建:
能夠看到新的 Pod 正在運行,并且它們的名稱與之前的 Pod 不同,因為控制器會為它們生成新的唯一標識符。這表明控制器成功地將被刪除的 Pod 替換為新的 Pod。
6.3 Pod 的創(chuàng)建流程
Pod 創(chuàng)建流程
Pod 創(chuàng)建的流程通常包括以下幾個步驟:
1、定義 Pod 的 YAML 文件:首先,您需要創(chuàng)建一個 Pod 的描述文件,通常是一個 YAML 文件,其中包含了 Pod 的各種配置信息,比如容器鏡像、資源需求、環(huán)境變量等。
2、API Server 接收請求:將 Pod 的 YAML 文件提交給 Kubernetes 集群的 API Server。
3、驗證和準備:API Server 首先會對 Pod 的描述進行驗證,包括格式檢查、權限檢查等。一旦驗證通過,Kubernetes 就會為 Pod 分配一個唯一的標識符。
4、調度器選擇節(jié)點:接下來,調度器(Scheduler)會根據 Pod 的調度需求(比如資源需求、親和性和反親和性規(guī)則等)選擇一個合適的節(jié)點(Node)來運行 Pod。
5、節(jié)點拉取鏡像:一旦調度器確定了節(jié)點,該節(jié)點上的容器運行時(比如 Docker 或者 Containerd)將會拉取 Pod 中定義的容器鏡像。
6、創(chuàng)建 Pod:容器運行時根據 Pod 的描述信息在節(jié)點上創(chuàng)建容器,并且應用相關的配置,比如掛載卷、設置網絡等。
7、運行容器:一旦容器創(chuàng)建完成,容器運行時就會啟動容器,并且監(jiān)控容器的運行狀態(tài)。
8、Pod 狀態(tài)更新:一旦 Pod 中的容器全部啟動成功,Kubernetes 就會更新該 Pod 的狀態(tài)為“運行中”。
9、監(jiān)控和自愈:Kubernetes 會持續(xù)監(jiān)控 Pod 的運行狀態(tài),如果發(fā)現 Pod 出現異常(比如容器崩潰、節(jié)點故障等),Kubernetes 會嘗試自動修復或者重新創(chuàng)建 Pod。文章來源:http://www.zghlxwxcb.cn/news/detail-847226.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-847226.html
??The End??點點關注,收藏不迷路??
|
到了這里,關于Kubernetes(k8s)核心資源解析:Pod詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!