【K8S學習之生命周期鉤子】詳細了解 postStart 和 preStop 生命周期鉤子

0. 參考

  • Kubernetes容器生命周期 —— 鉤子函數詳解(postStart、preStop) - 人艱不拆_zmc - 博客園
  • 詳解Kubernetes Pod優雅退出 - 人艱不拆_zmc - 博客園

1. Kubernetes 生命周期鉤子概述

在 Kubernetes 中,生命周期鉤子(Lifecycle Hooks) 是容器啟動和終止時執行的自定義操作。它們允許你在容器的生命周期中插入“定制邏輯”,比如初始化、資源清理、通知外部系統等。

Kubernetes 為每個容器提供兩個主要的生命周期鉤子(hooks):

生命周期鉤子觸發時機作用示例
postStart容器啟動完成后立即日志初始化、加載緩存、通知系統
preStop容器被終止前優雅下線、關閉連接、清理資源等

2. 使用示例

lifecycle:postStart:exec:command: ["/bin/sh", "-c", "echo Container started at $(date) >> /var/log/start.log"]preStop:exec:command: ["/bin/sh", "-c", "echo Shutting down >> /var/log/shutdown.log && sleep 10"]

3. 生命周期流程圖(簡化)

Pod 創建└──> 容器啟動└──> postStart Hook└──> 運行主進程...└──> SIGTERM (優雅終止)└──> preStop Hook└──> 容器停止

4. 應用場景舉例

Hook 類型應用場景
postStart- 通知注冊中心上線 - 初始化緩存 - 自定義日志記錄
preStop- 通知下游服務斷開連接 - 等待請求處理完畢 - 注銷注冊中心

5. 注意事項

  • 兩個鉤子都 運行在容器內,使用 exec
  • postStart阻塞容器運行(直到命令完成);若失敗會導致容器崩潰。
  • preStop 默認最多等待 30 秒(由 terminationGracePeriodSeconds 控制)。
  • 不能保證 preStop 一定成功執行(例如容器被 kill -9)

6. 總結理解

生命周期鉤子 = 容器級別的定制啟動/退出腳本,用于插入優雅上線、下線、清理、注冊、通知等邏輯,是構建高可用服務的重要工具之一。

7. 示例1

? 目標場景

當容器被終止時,執行以下步驟:

  1. 通知外部系統(通過 curl 發出“下線”請求)
  2. 等待 5 秒,讓請求完成
  3. 再由 Kubernetes 終止容器

🧩 示例:使用 preStop 實現優雅下線

apiVersion: apps/v1
kind: Deployment
metadata:name: graceful-shutdown-demo
spec:replicas: 1selector:matchLabels:app: graceful-demotemplate:metadata:labels:app: graceful-demospec:terminationGracePeriodSeconds: 10  # 容器 SIGTERM 后有最多 10 秒來執行 preStopcontainers:- name: appimage: busyboxcommand: ["/bin/sh", "-c", "while true; do echo 'Running...'; sleep 5; done"]lifecycle:preStop:exec:command:- /bin/sh- -c- |echo "[preStop] Notifying external system..."curl -X POST http://example.com/deregister -d 'pod=graceful-demo'echo "[preStop] Waiting for in-flight requests to complete..."sleep 5

🔍 關鍵點說明

字段/參數含義
preStop.exec.command容器內執行 shell 腳本,通知外部系統并等待
terminationGracePeriodSeconds容器被終止前最大等待時間(默認 30 秒)
curl -X POST模擬通知外部系統(如服務注冊中心)
sleep 5給上游時間處理關閉流程,確保不中斷服務

8. 示例2

? 示例:包含 postStartpreStop 的容器

yaml復制編輯
apiVersion: v1
kind: Pod
metadata:name: lifecycle-demo
spec:terminationGracePeriodSeconds: 15  # 為 preStop 提供充足時間containers:- name: demo-containerimage: busyboxcommand: ["/bin/sh", "-c", "echo 'App running...'; sleep 3600"]lifecycle:postStart:exec:command:- /bin/sh- -c- |echo "[postStart] Initializing container..." >> /tmp/startup.logdate >> /tmp/startup.logpreStop:exec:command:- /bin/sh- -c- |echo "[preStop] Cleaning up before shutdown..." >> /tmp/shutdown.logsleep 5  # 模擬等待資源釋放或通知外部系統

🧠 解釋每一部分

🔹 postStart
  • 觸發時機:容器啟動完成后立即執行
  • 作用
    • 可做初始化動作,如寫日志、預熱緩存、啟動守護進程等
  • 示例邏輯
    • /tmp/startup.log 記錄“啟動”信息和時間戳
🔹 preStop
  • 觸發時機:容器收到終止信號(如刪除 Pod 或更新鏡像)前執行
  • 作用
    • 用于優雅下線,如關閉連接、注銷注冊、等待請求處理完畢等
  • 示例邏輯
    • 寫一條“即將關閉”的日志
    • sleep 5 模擬清理或等待請求完成
?? terminationGracePeriodSeconds
  • 告訴 Kubelet:給容器最多 15s 時間完成 preStop
  • preStop 沒完成,時間一到仍會強制終止容器

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

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

相關文章

測試文章標題01

模型上下文協議(Model Context Protocol, MCP)深度解析 一、MCP的核心概念 模型上下文協議(Model Context Protocol, MCP)是一種用于規范機器學習模型與外部環境交互的標準化框架。其核心目標是通過定義統一的接口和數據格式&am…

kubuntu系統詳解

Kubuntu 系統深度解析(從系統架構到用戶體驗) 一、定位與核心特性 Kubuntu 是 Ubuntu 的官方 KDE 衍生版,基于 Ubuntu 的穩定底層(Debian 技術棧),搭載 KDE Plasma 桌面環境,主打 “功能豐富、…

cURL:通過URL傳輸數據的命令行工具庫介紹

文章目錄 1. 什么是 curl?2. 下載與安裝 curl3. curl 的常見用法3.1 獲取網頁內容3.2 下載文件3.3 發送 POST 請求(帶表單數據)3.4 發送帶 JSON 的 POST 請求 1. 什么是 curl? cURL(CommandLine URL)是非常…

從零搭建AI工作站:Gemma3大模型本地部署+WebUI配置全套方案

文章目錄 前言1. 安裝Ollama2.Gemma3模型安裝與運行3. 安裝Open WebUI圖形化界面3.1 Open WebUI安裝運行3.2 添加模型3.3 多模態測試 4. 安裝內網穿透工具5. 配置固定公網地址總結 前言 如今各家的AI大模型廝殺得如火如荼,每天都有新的突破。今天我要給大家安利一款…

Element Plus對話框(ElDialog)全面指南:打造靈活彈窗交互

📌 開篇導語 對話框是Web應用中實現用戶交互的核心組件之一,常用于信息確認、表單提交或詳情展示。Element Plus的ElDialog組件以高擴展性和優雅動效著稱,支持高度定制化開發。本文將從基礎配置到進階技巧,手把手教你掌握對話框組…

解決WSL、Ubuntu的.ico圖標不正確顯示縮略圖

解決WSL、Ubuntu的.ico圖標不正確顯示縮略圖 問題描述 Win10系統中由于更新了某些軟件,篡改了默認的圖像顯示軟件,導致WSL等軟件未能成功顯示圖標,表現如下: 解決方法 將ico文件的默認打開方式更改為“畫圖”,如下…

[數據結構高階]并查集初識、手撕、可以解決哪類問題?

標題:[數據結構高階]并查集初識、手撕、可以解決哪類問題? 水墨不寫bug 文章目錄 一、認識并查集二、模擬實現并查集三、用并查集解決問題1、[省份的數量](https://leetcode.cn/problems/number-of-provinces/)2、[等式方程的可滿足性](https://leetcode…

如何快速入門大模型?

學習大模型的流程是什么 ? 提示詞工程:只需掌握提問技巧即可使用大模型,通過優化提問方式獲得更精準的模型輸出套殼應用開發:在大模型生態上開發業務層產品(如AI主播、AI小助手等),只需調用API…

《AI大模型應知應會100篇》第59篇:Flowise:無代碼搭建大模型應用

第59篇:Flowise:無代碼搭建大模型應用 摘要:本文將詳細探討 Flowise 無代碼平臺的核心特性、使用方法和最佳實踐,提供從安裝到部署的全流程指南,幫助開發者和非技術用戶快速構建復雜的大模型應用。文章結合實戰案例與配…

python打卡day23@浙大疏錦行

知識回顧: 1. 轉化器和估計器的概念 2. 管道工程 3. ColumnTransformer和Pipeline類 作業: 整理下全部邏輯的先后順序,看看能不能制作出適合所有機器學習的通用pipeline 一、導入數據庫 import pandas as pd import numpy as np import matplo…

Vue.js框架的優缺點

別再讓才華被埋沒,別再讓github 項目蒙塵!github star 請點擊 GitHub 在線專業服務直通車GitHub賦能精靈 - 艾米莉,立即加入這場席卷全球開發者的星光革命!若你有快速提升github Star github 加星數的需求,訪問taimili…

交易流水表的分庫分表設計

交易流水表的分庫分表設計需要結合業務特點、數據增長趨勢和查詢模式,以下是常見的分庫分表策略及實施建議: 一、分庫分表核心目標 解決性能瓶頸:應對高并發寫入和查詢壓力。數據均衡分布:避免單庫/單表數據傾斜。簡化運維&#…

操作系統學習筆記第3章 (竟成)

第 3 章 內存管理 【考綱內容】 1.內存管理基礎: 1.內存管理的基本概念:邏輯地址空間與物理地址空間;地址變換;內存共享;內存保護;內存分配與回收; 2.連續分配管理方式; 3.頁式管理&…

中科院無人機導航物流配送的智能變革!LogisticsVLN:基于無人機視覺語言導航的低空終端配送系統

作者:Xinyuan Zhang, Yonglin Tian, Fei Lin, Yue Liu, Jing Ma, Kornlia Sra Szatmry, Fei-Yue Wang 單位:中國科學院大學人工智能學院,中科院自動化研究所多模態人工智能系統國家重點實驗室,澳門科技大學創新工程學院工程科學系…

1.10-數據傳輸格式

1.10-數據傳輸格式 在對網站進行滲透測試時,使用目標服務器規定的數據傳輸格式來進行 payload 測試非常關鍵 如果不按規定格式發送數據,服務器可能直接拒絕請求或返回錯誤響應,比如: 接口要求 JSON 格式,而你用的是…

dfs 第一次加訓 詳解 下

目錄 P1706 全排列問題 思路 B3618 尋找團伙 思路 B3621 枚舉元組 思路 B3622 枚舉子集(遞歸實現指數型枚舉) 思路 B3623 枚舉排列(遞歸實現排列型枚舉) B3625 迷宮尋路 思路 P6183 [USACO10MAR] The Rock Game S 總結…

通信網絡編程——JAVA

1.計算機網絡 IP 定義與作用 :IP 地址是在網絡中用于標識設備的數字標簽,它允許網絡中的設備之間相互定位和通信。每一個設備在特定網絡環境下都有一個唯一的 IP 地址,以此來確定其在網絡中的位置。 分類 :常見的 IP 地址分為 I…

#在 CentOS 7 中手動編譯安裝軟件操作及原理

在 CentOS 7 中,手動編譯安裝軟件(即從源代碼編譯安裝)是一種高度靈活的方式,適用于需要定制化軟件功能、優化性能或安裝官方倉庫未提供的軟件版本的場景。以下是針對手動編譯安裝的詳細說明,包括原理、步驟、注意事項…

菊廠0510面試手撕題目解答

題目 輸入一個整數數組,返回該數組中最小差出現的次數。 示例1:輸入:[1,3,7,5,9,12],輸出:4,最小差為2,共出現4次; 示例2:輸入:[90,98,90,90,1,1]&#xf…

C——五子棋小游戲

前言 五子棋,又稱連珠棋,是一種雙人對弈的棋類游戲。游戲目標是在一個棋盤上,通過在橫、豎、斜線上依次放置棋子,使自己的五個棋子連成一線,即橫線、豎線或斜線,且無被對手堵住的空位,從而獲勝…