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