K8S-Pod(上)

Pod概念

Pod 是可以在 Kubernetes 中創建和管理的、最小的可部署的計算單元

Pod是一組(一個或多個)容器;這些容器共享存儲、網絡、以及怎樣運行這些容器的規約。Pod 中的內容總是并置(colocated)的并且一同調度,在共享的上下文中運行。Pod 所建模的是特定于應用的“邏輯主機”,其中包含一個或多個應用容器,這些容器相對緊密地耦合在一起。

核心特性

  • 共享上下文:Pod 的共享上下文包括一組 Linux 名字空間、控制組(CGroup)和可能一些其他的隔離方面。在 Pod 的上下文中,各獨立的應用可能會進一步實施隔離。
  • 邏輯主機:Pod 類似于共享名字空間并共享文件系統卷的一組容器。
  • 容器運行時:為了運行 Pod,你需要提前在每個節點安裝好容器運行時(如 Containerd 或 Docker)。

兩種主要用法

單容器 Pod

最常見的 Kubernetes 使用模式,將 Pod 視為單個容器的包裝器。Kubernetes 直接管理 Pod 而不是容器本身。

多容器 Pod

Pod 可以封裝由緊密耦合且需要共享資源的多個并置容器組成的應用。這些位于同一位置的容器構成一個內聚的服務單元。

將多個并置、同管的容器組織到一個 Pod 是一種相對高級的使用場景。橫向擴展應通過副本機制實現,而非在同一 Pod 中添加多個容器。

Pod 示例

下面是一個 Pod 示例,它由一個運行鏡像 nginx:1.14.2 的容器組成。

# simple-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: nginx
spec:containers:- name: nginximage: nginx:1.14.2ports:- containerPort: 80

要創建上面顯示的 Pod,運行以下命令:

kubectl apply -f simple-pod.yaml

通過工作負載資源管理 Pod

使用工作負載資源來創建和管理 Pod。Pod 被設計成了相對臨時性的、用后即拋的一次性實體。

直接創建 Pod 的問題

  • Pod 是臨時性的,節點故障會導致 Pod 丟失
  • 缺乏擴縮容能力
  • 沒有自動修復機制
  • 無法實現滾動更新

常見的工作負載資源

  • Deployment:適用于管理無狀態應用,支持滾動更新和回滾
  • StatefulSet:適用于管理有狀態應用,提供穩定的網絡標識和持久存儲。
  • DaemonSet:確保所有(或部分)節點上運行一個 Pod 的副本。
  • Job:用于運行一次性任務。
  • CronJob:用于運行周期性任務。

這些資源的控制器能夠處理副本的管理、上線,并在 Pod 失效時提供自愈能力

Deployment示例

**apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deploymentlabels:app: nginx
spec:replicas: 3selector:matchLabels:app: nginxstrategy:type: RollingUpdaterollingUpdate:maxSurge: 25%maxUnavailable: 25%template:metadata:labels:app: nginxspec:containers:- name: nginximage: nginx:1.25.3ports:- containerPort: 80**

Pod 模板

工作負載資源的控制器使用 Pod 模板 來創建和管理 Pod。Pod 模板是包含在工作負載對象中的規范,是目標狀態的一部分。

apiVersion: batch/v1
kind: Job
metadata:name: hello
spec:template:# 這里是 Pod 模板spec:containers:- name: helloimage: busybox:1.28command: ['sh', '-c', 'echo "Hello, Kubernetes!" && sleep 3600']restartPolicy: OnFailure# 以上為 Pod 模板

重要:修改 Pod 模板不會對已經存在的 Pod 直接起作用。控制器會根據新模板創建新的 Pod 來替換舊的 Pod。

Pod 生命周期

Pod 被調度到節點上后會一直保持運行,直到:

  • Pod 中的容器執行完畢。
  • Pod 對象被刪除。
  • Pod 因資源不足而被驅逐。
  • 節點失效。

生命周期階段

  1. Pending(掛起):Pod 已被 Kubernetes 系統接受,但有一個或多個容器尚未創建或運行。
  2. Running(運行中):Pod 已綁定到一個節點,所有容器都已創建。至少有一個容器仍在運行,或者正處于啟動或重啟過程中。
  3. Succeeded(成功):Pod 中的所有容器都已成功終止,并且不會再重啟。
  4. Failed(失敗):Pod 中的所有容器都已終止,并且至少有一個容器是因為失敗終止。
  5. Unknown(未知):通常是由于無法與 Pod 所在節點的 kubelet 通信所致。

重啟策略

通過 spec.restartPolicy 字段控制

  • Always:容器失敗時總是重啟(默認)。
  • OnFailure:容器以非零狀態退出時重啟。
  • Never:從不重啟。

Init 容器

Pod 可以包含在應用容器啟動前運行的 Init 容器。Init 容器總是運行到完成為止,并且每個 Init 容器都必須成功啟動,下一個 Init 容器才能運行。如果 Init 容器失敗,Kubernetes 會不斷地重啟 Pod,直到 Init 容器成功為止。

容器探針

-器進程還在運行,并不代表應用是健康的。它可能死鎖、可能正在啟動(但還未就緒)、可能依賴的服務不可用。探針讓 Kubernetes 能夠感知應用內部的真實狀態,并做出相應決策。

探針類型

  • livenessProbe:檢測容器是否正在運行。如果失敗,kubelet 會殺死容器,然后根據重啟策略進行處理。
  • readinessProbe:檢測容器是否已準備好服務請求。如果失敗,端點控制器將從與 Pod 匹配的所有 Service 的端點中移除該 Pod 的 IP 地址。
  • startupProbe:指示容器內的應用是否已啟動。如果提供了啟動探針,則所有其他探針都會被禁用,直到它成功為止。

探針的三種動作

  • ExecAction:在容器內執行指定命令。
    • 如果命令退出碼為 0,則認為診斷成功。
    • 配置 : livenessProbe: exec: command: - cat - /tmp/healthy
  • TCPSocketAction:對指定端口上的容器 IP 地址進行 TCP 檢查。
    • 如果端口能連通,則認為診斷成功。
    • 配置 : livenessProbe: tcpSocket: port: 8080
  • HTTPGetAction:對指定端口和路徑上的容器 IP 地址執行 HTTP Get 請求。
    • 如果響應的狀態碼在 200 到 399 之間,則認為診斷成功。
    • 配置 : livenessProbe: httpGet: path: /healthz port: 8080 httpHeaders: - name: Custom-Header value: Awesome

Pod 的資源共享和通信

存儲

  • 一個 Pod 可以設置一組共享的存儲卷(Volume)。Pod 中的所有容器都可以訪問該共享卷,從而允許這些容器共享數據。卷還允許 Pod 中的持久數據保留下來,即使其中的容器需要重新啟動。
  • 容器中的文件系統是臨時的,容器重啟后文件會丟失。

卷是一個目錄,可以被 Pod 中的一個或多個容器訪問。卷的生命周期不屬于容器,它由 Pod 和外部存儲源決定。

類型
  • emptyDir
    • 生命周期:與 Pod 的生命周期完全一致。Pod 被刪除,數據也隨之刪除。
    • 用途:用于 Pod 內容器之間的臨時數據共享(例如,一個容器生產數據,另一個容器消費數據)。節點重啟后數據也會丟失。
  • hostPath:
    • 生命周期:將節點上的文件系統目錄或文件掛載到 Pod 中。數據持久化在節點上,即使 Pod 被刪除,數據依然存在。
  • configMap / secret:
    • 生命周期:將 Kubernetes 對象(ConfigMap/Secret)中的數據作為文件或環境變量注入到容器中。
  • 持久卷 (persistentVolumeClaim - PVC):
    • 生產環境的標準做法。
    • 生命周期:獨立于 Pod。Pod 被刪除后,數據依然安全地保存在外部存儲系統中(如云硬盤、NFS、Ceph 等)。
    • 工作原理:管理員預先創建持久卷 (PersistentVolume, PV):代表一塊實際的網絡存儲。用戶創建持久卷聲明 (PersistentVolumeClaim, PVC):像一個“申請單”,聲明需要多大的存儲、需要什么訪問模式(如 ReadWriteOnce)。在 Pod 中通過 volumes.persistentVolumeClaim 字段綁定 PVC。

PVC示例

apiVersion: v1
kind: Pod
metadata:name: my-app-with-db
spec:containers:- name: appimage: my-app:latestvolumeMounts:- name: data-storage # 掛載名為 data-storage 的卷mountPath: /var/data # 掛載到容器內的路徑volumes:- name: data-storage # 定義卷的名稱persistentVolumeClaim:claimName: my-pvc # 指定要使用的PVC名稱

網絡

  • 每個 Pod 都在每個地址族中獲得一個唯一的 IP 地址
  • Pod 中的每個容器共享網絡名字空間,包括 IP 地址和網絡端口。
  • Pod 內的容器可以使用 localhost 互相通信。
  • 不同 Pod 中的容器具有不同的 IP 地址,需要通過 Pod IP 進行通信。

網絡實現細節:

  1. 暫停容器 (Pause Container)

    • 當創建一個 Pod 時,Kubernetes 會先創建一個名為 pause 的極小容器。它的唯一作用是持有 Pod 的網絡命名空間 (Network Namespace)
    • Pod 內的其他容器(用戶容器)會通過 Docker 的 --net=container:<id> 參數加入到這個 pause 容器的網絡命名空間中,從而實現網絡共享。
  2. 容器間通信

    • 在同一個 Pod 內,容器可以通過 localhost 和端口號直接通信,就像在同一臺機器上一樣。
  3. Pod 間通信

    • Pod-to-Pod:通過對方的 Pod IP 直接通信。這是最基礎的通信方式,但 Pod IP 是臨時的,Pod 重啟后會改變。
    • Service:為了解決 Pod IP 不固定的問題,Kubernetes 引入了 Service。Service 是一個穩定的抽象層,它有一個固定的 虛擬 IP (VIP) 和 DNS 名稱。Service 通過標簽選擇器 (Selector) 將流量負載均衡到一組后端 Pod 上。
      • ClusterIP:默認類型,在集群內部暴露 Service。
      • NodePort:通過每個節點的靜態端口暴露 Service。
      • LoadBalancer:使用云提供商的負載均衡器對外暴露 Service。
    • Ingress:用于管理外部訪問集群內服務的 HTTP/HTTPS 路由規則,提供更高級的功能如基于域名和路徑的路由、SSL 終止等。它本身不是一種 Service,而是位于 Service 之前的入口控制器。
示例:網絡訪問流程

外部用戶 -> (通過 LoadBalancer/NodePort) -> Service (VIP) -> (通過 iptables/IPVS 規則) -> 目標 Pod (在某個節點上)。

K8S官方文檔
參考文章
K8Buard關于Pod存儲官方文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98440.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98440.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98440.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink TaskManager日志時間與實際時間有偏差

Flink 啟動一個任務后&#xff0c;發現TaskManager上日志時間與實際時間相差約 15 小時。 核心原因可能是&#xff1a; 1、 服務器&#xff08;或容器&#xff09;的系統時間配置錯誤2、 Flink 日志組件&#xff08;如 Logback/Log4j&#xff09;的時間配置未使用系統默認時區…

Webug3.0通關筆記18 中級進階第06關 實戰練習:DisCuz論壇SQL注入漏洞

目錄 一、環境搭建 1、服務啟動 2、源碼解壓 3、構造訪問靶場URL 4、靶場安裝 5、訪問論壇首頁 二、代碼分析 1、源碼分析 2、SQL注入分析 三、滲透實戰 &#xff08;1&#xff09;判斷是否有SQL注入風險 &#xff08;2&#xff09;查詢賬號密碼 Discuz! 作為國內知…

SWEET:大語言模型的選擇性水印

摘要背景與問題大語言模型出色的生成能力引發了倫理與法律層面的擔憂&#xff0c;于是通過嵌入水印來檢測機器生成文本的方法逐漸發展起來。但現有工作在代碼生成任務中無法良好發揮作用&#xff0c;原因在于代碼生成任務本身的特性&#xff08;代碼有其特定的語法、邏輯結構&a…

FastDFS V6雙IP特性及配置

FastDFS V6.0開始支持雙IP&#xff0c;tracker server和storage server均支持雙IP。V6.0新增特性說明如下&#xff1a;支持雙IP&#xff0c;一個內網IP&#xff0c;一個外網IP&#xff0c;可以支持NAT方式的內網和外網兩個IP&#xff0c;解決跨機房或混合云部署問題。FastDFS雙…

筆記本、平板如何成為電腦拓展屏?向日葵16成為副屏功能一鍵實現

向日葵16重磅上線&#xff0c;本次更新新增了諸多實用功能&#xff0c;提升遠控效率&#xff0c;實現應用融合突破設備邊界&#xff0c;同時全面提升遠控性能&#xff0c;操作更順滑、畫質更清晰&#xff01;無論遠程辦公、設計、IT運維、開發還是游戲娛樂&#xff0c;向日葵16…

基于Spring Boot + MyBatis的用戶管理系統配置

我來為您詳細分析這兩個配置文件的功能和含義。 一、文件整體概述 這是一個基于Spring Boot MyBatis的用戶管理系統配置&#xff1a; UserMapper.xml&#xff1a;MyBatis的SQL映射文件&#xff0c;定義了用戶表的增刪改查操作application.yml&#xff1a;Spring Boot的核心配置…

80(HTTP默認端口)和8080端口(備用HTTP端口)區別

文章目錄**1. 用途**- **80端口**- **8080端口****2. 默認配置**- **80端口**- **8080端口****3. 聯系**- **邏輯端口**&#xff1a;兩者都是TCP/IP協議中的邏輯端口&#xff0c;用于標識不同的網絡服務。- **可配置性**&#xff1a;端口號可以根據需要修改&#xff08;例如將T…

【開題答辯全過程】以 汽車知名品牌信息管理系統為例,包含答辯的問題和答案

個人簡介一名14年經驗的資深畢設內行人&#xff0c;語言擅長Java、php、微信小程序、Python、Golang、安卓Android等開發項目包括大數據、深度學習、網站、小程序、安卓、算法。平常會做一些項目定制化開發、代碼講解、答辯教學、文檔編寫、也懂一些降重方面的技巧。感謝大家的…

從全棧工程師視角解析Java與前端技術在電商場景中的應用

從全棧工程師視角解析Java與前端技術在電商場景中的應用 面試背景介紹 面試官&#xff1a;你好&#xff0c;很高興見到你。我叫李明&#xff0c;是這家電商平臺的資深架構師。今天我們會聊聊你的技術能力和項目經驗。你可以先簡單介紹一下自己嗎&#xff1f; 應聘者&#xff1a…

【python】python進階——多線程

引言在現代軟件開發中&#xff0c;程序的執行效率至關重要。無論是處理大量數據、響應用戶交互&#xff0c;還是與外部系統通信&#xff0c;常常需要讓程序同時執行多個任務。Python作為一門功能強大且易于學習的編程語言&#xff0c;提供了多種并發編程方式&#xff0c;其中多…

【JavaEE】(23) 綜合練習--博客系統

一、功能描述 用戶登錄后&#xff0c;可查看所有人的博客。點擊 “查看全文” 可查看該博客完整內容。如果該博客作者是登錄用戶&#xff0c;可以編輯或刪除博客。發表博客的頁面同編輯頁面。 本練習的博客網站&#xff0c;并沒有添加注冊功能&#xff0c;以及上傳作者頭像功能…

MySQL全庫檢索關鍵詞 - idea 工具 Full-Text Search分享

我們經常要在庫中查找一個數據&#xff0c;又不知道在哪個表、哪個字段&#xff1b;或者想找到哪里有在用這個數據。我們可以用&#xff1a;idea 的 Database工具 - Full-Text Search打開idea&#xff0c;在工具欄找到 Database 然后新建自己的連接&#xff0c;然后右鍵&#x…

銀行卡號識別案例

代碼實現&#xff1a;import cv2 import numpy as np import argparse import myutils-i moban.png -t card1.pngap argparse.ArgumentParser() ap.add_argument("-i","--image", requiredTrue,help"path to input image") ap.add_argument(&quo…

云管平臺上線只是開始:從“建好”到“用好”的運營、推廣與深化指南

項目上線的喜悅轉瞬即逝,隨之而來的是一個更為現實和復雜的階段:運營。云管平臺(CMP)的成功,不再僅僅取決于其技術架構的先進性,更在于它能否融入組織的肌理,為不同角色持續創造價值。本文將從管理者、平臺團隊、開發者、運維和財務五個核心角色的視角,深入探討平臺上線…

distributed.client.Client 用戶可調用函數分析

distributed.client.Client 用戶可調用函數分析 1. 核心計算函數 任務提交和執行submit(func, *args, keyNone, workersNone, resourcesNone, retriesNone, priority0, fifo_timeout60s, allow_other_workersFalse, actorFalse, actorsFalse, pureNone, **kwargs) 提交單個函數…

數字圖像處理——信用卡識別

在數字支付時代&#xff0c;信用卡處理自動化技術日益重要。本文介紹如何利用Python和OpenCV實現信用卡數字的自動識別&#xff0c;結合圖像處理與模式識別技術&#xff0c;具有顯著實用價值。系統概述與工作原理信用卡數字識別系統包含兩大核心模塊&#xff1a;模板數字預處理…

嵌入式ARM64 基于RK3588原生SDK添加用戶配置選項./build lunch debian

1 背景 在我們正常拿到SDK后會有一些配置選項&#xff0c;在使用./build.sh lunch之后會輸出一些defautconfig讓我們選擇&#xff0c;瑞芯微的原廠sdk會提供一些主板的配置選項&#xff0c;但是我們的如果是一塊新的主板就需要添加自己的配置選項&#xff0c;本文就討論如何來添…

專為石油和天然氣檢測而開發的基于無人機的OGI相機

專為石油和天然氣檢測而開發的基于無人機的OGI相機基于無人機的 OGI 相機:&#xff08;Optical Gas Imaging&#xff0c;光學氣體成像&#xff09;其實是近幾年油氣、電力、化工等行業里非常熱門的應用方向。什么是 OGI 相機OGI&#xff08;Optical Gas Imaging&#xff09;&am…

iPhone17全系優缺點分析,加持遠程控制讓你的手機更好用!

知名數碼廠商蘋果&#xff0c;不久前已官宣將于北京時間9月10日凌晨1點開啟發布會&#xff0c;主打對于iPhone 17系列產品介紹&#xff0c;并且和以往不同的是&#xff0c;今年會在購物平臺上開啟線上直播&#xff0c;還是很有新意的。9.13全平臺渠道將開啟預售模式&#xff0c…

人工智能-python-深度學習-神經網絡VGG(詳解)

LeNet 系列之后 —— VGG&#xff08;詳解&#xff09;&#xff1a;從原理到 PyTorch 實現 文章目錄LeNet 系列之后 —— **VGG&#xff08;詳解&#xff09;**&#xff1a;從原理到 PyTorch 實現1. VGG 的發展歷史與意義&#xff08;一句話&#xff0b;背景&#xff09;2. VGG…