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, además, inhabilitar 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
  • Para usar Google Cloud CLI en esta tarea, instala y, luego, inicializa la gcloud CLI. Si ya instalaste 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 de 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 desde la instantánea más reciente, puedes borrar el Pod existente después de tomar una instantánea y, luego, volver a implementarlo. 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 Python de ejemplo, 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 coincida con el Pod. Cuando se toma una instantánea, GKE genera de forma automática 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 más antiguo 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. Para obtener los nombres de las instantáneas, ejecuta 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 el restablecimiento, 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 restablecerse a partir de una instantánea.

Coincidencia y compatibilidad 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 rootfs-only) y la coincidencia de las reglas de agrupación.

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

Inhabilitar instantáneas

Quitar la CRD de PodSnapshotPolicy impide que se creen instantáneas y se restablezcan los Pods. Los Pods en ejecución no se ven afectados por la eliminación del recurso. Sin embargo, si borras la política mientras se guarda o restablece un Pod, este podría entrar en un estado de error.

Para inhabilitar la creación de instantáneas y el restablecimiento de Pods nuevos regidos por una política, borra el PodSnapshotPolicy con 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 en restablecimientos futuros, borra el objeto PodSnapshot con 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 de instantáneas de Pods.