🎯 課程目標___HTMLTAG_1__HTMLTAG_2___透過本課,您將了解 Pod 是 Kubernetes 中最基本的單元,Pod 如何共享網路命名空間,如何使用 Sidecar 容器(GA K8s 1.33)、Init 容器、Ephemeral 容器進行調試和調試資源,以及管理資源的生命週期。
1。什麼是 Pod?
Pod 是 Kubernetes 中最小的調度單元。 Pod 由 一個或多個容器 在同一節點上運行,共享:
-
___HTMLTAG_12__HTMLTAG_13___網路命名空間:相同的 IP 位址,相同的連接埠空間 — 容器透過
localhost___HTMLTAG_16__HTMLTAG_17___ 相互通訊
___HTMLTAG_18__HTMLTAG_19___儲存磁碟區:掛載到 Pod 的磁碟區可以被許多容器存取
___HTMLTAG_22__HTMLTAG_23___Linux 命名空間(取決於設定):PID 命名空間、IPC 命名空間
為什麼不直接部署容器? Kubernetes 管理 Pod,而不是容器。 Pod 是一個抽象層,有助於將密切相關的進程分組在一起。
2。簡單 Pod 範例
___程式碼區塊_0___
___程式碼區塊_1___
3。多容器 Pod
多容器 Pod 有 3 種常見模式:
3.1 Sidecar 模式
輔助容器支援主容器(日誌轉發器、代理、OTel 收集器).
3.2 大使模式
代理容器代表主容器與外界通訊。
3.3 適配器模式
容器將主容器的輸出標準化為標準格式。
4。 Sidecar 容器 GA — K8s 1.33
在 K8s 1.33 之前,sidecar 容器被實作為常規 init 容器,導致生命週期問題:當主容器完成時,sidecar 仍在運行,作業從未完成。
___HTMLTAG_51__HTMLTAG_52___K8s 解決方案 1.33:官方 sidecar 容器是 initContainer,具有 initContainer,具有 initContainy_Always_______ML。 Kubernetes 將:
- 在主容器之前啟動 sidecar__HTMLTAG_61___
- 如果 sidecar 崩潰則重新啟動(獨立於主容器)
- 主容器結束後終止 sidecar
- Sidecar 不會阻止作業完成
___程式碼區塊_2___
Sidecar 容器的用例:Grafana Alloy 日誌代理程式、OpenTelemetry Collector、Envoy 代理程式(在服務網格中)、Vault 代理注入器。
5。初始化容器
Init 容器在主容器啟動之前執行 run-to-completion。用於:
- 在應用程式啟動之前等待資料庫準備好
- 從外部來源下載設定或機密__HTMLTAG_81___
- 設定檔案權限、資料庫遷移
___程式碼區塊_3___
6。臨時容器 — 調試 Pod
臨時容器允許將偵錯容器附加到正在執行的 Pod,而無需重新啟動 Pod。當 Pod 使用無 shell 的 distroless 映像時非常有用。
___程式碼區塊_4___
7。 Pod 生命週期
Pod 經歷以下階段:
___HTMLTAG_96__HTMLTAG_97___待處理:Pod 已創建,等待調度程序選擇節點,或拉取鏡像
___HTMLTAG_100__HTMLTAG_101___正在執行:Pod 已綁定至 Node,至少有 1 個容器正在執行
___HTMLTAG_104__HTMLTAG_105___成功:所有容器已成功結束(退出 0)
___HTMLTAG_108__HTMLTAG_109___失敗:至少 1 個容器以錯誤結束(退出非 0)
___HTMLTAG_112__HTMLTAG_113___未知:無法取得 Pod 狀態(通常是由於節點問題)
Pod 條件(來自 kubectl 描述 pod):
___HTMLTAG_122__HTMLTAG_123___PodScheduled:調度程式選擇節點
___HTMLTAG_126__HTMLTAG_127___PodReadyToStartContainers:已建立沙箱並設定網路
___HTMLTAG_130__HTMLTAG_131___已初始化:所有初始化容器已成功運作
___HTMLTAG_134__HTMLTAG_135___ContainersReady:所有容器都已準備好
___HTMLTAG_138__HTMLTAG_139___Ready:Pod 已準備好接收流量
8。資源請求與限制
___程式碼區塊_5___
___HTMLTAG_145__HTMLTAG_146___Requests 是調度程序保證的資源量。 限制 是最大上限。 CPU 超出限制會受到限制(而非被殺死),記憶體超出限制則會被 OOMKilled.
9。 QoS 類別
___HTMLTAG_154__HTMLTAG_155___保證:所有容器的請求 == 限制。最高優先級,當節點有記憶體壓力時不驅逐。
___HTMLTAG_158__HTMLTAG_159___突發:請求 <限制。限制。當節點缺乏記憶體時可以被驅逐。
___HTMLTAG_162__HTMLTAG_163___BestEffort:無請求/限制。當節點缺乏資源時先驅逐。
10。探針 — 運轉狀況檢查
___程式碼區塊_6___
___HTMLTAG_170__HTMLTAG_171___livenessProbe:Pod 失敗將重新啟動
___HTMLTAG_174__HTMLTAG_175___readinessProbe:如果 Pod 失敗(未接收流量),則會從服務端點中刪除
___HTMLTAG_178__HTMLTAG_179___startupProbe:用於啟動緩慢的應用程序,在等待時關閉活性/就緒探針
11。靜態 Pod
靜態 Pod 是由 kubelet 直接從 /etc/kubernetes/manifests/ 中的 YAML 檔案建立的,無需透過 API 伺服器。 Kubernetes 控制平面元件(kube-apiserver、etcd、調度程式、控制器管理器)在主節點上以靜態 Pod 運作。
摘要
- Pod = 共享網路和儲存的容器群組
- Sidecar 容器(K8s 1.33 GA):
initContainer 和 restartPolicy:AlwaysHTMLTAG_199___
- 初始化容器:在主容器之前執行至完成
- 臨時容器:無需重新啟動即可偵錯 Pod__HTMLTAG_203___
- 始終為生產工作負載設定資源請求/限制__HTMLTAG_205___
- 使用readinessProbe控制流量,livenessProbe自動重啟