Scopri come ripristinare un workload da uno snapshot di pod salvato, gestire gli snapshot esistenti e disattivare gli snapshot di pod di Google Kubernetes Engine (GKE).
Prima di iniziare
Prima di iniziare, assicurati di aver eseguito le seguenti operazioni:
- Abilita l'API Google Kubernetes Engine. Abilita l'API Google Kubernetes Engine
- Per utilizzare Google Cloud CLI per questa attività,
installala e poi
inizializza
gcloud CLI. Se hai già installato gcloud CLI, scarica l'ultima
versione eseguendo il comando
gcloud components update. Le versioni precedenti di gcloud CLI potrebbero non supportare l'esecuzione dei comandi in questo documento.
- Assicurati di aver preparato l'ambiente e attivato uno snapshot del tuo carico di lavoro. Per ulteriori informazioni, consulta:
Gestire gli snapshot
Quando crei uno snapshot del pod, viene creata una risorsa personalizzata PodSnapshot per
memorizzare lo stato del pod in quel momento. Il campo status di questa risorsa indica
se l'operazione di snapshot è andata a buon fine e se lo snapshot è disponibile per i ripristini.
Per visualizzare tutte le risorse PodSnapshot in uno spazio dei nomi, esegui questo comando:
kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE
L'output è simile al seguente:
NAME STATUS POLICY AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4 AllSnapshotsAvailable example-policy 47h
Ripristina un workload da uno snapshot
Per ripristinare il workload dall'ultimo snapshot, puoi eliminare il pod esistente dopo l'acquisizione di uno snapshot e poi eseguire nuovamente il deployment del pod. In alternativa, puoi eseguire il deployment di un nuovo pod con una specifica identica. GKE ripristina automaticamente il pod dallo snapshot corrispondente.
I seguenti passaggi mostrano come viene ripristinato un pod da uno snapshot corrispondente eliminando e ridistribuendo il pod:
Elimina il pod:
kubectl delete -f POD_NAME.yamlSostituisci
POD_NAMEcon il nome del tuo pod, ad esempiomy-app.Applica di nuovo il pod:
kubectl apply -f POD_NAME.yamlVisualizza i log per confermare il ripristino dello snapshot:
kubectl logs my-app --namespace NAMESPACEL'output dipende dalla configurazione dell'applicazione. Nell'applicazione Python di esempio, i log mostrano
GKE Pod Snapshot: restorequando si verifica un'operazione di ripristino.
Esegui il ripristino da uno snapshot specifico
Per impostazione predefinita, GKE ripristina i workload dalla risorsa PodSnapshot più recente
che corrisponde al pod. Quando viene creato uno snapshot, GKE
genera automaticamente un nome univoco (UUID) per la risorsa PodSnapshot, che puoi
visualizzare eseguendo kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.
Per ripristinare un workload da una risorsa PodSnapshot precedente o specifica, aggiungi l'annotazione podsnapshot.gke.io/ps-name alla specifica del pod del workload, specificando il nome della risorsa PodSnapshot da utilizzare per il ripristino del workload:
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:
...
Sostituisci quanto segue:
POD_SNAPSHOT_NAME: il nome dello snapshot da cui vuoi eseguire il ripristino. Puoi ottenere i nomi degli snapshot eseguendo il comandokubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.NAMESPACE: lo spazio dei nomi del pod.KSA_NAME: il nome del tuo KSA.
Affinché GKE utilizzi lo snapshot specificato per il ripristino, la condizione di stato della risorsa PodSnapshot deve essere Ready ed esistere nello stesso spazio dei nomi del pod. Se PodSnapshot non è Ready o non esiste nello stesso spazio dei nomi del pod, il workload esegue un avvio a freddo anziché il ripristino da uno snapshot.
Corrispondenza e compatibilità degli snapshot
Quando GKE ripristina un pod da uno snapshot, deve determinare quale
snapshot è compatibile. La compatibilità è determinata da regole quali l'ordine di selezione, i criteri di corrispondenza (in base all'ambito whole-pod rispetto a rootfs-only) e la corrispondenza delle regole di raggruppamento.
Per un riferimento dettagliato sui requisiti di corrispondenza, sui criteri di compatibilità e sui campi delle specifiche che influenzano la compatibilità, vedi Corrispondenza e compatibilità degli snapshot dei pod.
Disattivare gli snapshot
La rimozione della CRD PodSnapshotPolicy impedisce la creazione di snapshot e il ripristino dei pod. I pod in esecuzione non sono interessati dall'eliminazione delle risorse. Tuttavia, se elimini il criterio mentre un pod viene salvato o ripristinato, il pod potrebbe entrare in uno stato di errore.
Per disattivare la creazione di snapshot e il ripristino per i nuovi pod regolati da un criterio,
elimina PodSnapshotPolicy eseguendo questo comando:
kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE
Sostituisci SNAPSHOT_POLICY con il nome del
PodSnapshotPolicy che vuoi eliminare, ad esempio example-pod-snapshot-policy.
Puoi anche eliminare una risorsa PodSnapshot specifica in modo che i pod non vengano più ripristinati da quello snapshot specifico. L'eliminazione della risorsa PodSnapshot rimuove anche i file archiviati in Cloud Storage.
Per impedire l'utilizzo di uno snapshot specifico per i ripristini futuri, elimina l'oggetto PodSnapshot eseguendo il seguente comando:
kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE
Sostituisci POD_SNAPSHOT_NAME con il nome dello snapshot che vuoi eliminare, ad esempio example-podsnapshot.
Passaggi successivi
Scopri come risolvere i problemi relativi agli snapshot dei pod.