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 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 de este documento.
- Asegúrate de haber preparado tu entorno y 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 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:
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 Python de ejemplo, 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 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 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 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.