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 updatepara 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.
- Asegúrate de haber preparado tu entorno y de haber activado una instantánea de tu carga de trabajo. Para obtener más información, consulta lo siguiente:
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:
Borra el Pod:
kubectl delete -f POD_NAME.yamlReemplaza
POD_NAMEpor el nombre de tu Pod, por ejemplo,my-app.Vuelve a aplicar el Pod:
kubectl apply -f POD_NAME.yamlVisualiza los registros para confirmar el restablecimiento de la instantánea:
kubectl logs my-app --namespace NAMESPACEEl resultado depende de cómo hayas configurado tu aplicación. En la aplicación de ejemplo en Python, los registros muestran
GKE Pod Snapshot: restorecuando 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 comandokubectl 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.