Arbeitslast aus einem Pod-Snapshot wiederherstellen

Hier erfahren Sie, wie Sie eine Arbeitslast aus einem gespeicherten Pod-Snapshot wiederherstellen, Ihre vorhandenen Snapshots verwalten und GKE-Pod-Snapshots (Google Kubernetes Engine) deaktivieren.

Hinweis

Führen Sie die folgenden Aufgaben aus, bevor Sie beginnen:

  • Aktivieren Sie die Google Kubernetes Engine API.
  • Google Kubernetes Engine API aktivieren
  • Wenn Sie die Google Cloud CLI für diese Aufgabe verwenden möchten, müssen Sie die gcloud CLI installieren und dann initialisieren. Wenn Sie die gcloud CLI bereits installiert haben, rufen Sie die neueste Version mit dem Befehl gcloud components update ab. In früheren gcloud CLI-Versionen werden die Befehle in diesem Dokument möglicherweise nicht unterstützt.

Snapshots verwalten

Wenn Sie einen Pod-Snapshot erstellen, wird eine benutzerdefinierte PodSnapshot-Ressource erstellt, um den Status des Pods zu diesem Zeitpunkt zu speichern. Das Feld status dieser Ressource gibt an, ob der Snapshot-Vorgang erfolgreich war und ob der Snapshot für die Wiederherstellung verfügbar ist.

Führen Sie den folgenden Befehl aus, um alle PodSnapshot-Ressourcen in einem Namespace aufzurufen:

kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE

Die Ausgabe sollte so aussehen:

NAME                                   STATUS                  POLICY           AGE
de334898-1e7a-4cdb-9f2e-7cc2181c29e4   AllSnapshotsAvailable   example-policy   47h

Arbeitslast aus einem Snapshot wiederherstellen

Wenn Sie Ihre Arbeitslast aus dem letzten Snapshot wiederherstellen möchten, können Sie den vorhandenen Pod nach der Erstellung eines Snapshots löschen und dann neu bereitstellen. Alternativ können Sie einen neuen Pod mit einer identischen Spezifikation bereitstellen. GKE stellt den Pod automatisch aus dem entsprechenden Snapshot wieder her.

In den folgenden Schritten wird gezeigt, wie ein Pod aus einem passenden Snapshot wiederhergestellt wird, indem der Pod gelöscht und neu bereitgestellt wird:

  1. Löschen Sie den Pod:

    kubectl delete -f POD_NAME.yaml
    

    Ersetzen Sie POD_NAME durch den Namen Ihres Pods, z. B. my-app.

  2. Wenden Sie den Pod noch einmal an:

    kubectl apply -f POD_NAME.yaml
    
  3. So prüfen Sie in den Logs, ob der Snapshot wiederhergestellt wurde:

    kubectl logs my-app --namespace NAMESPACE
    

    Die Ausgabe hängt davon ab, wie Sie Ihre Anwendung konfiguriert haben. In der Beispiel-Python-Anwendung wird in den Logs GKE Pod Snapshot: restore angezeigt, wenn ein Wiederherstellungsvorgang ausgeführt wird.

Aus einem bestimmten Snapshot wiederherstellen

Standardmäßig stellt GKE Arbeitslasten aus der neuesten PodSnapshot-Ressource wieder her, die dem Pod entspricht. Wenn ein Snapshot erstellt wird, generiert GKE automatisch einen eindeutigen Namen (UUID) für die PodSnapshot-Ressource, den Sie mit dem Befehl kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE aufrufen können.

Wenn Sie eine Arbeitslast aus einer älteren oder bestimmten PodSnapshot-Ressource wiederherstellen möchten, fügen Sie der Pod-Spezifikation Ihrer Arbeitslast die Annotation podsnapshot.gke.io/ps-name hinzu und geben Sie den Namen der PodSnapshot-Ressource an, die für die Wiederherstellung der Arbeitslast verwendet werden soll:

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:
  ...

Ersetzen Sie Folgendes:

  • POD_SNAPSHOT_NAME: der Name des Snapshots, von dem Sie wiederherstellen möchten. Sie können Snapshot-Namen mit dem Befehl kubectl get podsnapshots.podsnapshot.gke.io --namespace NAMESPACE abrufen.
  • NAMESPACE: der Namespace für Ihren Pod.
  • KSA_NAME: der Name Ihres KSA.

Damit GKE den angegebenen Snapshot für die Wiederherstellung verwendet, muss der Status der PodSnapshot-Ressource Ready sein und sich im selben Namespace wie der Pod befinden. Wenn der PodSnapshot nicht Ready ist oder nicht im selben Namespace wie der Pod vorhanden ist, führt die Arbeitslast einen Kaltstart durch, anstatt aus einem Snapshot wiederherzustellen.

Snapshot-Abgleich und ‑Kompatibilität

Wenn GKE einen Pod aus einem Snapshot wiederherstellt, muss es ermitteln, welcher Snapshot kompatibel ist. Die Kompatibilität wird durch Regeln wie die Auswahlreihenfolge, die Abgleichskriterien (basierend auf dem whole-pod- im Vergleich zum rootfs-only-Bereich) und den Abgleich von Gruppierungsregeln bestimmt.

Eine detaillierte Referenz zu den Anforderungen für den Abgleich, den Kompatibilitätskriterien und den Spezifikationsfeldern, die die Kompatibilität beeinflussen, finden Sie unter Pod-Snapshot-Abgleich und ‑Kompatibilität.

Snapshots deaktivieren

Wenn Sie die PodSnapshotPolicy-CRD entfernen, können keine Snapshots von Pods erstellt und keine Pods wiederhergestellt werden. Ausgeführte Pods sind vom Löschen der Ressource nicht betroffen. Wenn Sie die Richtlinie jedoch löschen, während ein Pod gespeichert oder wiederhergestellt wird, kann es sein, dass der Pod in einen Fehlerstatus wechselt.

Wenn Sie das Erstellen von Snapshots und die Wiederherstellung für neue Pods, die einer Richtlinie unterliegen, deaktivieren möchten, löschen Sie PodSnapshotPolicy, indem Sie den folgenden Befehl ausführen:

kubectl delete podsnapshotpolicies.podsnapshot.gke.io SNAPSHOT_POLICY --namespace=NAMESPACE

Ersetzen Sie SNAPSHOT_POLICY durch den Namen des PodSnapshotPolicy, den Sie löschen möchten, z. B. example-pod-snapshot-policy.

Sie können auch eine bestimmte PodSnapshot-Ressource löschen, damit Pods nicht mehr aus diesem bestimmten Snapshot wiederhergestellt werden. Durch das Löschen der PodSnapshot-Ressource werden auch die in Cloud Storage gespeicherten Dateien entfernt.

Wenn Sie verhindern möchten, dass ein bestimmter Snapshot für zukünftige Wiederherstellungen verwendet wird, löschen Sie das PodSnapshot-Objekt mit dem folgenden Befehl:

kubectl delete podsnapshots.podsnapshot.gke.io POD_SNAPSHOT_NAME --namespace=NAMESPACE

Ersetzen Sie POD_SNAPSHOT_NAME durch den Namen des Snapshots, den Sie löschen möchten, z. B. example-podsnapshot.

Nächste Schritte

Informationen zur Fehlerbehebung bei Pod-Snapshots