Kubernetes 的設計具備自癒能力,有助於維護工作負載的健康狀態與可用性。它會自動取代失敗的容器、在節點不可用時重新排程工作負載,並確保維持系統的預期狀態。
容器層級重啟:如果 Pod 內的容器失敗,Kubernetes 會根據 restartPolicy 將其重啟。
副本替換:如果 Deployment 或 StatefulSet 中的 Pod 失敗,Kubernetes 會建立一個替換的 Pod,以維持指定的副本數量。如果屬於 DaemonSet 的 Pod 失敗,控制平面會建立一個替換的 Pod 以在相同節點上執行。
持久性儲存復原:如果某個節點正在執行掛載了持久性儲存卷 (PersistentVolume, PV) 的 Pod,而該節點發生故障,Kubernetes 可以將該儲存卷重新掛載到不同節點上的新 Pod。
服務 (Services) 的負載平衡:如果 Service 後端的 Pod 失敗,Kubernetes 會自動將其從該 Service 的端點 (endpoints) 中移除,以便僅將流量路由到健康的 Pod。
以下是提供 Kubernetes 自癒能力的一些關鍵元件:
kubelet:確保容器正常執行,並重啟那些失敗的容器。
Deployment (透過 ReplicaSet)、ReplicaSet、StatefulSet 和 DaemonSet 控制器:維護 Pod 副本的預期數量。
PersistentVolume 控制器:管理有狀態工作負載的儲存卷掛載與卸載。
儲存故障:如果持久性儲存卷變得不可用,可能需要採取復原步驟。
應用程式錯誤:Kubernetes 可以重啟容器,但底層應用程式的問題必須另外解決。