Pod 本身並不能自愈(self-healing)。如果一個 Pod 所在的 Node (節點)出現故障,或者調度程序自身出現故障,Pod 將被刪除;同理,當因為節點資源不夠或節點維護而驅逐 Pod 時,Pod 也將被刪除。Kubernetes 通過引入 Controller(控制器)的概念來管理 Pod 實例。在 Kubernetes 中,更為推薦的做法是使用 Controller 來管理 Pod,而不是直接創建 Pod。
用戶應該始終使用控制器來創建 Pod,而不是直接創建 Pod,控制器可以提供如下特性:
- 水平擴展(運行 Pod 的多個副本)
- rollout(版本更新)
- self-healing(故障恢復)
例如:當一個節點出現故障,控制器可以自動地在另一個節點調度一個配置完全一樣的 Pod,以替換故障節點上的 Pod。
在 Kubernetes 中,廣泛使用的控制器有:
- Deployment
- StatefulSet
- DaemonSet
控制器通過其中配置的 Pod Template 信息來創建 Pod。
Pod Template 是關於 Pod 的定義,但是被包含在其他的 Kubernetes 對象中(例如 Deployment、StatefulSet、DaemonSet 等控制器)。控制器通過 Pod Template 信息來創建 Pod。