Restaurer une charge de travail à partir d'un instantané de pod

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.

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 :

  1. Supprimez le pod :

    kubectl delete -f POD_NAME.yaml
    

    Remplacez POD_NAME par le nom de votre pod, par exemple my-app.

  2. Appliquez à nouveau le pod :

    kubectl apply -f POD_NAME.yaml
    
  3. Consultez les journaux pour confirmer la restauration de l'instantané :

    kubectl logs my-app --namespace NAMESPACE
    

    Le 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: restore lorsqu'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 commande kubectl 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.