k8s pod重啟順序說明

在 Kubernetes 中,Pod 的重啟順序由?控制器類型?和?Pod 管理策略?共同決定。以下是不同場景下的詳細規則和底層邏輯:

一、Pod 重啟的觸發場景

場景類型觸發原因控制方
容器崩潰重啟容器進程退出(如異常、OOM)kubelet(節點)
節點故障重啟節點宕機或不可達控制器
手動刪除重啟kubectl delete pod控制器
滾動更新重啟鏡像/配置更新、kubectl rollout控制器
資源驅逐重啟節點資源不足(如內存、磁盤)kubelet

二、不同控制器的 Pod 重啟順序規則

1.?裸 Pod(無控制器管理)

無重啟邏輯:直接刪除后不會自動重建

特殊場景

  • 如果配置了?restartPolicy: Always,kubelet 會原地重啟容器(非 Pod 級別重啟,而是container級別重啟)

2.?Deployment

默認行為

strategy:type: RollingUpdaterollingUpdate:maxUnavailable: 25%maxSurge: 25%

滾動更新順序

  • 新 Pod 啟動:并行創建新版本 Pod(數量由?maxSurge?控制)

  • 舊 Pod 終止:隨機選擇刪除舊 Pod

  • 關鍵特征:無強順序保證,注重可用性

  • 故障恢復順序:完全并行創建,無順序約束

3.?StatefulSet

參考:StatefulSet 基礎 | Kubernetes (K8s) 中文

默認策略?(podManagementPolicy: OrderedReady):

  • 創建順序:web-0 → web-1 → web-2
  • 刪除順序:web-2 → web-1 → web-0
  • 故障恢復:嚴格按索引順序重建

并行模式?(podManagementPolicy: Parallel):

  • 所有 Pod 并行操作

  • 示例:同時刪除 web-0、web-1、web-2

4.?DaemonSet

重啟邏輯

  • 每個節點始終運行 1 個 Pod

  • 節點故障時:當節點恢復后,原地重啟 Pod

  • 滾動更新:默認隨機順序,可通過?updateStrategy?配置

5.?Job/CronJob

重啟策略

  • restartPolicy: Never/OnFailure

  • Pod 完全終止后才會創建新實例

  • 嚴格串行:前一個 Pod 成功結束后才會啟動下一個(completions: N?時)

三、底層機制解析

1. 控制器協調循環
// 偽代碼示例:Deployment 控制器邏輯
for {currentPods := listPods(deploymentLabel)desiredPods := calculateDesiredReplicas()// 計算需要創建/刪除的 Poddiff := desiredPods - len(currentPods)if diff > 0 {createPodsParallel(diff) // 并行創建} else if diff < 0 {deletePodsRandomly(-diff) // 隨機刪除}
}
2. 關鍵 API 字段控制
apiVersion: apps/v1
kind: StatefulSet
spec:updateStrategy:type: RollingUpdaterollingUpdate:partition: 2 # 僅更新索引 ≥2 的 Pod(web-2, web-3...)podManagementPolicy: OrderedReady # 或 Parallel

四、實戰驗證方法

1. 觀察滾動更新過程
# 終端1:實時監控 Pod
kubectl get pods -l app=nginx -w# 終端2:觸發更新
kubectl set image deployment/nginx nginx=nginx:1.25
2. 模擬節點故障
# 隨機選擇一個節點
node=$(kubectl get nodes -o jsonpath='{.items[?(@.status.conditions[?(@.type=="Ready")].status=="True")].metadata.name}' | tr ' ' '\n' | shuf -n 1)# 封鎖節點
kubectl cordon $node# 刪除該節點上的 Pod
kubectl delete pods --field-selector spec.nodeName=$node

五、最佳實踐建議

有狀態服務

  • 使用 StatefulSet +?OrderedReady?策略

  • 配合?ReadinessProbe?確保順序依賴

readinessProbe:exec:command: ["/bin/sh", "-c", "check_dependency web-$(hostname | cut -d'-' -f2)"]

無狀態服務

affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues: [nginx]topologyKey: kubernetes.io/hostname
  • 使用 Deployment +?MaxSurge=30%?加速恢復

  • 配置反親和性避免集中重啟

關鍵監控指標

# Pod 重啟次數
kube_pod_container_status_restarts_total{namespace="production"}# 滾動更新進度
kube_deployment_status_replicas_updated{deployment="nginx"}

六、特殊場景處理

場景:需要自定義重啟順序

解決方案

  1. 使用 Operator 自定義控制器邏輯

  2. 通過 Finalizers 控制刪除順序

    // 在控制器中設置刪除順序
    func (c *Controller) handlePodDeletion(pod *v1.Pod) {if pod.DeletionTimestamp == nil {return}// 檢查前置 Pod 是否已刪除if !isPredecessorDeleted(pod) {c.requeuePod(pod) // 重新入隊等待}
    }
場景:需要零停機重啟

解決方案

# Deployment 配置
strategy:rollingUpdate:maxSurge: 100%  # 先啟動所有新 PodmaxUnavailable: 0%

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

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

相關文章

Modbus RTU與TCP通信示例

準備工作 安裝 libmodbus 庫 Linux (Debian/Ubuntu): sudo apt-get install libmodbus-dev Windows: 下載預編譯庫 libmodbus for Windows&#xff0c;并配置開發環境。 示例 1.Modbus RTU (串行通信) #include <stdio.h> #include <modbus/modbus.h> ? int…

maven項目添加第三方JAR包

項目開發過程中&#xff0c;不可避免的需要用到一些maven庫&#xff08;公共庫、司庫等&#xff09;中沒有的冷門jar包依賴&#xff0c;這時&#xff0c;可以將這些第三方JAR包安裝到本地maven倉庫中&#xff0c;實現項目依賴的一致性。具體步驟如下&#xff1a; 1、下載jar包 …

Sentinel實戰(三)、流控規則之流控效果及流控小結

spring cloud Alibaba-Sentinel實戰&#xff08;三&#xff09;、流控效果流控小結 一、流控規則&#xff1a;流控效果一&#xff09;、流控效果&#xff1a;預熱1、概念含義2、案例流控規則設置測試結果 二&#xff09;、流控效果&#xff1a;排隊等待1、概念含義2、案例流控規…

c++ (通用引用)和(左值引用)區別

問&#xff1a; for (auto &&ipKF : vpKFs) {} 使用 一個& 和 兩個&& 區別和聯系&#xff1f; c 在 C 中&#xff0c;auto&& 和 auto& 在范圍基于的 for 循環中有重要的區別&#xff0c;涉及到引用類型和值類別的處理。讓我們詳細解釋它們的區…

使用高德api實現天氣查詢

創建應用獲取 Key 天氣查詢-基礎 API 文檔-開發指南-Web服務 API | 高德地圖API 代碼編寫 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

XEOS 與 AutoMQ 推出聯合方案,共筑云原生 Kafka 新生態

近日&#xff0c;XSKY 星辰天合旗下企業級對象存儲產品 XEOS 與 AutoMQ 云原生消息隊列系統完成了產品兼容性適配互認證&#xff0c;致力于為客戶在私有云和混合云環境中提供云原生的 Kafka 解決方案。 在云計算和大數據時代&#xff0c;消息隊列作為分布式系統的重要組成部分…

Synology NAS 部署WPS-Office

記錄在群暉NAS上部署WPS-Office實現網頁上編輯文檔 目錄 1.思考及想法由來2.問題解決2.1 群暉NAS Docker使用2.2 部署wps-office參考1:【Docker+WPS Office】遠程辦公:Docker + WPS Office 私人云辦公室2.3 群暉NAS映射文件夾權限參考1:參考2:群暉NAS中普通用戶獲取Docker容…

Vue自定義指令最佳實踐教程

Vue 3 顯著增強了自定義指令的功能&#xff0c;使其封裝更加靈活和易用。本文將分為基礎和進階兩部分&#xff0c;介紹如何實現常用的自定義指令&#xff0c;并提供最佳的項目組織方式。 前言 本文以復制文本的自定義指令詳細介紹自定義指令的基礎知識 多個自定義指令如何進行…

用DrissionPage升級維基百科爬蟲:更簡潔高效的數據抓取方案

一、原方案痛點分析 原代碼使用urllibBeautifulSoup組合存在以下問題&#xff1a; 動態內容缺失&#xff1a;無法獲取JavaScript渲染后的頁面內容 反爬能力弱&#xff1a;基礎請求頭易被識別為爬蟲 代碼冗余&#xff1a;需要單獨處理SSL證書驗證 擴展性差&#xff1a;難以應…

23種設計模式-結構型模式-代理

文章目錄 簡介問題解決方案代碼核心設計要點 總結 簡介 代理是一種結構型設計模式&#xff0c;讓你能夠提供對象的替代品或其占位符。代理控制著對于原對象的訪問&#xff0c;并允許在把請求提交給對象前后進行一些處理。 問題 為什么要控制對于某個對象的訪問呢&#xff1f…

基于Transformer框架實現微調后Qwen/DeepSeek模型的非流式批量推理

在基于LLamaFactory微調完具備思維鏈的DeepSeek模型之后(詳見《深入探究LLamaFactory推理DeepSeek蒸餾模型時無法展示<think>思考過程的問題》),接下來就需要針對微調好的模型或者是原始模型(注意需要有一個本地的模型文件,全量微調就是saves下面的文件夾,如果是LoRA,…

基于OpenCV的指紋驗證:從原理到實戰的深度解析

指紋識別的技術革命與OpenCV的輕量級方案 在生物特征識別領域&#xff0c;指紋識別始終以獨特性和穩定性占據核心地位。隨著OpenCV等開源視覺庫的普及&#xff0c;這項看似"高大上"的技術正逐步走向民用化開發。本文將突破傳統算法框架&#xff0c;提出一套基于OpenC…

十五屆藍橋杯省賽Java B組(持續更新..)

目錄 十五屆藍橋杯省賽Java B組第一題&#xff1a;報數第二題&#xff1a;類斐波那契數第三題&#xff1a;分布式隊列第四題&#xff1a;食堂第五題&#xff1a;最優分組第六題&#xff1a;星際旅行第七題&#xff1a;LITS游戲第八題&#xff1a;拼十字 十五屆藍橋杯省賽Java B…

多模態學習(八):2022 TPAMI——U2Fusion: A Unified Unsupervised Image Fusion Network

論文鏈接&#xff1a;https://ieeexplore.ieee.org/stamp/stamp.jsp?tp&arnumber9151265 目錄 一.摘要 1.1 摘要翻譯 1.2 摘要解析 二.Introduction 2.1 Introduciton翻譯 2.2 Introduction 解析 三. related work 3.1 related work翻譯 3.2 relate work解析 四…

電腦屏幕亮度隨心控,在Windows上自由調整屏幕亮度的方法

調整電腦屏幕的亮度對于保護視力和適應不同環境光線條件非常重要。無論是在白天強光下還是夜晚昏暗環境中&#xff0c;合適的屏幕亮度都能讓您的眼睛更加舒適。本文中簡鹿辦公小編將向您介紹幾種在 Windows 系統中調整屏幕亮度的方法。 方法一&#xff1a;使用快捷鍵 大多數筆…

AF3 OpenFoldDataset類looped_samples方法解讀

AlphaFold3 data_modules 模塊的 OpenFoldDataset 類的 looped_samples 方法用于 循環采樣數據,確保數據能被不斷地提供,適用于 PyTorch 的 DataLoader 在訓練過程中迭代讀取數據。dataset_idx 指定了當前要處理的數據集(即 self.datasets[dataset_idx]) 源代碼: def loo…

lua表table和JSON字符串互轉

--print("local ssxc{\n"..string.gsub(str,":","").."\n}") Utils {} ---------------------------------------------------------------------------------- -- Lua-Table 與 string 轉換 local function value2string(value, isA…

請談談分治算法,如何應用分治算法解決大規模問題?

分治算法實戰解析與前端應用指南 分治算法本質剖析 分治算法的核心在于"分而治之"&#xff0c;其工作流程可分解為三個關鍵階段&#xff1a; 分解階段&#xff08;Divide&#xff09;&#xff1a;將復雜問題拆分為若干個相互獨立的子問題攻克階段&#xff08;Conqu…

基于BusyBox構建ISO鏡像

1. 準備 CentOS 7.9 3.10.0-957.el7.x86_64VMware Workstation 建議&#xff1a;系統內核<3.10.0 使用busybox < 1.33.2版本 2. 安裝busybox # 安裝依賴 yum install syslinux xorriso kernel-devel kernel-headers glibc-static ncurses-devel -y# 下載 wget https://…

Node.js 與 MySQL:深入理解與高效實踐

Node.js 與 MySQL:深入理解與高效實踐 引言 隨著互聯網技術的飛速發展,Node.js 作為一種高性能的服務端JavaScript運行環境,因其輕量級、單線程和事件驅動等特點,受到了廣大開發者的青睞。MySQL 作為一款開源的關系型數據庫管理系統,以其穩定性和可靠性著稱。本文將深入…