Ripristina un workload da uno snapshot del pod

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.

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:

  1. Elimina il pod:

    kubectl delete -f POD_NAME.yaml
    

    Sostituisci POD_NAME con il nome del tuo pod, ad esempio my-app.

  2. Applica di nuovo il pod:

    kubectl apply -f POD_NAME.yaml
    
  3. Visualizza i log per confermare il ripristino dello snapshot:

    kubectl logs my-app --namespace NAMESPACE
    

    L'output dipende dalla configurazione dell'applicazione. Nell'applicazione Python di esempio, i log mostrano GKE Pod Snapshot: restore quando 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 comando kubectl 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.