Restablece una carga de trabajo a partir de una instantánea de Pod

Aprende a restablecer una carga de trabajo a partir de una instantánea de Pod guardada, administrar tus instantáneas existentes y habilitar las instantáneas de Pod de Google Kubernetes Engine (GKE).

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste la gcloud CLI, ejecuta el comando gcloud components update para obtener la versión más reciente. Es posible que las versiones anteriores de gcloud CLI no admitan la ejecución de los comandos que se indican en este documento.

Administra instantáneas

Cuando creas una instantánea de Pod, se crea un recurso personalizado PodSnapshot para almacenar el estado del Pod en ese momento. El campo status de este recurso indica si la operación de instantánea se realizó correctamente y si la instantánea está disponible para restablecimientos.

Para ver todos los recursos de PodSnapshot en un espacio de nombres, ejecuta el siguiente comando:

kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE

El resultado se ve de la manera siguiente:

NAME                                   STATUS                  POLICY           AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4   AllSnapshotsAvailable   example-policy   47h

Restablece una carga de trabajo a partir de una instantánea

Para restablecer tu carga de trabajo a partir de la instantánea más reciente, puedes borrar el Pod existente después de tomar una instantánea y, luego, volver a implementar el Pod. Como alternativa, puedes implementar un Pod nuevo con una especificación idéntica. GKE restablece automáticamente el Pod a partir de la instantánea coincidente.

En los siguientes pasos, se muestra cómo se restablece un Pod a partir de una instantánea coincidente borrando y volviendo a implementar el Pod:

  1. Borra el Pod:

    kubectl delete -f POD_NAME.yaml
    

    Reemplaza POD_NAME por el nombre de tu Pod, por ejemplo, my-app.

  2. Vuelve a aplicar el Pod:

    kubectl apply -f POD_NAME.yaml
    
  3. Visualiza los registros para confirmar el restablecimiento de la instantánea:

    kubectl logs my-app --namespace NAMESPACE
    

    El resultado depende de cómo hayas configurado tu aplicación. En la aplicación de ejemplo en Python, los registros muestran GKE Pod Snapshot: restore cuando se produce una operación de restablecimiento.

Restablece a partir de una instantánea específica

De forma predeterminada, GKE restablece las cargas de trabajo desde el recurso PodSnapshot más reciente que coincide con el Pod. Cuando se toma una instantánea, GKE genera automáticamente un nombre único (UUID) para el recurso PodSnapshot, que puedes ver ejecutando kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.

Para restablecer una carga de trabajo desde un recurso PodSnapshot anterior o específico, agrega la anotación podsnapshot.gke.io/ps-name a la especificación del Pod de tu carga de trabajo y especifica el nombre del recurso PodSnapshot que se usará para restablecer la carga de trabajo:

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:
  ...

Reemplaza lo siguiente:

  • POD_SNAPSHOT_NAME: Es el nombre de la instantánea desde la que deseas restablecer. Puedes obtener los nombres de las instantáneas ejecutando el comando kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.
  • NAMESPACE: Es el espacio de nombres de tu Pod.
  • KSA_NAME: Es el nombre de tu KSA.

Para que GKE use la instantánea especificada para la restauración, la condición de estado del recurso PodSnapshot debe ser Ready y existir en el mismo espacio de nombres que el Pod. Si el PodSnapshot no es Ready o no existe en el mismo espacio de nombres que el Pod, la carga de trabajo realiza un inicio en frío en lugar de restaurar desde una instantánea.

Compatibilidad y coincidencia de instantáneas

Cuando GKE restablece un Pod a partir de una instantánea, debe determinar qué instantánea es compatible. La compatibilidad se determina según reglas como el orden de selección, los criterios de coincidencia (según el alcance de whole-pod en comparación con el de rootfs-only) y las reglas de agrupación coincidentes.

Para obtener una referencia detallada sobre los requisitos de coincidencia, los criterios de compatibilidad y los campos de especificaciones que influyen en la compatibilidad, consulta Compatibilidad y coincidencia de instantáneas de Pod.

Cómo inhabilitar las instantáneas

Quitar la CRD de PodSnapshotPolicy impide que se creen y restablezcan instantáneas de los Pods. La eliminación del recurso no afecta a los Pods en ejecución. Sin embargo, si borras la política mientras se guarda o restablece un Pod, es posible que este entre en un estado de error.

Para inhabilitar la creación de instantáneas y el restablecimiento de los Pods nuevos regidos por una política, borra el PodSnapshotPolicy ejecutando el siguiente comando:

kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE

Reemplaza SNAPSHOT_POLICY por el nombre del PodSnapshotPolicy que deseas borrar, por ejemplo, example-pod-snapshot-policy.

También puedes borrar un recurso PodSnapshot específico para que los Pods ya no se restablezcan desde esa instantánea específica. Borrar el recurso PodSnapshot también quita los archivos almacenados en Cloud Storage.

Para evitar que se use una instantánea específica para restablecimientos futuros, borra el objeto PodSnapshot ejecutando el siguiente comando:

kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE

Reemplaza POD_SNAPSHOT_NAME por el nombre de la instantánea que deseas borrar, por ejemplo, example-podsnapshot.

¿Qué sigue?

Obtén más información para solucionar problemas relacionados con las instantáneas de Pods.