瞭解如何從儲存的 Pod 快照還原工作負載、管理現有快照,以及停用 Google Kubernetes Engine (GKE) Pod 快照。
事前準備
開始之前,請務必先完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
- 請確認您已準備好環境,並觸發工作負載的快照。詳情請參閱下列文章:
管理快照
建立 Pod 快照時,系統會建立 PodSnapshot 自訂資源,用於儲存當時的 Pod 狀態。這項資源的 status 欄位會指出快照作業是否成功,以及快照是否可用於還原。
如要查看命名空間中的所有 PodSnapshot 資源,請執行下列指令:
kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE
輸出結果會與下列內容相似:
NAME STATUS POLICY AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4 AllSnapshotsAvailable example-policy 47h
從快照還原工作負載
如要從最新快照還原工作負載,請在建立快照後刪除現有 Pod,然後重新部署 Pod。或者,您也可以部署規格相同的新 Pod。GKE 會自動從相符的快照還原 Pod。
下列步驟說明如何刪除 Pod 並重新部署,從相符的快照還原 Pod:
刪除 Pod:
kubectl delete -f POD_NAME.yaml將
POD_NAME替換為 Pod 的名稱,例如my-app。重新套用 Pod:
kubectl apply -f POD_NAME.yaml查看記錄,確認快照還原作業:
kubectl logs my-app --namespace NAMESPACE輸出內容取決於應用程式的設定方式。在範例 Python 應用程式中,記錄會在還原作業發生時顯示
GKE Pod Snapshot: restore。
從特定快照還原
根據預設,GKE 會從與 Pod 相符的最新 PodSnapshot 資源還原工作負載。系統擷取快照時,GKE 會自動為 PodSnapshot 資源產生專屬名稱 (UUID),您可以執行 kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE 查看。
如要從較舊或特定的 PodSnapshot 資源還原工作負載,請在工作負載 Pod 規格中新增 podsnapshot.gke.io/ps-name 註解,並指定要用於還原工作負載的 PodSnapshot 資源名稱:
apiVersion: v1
kind: Pod
metadata:
name: my-app
namespace: NAMESPACE
labels:
app: my-app
annotations:
podsnapshot.gke.io/ps-name: "POD_SNAPSHOT_NAME"
spec:
serviceAccountName: KSA_NAME
runtimeClassName: gvisor
containers:
...
更改下列內容:
POD_SNAPSHOT_NAME:要還原的快照名稱。您可以執行kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE指令來取得快照名稱。NAMESPACE:Pod 的命名空間。KSA_NAME:KSA 名稱。
如要讓 GKE 使用指定的快照進行還原,PodSnapshot 資源狀態條件必須為 Ready,且與 Pod 位於相同命名空間。如果 PodSnapshot 不是 Ready,或不存在於與 Pod 相同的命名空間中,工作負載會執行冷啟動,而不是從快照還原。
快照比對和相容性
當 GKE 從快照還原 Pod 時,必須判斷哪個快照相容。相容性取決於選取順序、比對條件 (根據 whole-pod 與 rootfs-only 範圍) 和相符的分組規則等規則。
如要詳細瞭解比對規定、相容性條件,以及影響相容性的規格欄位,請參閱「Pod 快照比對和相容性」。
停用快照
移除 PodSnapshotPolicy CRD 後,系統就無法再為 Pod 建立快照和還原 Pod。資源刪除作業不會影響執行中的 Pod。不過,如果在儲存或還原 Pod 時刪除政策,Pod 可能會進入失敗狀態。
如要針對受政策控管的新 Pod 停用快照和還原功能,請執行下列指令刪除 PodSnapshotPolicy:
kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE
將 SNAPSHOT_POLICY 替換成要刪除的 PodSnapshotPolicy 名稱,例如 example-pod-snapshot-policy。
您也可以刪除特定 PodSnapshot 資源,這樣一來,系統就不會再從該特定快照還原 Pod。刪除 PodSnapshot 資源也會移除儲存在 Cloud Storage 中的檔案。
如要避免特定快照用於日後的還原作業,請執行下列指令,刪除 PodSnapshot 物件:
kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE
將 POD_SNAPSHOT_NAME 替換成要刪除的快照名稱,例如 example-podsnapshot。
後續步驟
瞭解如何排解 Pod 快照問題。