Découvrez comment restaurer une charge de travail à partir d'un instantané de pod enregistré, gérer vos instantanés existants et désactiver les instantanés de pod Google Kubernetes Engine (GKE).
Avant de commencer
Avant de commencer, effectuez les tâches suivantes :
- Activez l'API Google Kubernetes Engine. Activer l'API Google Kubernetes Engine
- Pour utiliser Google Cloud CLI pour cette tâche, installez puis initialisez la gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande
gcloud components update. Il est possible que les versions antérieures de la gcloud CLI ne permettent pas d'exécuter les commandes de ce document.
- Assurez-vous d'avoir préparé votre environnement et déclenché un instantané de votre charge de travail. Pour en savoir plus, consultez les ressources suivantes :
Gérer les instantanés
Lorsque vous créez un instantané de pod, une ressource personnalisée PodSnapshot est créée pour stocker l'état du pod à ce moment-là. Le champ status de cette ressource indique si l'opération d'instantané a réussi et si l'instantané est disponible pour les restaurations.
Pour afficher toutes les ressources PodSnapshot dans un espace de noms, exécutez la commande suivante :
kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE
Le résultat se présente comme suit :
NAME STATUS POLICY AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4 AllSnapshotsAvailable example-policy 47h
Restaurer une charge de travail à partir d'un instantané
Pour restaurer votre charge de travail à partir du dernier instantané, vous pouvez supprimer le pod existant après la prise d'un instantané, puis redéployer le pod. Vous pouvez également déployer un nouveau pod avec une spécification identique. GKE restaure automatiquement le pod à partir de l'instantané correspondant.
Les étapes suivantes montrent comment un pod est restauré à partir d'un instantané correspondant en supprimant et en redéployant le pod :
Supprimez le pod :
kubectl delete -f POD_NAME.yamlRemplacez
POD_NAMEpar le nom de votre pod, par exemplemy-app.Appliquez à nouveau le pod :
kubectl apply -f POD_NAME.yamlConsultez les journaux pour confirmer la restauration de l'instantané :
kubectl logs my-app --namespace NAMESPACELe résultat dépend de la façon dont vous avez configuré votre application. Dans l'exemple d'application Python, les journaux affichent
GKE Pod Snapshot: restorelorsqu'une opération de restauration a lieu.
Restaurer à partir d'un instantané spécifique
Par défaut, GKE restaure les charges de travail à partir de la ressource PodSnapshot la plus récente correspondant au pod. Lorsqu'un instantané est pris, GKE génère automatiquement un nom unique (UUID) pour la ressource PodSnapshot, que vous pouvez afficher en exécutant kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.
Pour restaurer une charge de travail à partir d'une ressource PodSnapshot plus ancienne ou spécifique, ajoutez l'annotation podsnapshot.gke.io/ps-name à la spécification de pod de votre charge de travail, en spécifiant le nom de la ressource PodSnapshot à utiliser pour la restauration de la charge de travail :
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:
...
Remplacez les éléments suivants :
POD_SNAPSHOT_NAME: nom de l'instantané à partir duquel vous souhaitez effectuer la restauration. Vous pouvez obtenir les noms des instantanés en exécutant la commandekubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE.NAMESPACE: espace de noms de votre pod.KSA_NAME: nom de votre KSA.
Pour que GKE utilise l'instantané spécifié pour la restauration, l'état de la ressource PodSnapshot doit être Ready et exister dans le même espace de noms que le pod. Si PodSnapshot n'est pas Ready ou n'existe pas dans le même espace de noms que le pod, la charge de travail effectue un démarrage à froid au lieu d'être restaurée à partir d'un instantané.
Correspondance et compatibilité des instantanés
Lorsque GKE restaure un pod à partir d'un instantané, il doit déterminer quel instantané est compatible. La compatibilité est déterminée par des règles telles que l'ordre de sélection, les critères de correspondance (basés sur le champ d'application whole-pod par rapport à rootfs-only) et les règles de regroupement correspondantes.
Pour obtenir des informations détaillées sur les exigences de correspondance, les critères de compatibilité et les champs de spécification qui influencent la compatibilité, consultez Correspondance et compatibilité des instantanés de pod.
Désactiver les instantanés
La suppression de la CRD PodSnapshotPolicy empêche la création d'instantanés et la restauration des pods. Les pods en cours d'exécution ne sont pas affectés par la suppression des ressources. Toutefois, si vous supprimez la règle pendant qu'un pod est en cours d'enregistrement ou de restauration, il est possible qu'il passe à l'état "Échec".
Pour désactiver la création d'instantanés et la restauration pour les nouveaux pods régis par une règle, supprimez PodSnapshotPolicy en exécutant la commande suivante :
kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE
Remplacez SNAPSHOT_POLICY par le nom de la PodSnapshotPolicy que vous souhaitez supprimer, par exemple example-pod-snapshot-policy.
Vous pouvez également supprimer une ressource PodSnapshot spécifique afin que les pods ne soient plus restaurés à partir de cet instantané. La suppression de la ressource PodSnapshot supprime également les fichiers stockés dans Cloud Storage.
Pour empêcher l'utilisation d'un instantané spécifique pour les restaurations futures, supprimez l'objet PodSnapshot en exécutant la commande suivante :
kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE
Remplacez POD_SNAPSHOT_NAME par le nom de l'instantané que vous souhaitez supprimer, par exemple example-podsnapshot.
Étapes suivantes
Découvrez comment résoudre les problèmes liés aux instantanés de pods.