Pod生命周期全解析:從創建到終止,你不得不知的關鍵階段
Pod 生命周期的五大階段
1. Pending(等待中)
當 Pod 被創建時,它首先進入 Pending 階段。在此階段,調度器會為 Pod 選擇合適的節點。主要包含以下步驟:
? 資源配額檢查
? 節點篩選(預選)
? 節點優先級排序(優選)
? 綁定節點
圖片
2. Running(運行中)
一旦 Pod 被調度到某個節點并且所有容器都被成功創建,Pod 就會進入 Running 狀態。這個階段包括:
? Init Container 按序啟動
? 主容器并行啟動
? 健康檢查開始執行
值得注意: 即使 Pod 處于 Running 狀態,也不意味著應用程序正常運行。需要配合就緒探針(Readiness Probe)來確保服務真正可用。
3. Succeeded(成功)
適用于運行一次性任務的 Pod,當 Pod 中的所有容器都成功終止且不會重啟時,進入此狀態。典型應用場景:
? 批處理作業
? 數據遷移任務
? 初始化操作
4. Failed(失敗)
當 Pod 中的任何容器以非零狀態退出且重啟策略配置為 Never 時,Pod 進入 Failed 狀態。常見原因:
? 應用程序崩潰
? 配置錯誤
? 資源不足
5. Unknown(未知)
當 kubelet 無法獲取 Pod 的狀態信息時,會報告 Unknown 狀態。通常由以下原因導致:
? 網絡通信問題
? 節點故障
? kubelet 異常
高級特性與最佳實踐
1. 重啟策略
Pod 的重啟策略(RestartPolicy)決定了容器失敗時的處理方式:
? Always(默認):始終嘗試重啟
? OnFailure:僅在失敗時重啟
? Never:從不重啟
2. 生命周期鉤子
Kubernetes 提供了兩個生命周期鉤子:
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Starting"]
preStransform: translateY(
exec:
command: ["/bin/sh", "-c", "echo Stopping"]
重要提示: postStart 不保證在容器 ENTRYPOINT 之前運行,但一定在容器變成 Running 狀態之前執行完成。
3. 終止流程
Pod 終止時會經歷以下步驟:
- Pod 標記為 Terminating
- 執行 preStop 鉤子
- 發送 SIGTERM 信號
- 等待寬限期(默認 30 秒)
- 發送 SIGKILL 信號
注意事項總結
- 配置合適的探針:根據應用特點選擇合適的存活、就緒和啟動探針
- 設置合理的資源限制:避免因資源不足導致 Pod 無法調度或被驅逐
- 正確處理終止信號:應用程序要能夠優雅處理 SIGTERM 信號