Pod 不會自己重啟,自我修復來自控制器
Kubernetes 的「自我修復」不是 Pod 的性質。Pod 是用完即丟的執行環境:它沒有生命週期保障,掛了就是掛了,不會自己回來。
會把它救回來的是控制器:Job 負責一次性任務跑到 Completed,Deployment 負責長駐服務維持指定的副本數。控制器的工作方式是比對期望狀態與實際狀態,然後補上差額——它不修復壞掉的那個 Pod,而是再開一個新的。
為什麼這件事會影響設計
- 不要把狀態留在 Pod 裡。重啟等於換一個新個體,本機磁碟、記憶體內的進度都不會跟過來——同一條原則在容器層也成立:容器可拋棄,資料要靠 Volume 留在容器外
- 任務要能被重跑。Job 的補償手段就是重新建立 Pod,所以工作本身最好是冪等的;不冪等的任務被重跑一次就會出現重複扣款、重複寄信這類後果。
- 「誰保證它完成」要明確指定。直接開一個裸 Pod 跑重要工作,等於沒有人負責它失敗的情況 → Pod、Job、Workflow 是三層:執行載體、任務保證、流程調度