Skip to main content
La versione in lingua italiana fornita proviene da una traduzione automatica. Per eventuali incoerenze, fare riferimento alla versione in lingua inglese.

Lavorare con le istantanee

Collaboratori

Le snapshot del volume di Kubernetes dei volumi persistenti (PVS) consentono copie point-in-time dei volumi. Puoi creare una snapshot di un volume creato utilizzando Astra Trident, importare uno snapshot creato all'esterno di Astra Trident, creare un nuovo volume da una snapshot esistente e recuperare i dati del volume da snapshot.

Panoramica

Lo snapshot del volume è supportato da ontap-nas, ontap-nas-flexgroup, ontap-san, ontap-san-economy, solidfire-san, gcp-cvs, e. azure-netapp-files driver.

Prima di iniziare

Per utilizzare gli snapshot, è necessario disporre di un controller snapshot esterno e di CRD (Custom Resource Definitions). Questa è la responsabilità del Kubernetes orchestrator (ad esempio: Kubeadm, GKE, OpenShift).

Se la distribuzione Kubernetes non include il controller di snapshot e i CRD, fare riferimento a. Implementare un controller per lo snapshot dei volumi.

Nota Non creare un controller di snapshot se si creano snapshot di volumi on-demand in un ambiente GKE. GKE utilizza un controller di snapshot integrato e nascosto.

Creare un'istantanea del volume

Fasi
  1. Creare un VolumeSnapshotClass. Per ulteriori informazioni, fare riferimento a. "VolumeSnapshotClass".

    • Il driver Indica il driver Astra Trident CSI.

    • deletionPolicy può essere Delete oppure Retain. Quando è impostato su Retain, lo snapshot fisico sottostante sul cluster di storage viene conservato anche quando VolumeSnapshot oggetto eliminato.

      Esempio
      cat snap-sc.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshotClass
      metadata:
        name: csi-snapclass
      driver: csi.trident.netapp.io
      deletionPolicy: Delete
  2. Creare un'istantanea di un PVC esistente.

    Esempi
    • Questo esempio crea un'istantanea di un PVC esistente.

      cat snap.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshot
      metadata:
        name: pvc1-snap
      spec:
        volumeSnapshotClassName: csi-snapclass
        source:
          persistentVolumeClaimName: pvc1
    • Questo esempio crea un oggetto snapshot di volume per un PVC denominato pvc1 e il nome dello snapshot è impostato su pvc1-snap. Un'istantanea VolumeSnapshot è analoga a un PVC ed è associata a un VolumeSnapshotContent oggetto che rappresenta lo snapshot effettivo.

      kubectl create -f snap.yaml
      volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created
      
      kubectl get volumesnapshots
      NAME                   AGE
      pvc1-snap              50s
    • È possibile identificare VolumeSnapshotContent oggetto per pvc1-snap VolumeSnapshot descrivendolo. Il Snapshot Content Name Identifica l'oggetto VolumeSnapshotContent che fornisce questa snapshot. Il Ready To Use Parametro indica che l'istantanea può essere utilizzata per creare un nuovo PVC.

      kubectl describe volumesnapshots pvc1-snap
      Name:         pvc1-snap
      Namespace:    default
      .
      .
      .
      Spec:
        Snapshot Class Name:    pvc1-snap
        Snapshot Content Name:  snapcontent-e8d8a0ca-9826-11e9-9807-525400f3f660
        Source:
          API Group:
          Kind:       PersistentVolumeClaim
          Name:       pvc1
      Status:
        Creation Time:  2019-06-26T15:27:29Z
        Ready To Use:   true
        Restore Size:   3Gi
      .
      .

Creare un PVC da uno snapshot di volume

È possibile utilizzare dataSource Per creare un PVC utilizzando un VolumeSnapshot denominato <pvc-name> come origine dei dati. Una volta creato, il PVC può essere collegato a un pod e utilizzato come qualsiasi altro PVC.

Attenzione Il PVC verrà creato nello stesso backend del volume di origine. Fare riferimento a. "KB: La creazione di un PVC da uno snapshot PVC Trident non può essere creata in un backend alternativo".

Nell'esempio seguente viene creato il PVC utilizzando pvc1-snap come origine dei dati.

cat pvc-from-snap.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc-from-snap
spec:
  accessModes:
    - ReadWriteOnce
  storageClassName: golden
  resources:
    requests:
      storage: 3Gi
  dataSource:
    name: pvc1-snap
    kind: VolumeSnapshot
    apiGroup: snapshot.storage.k8s.io

Importare uno snapshot di volume

Astra Trident supporta a. "Processo Snapshot con pre-provisioning di Kubernetes" per consentire all'amministratore del cluster di creare un VolumeSnapshotContent Object e importa gli snapshot creati all'esterno di Astra Trident.

Prima di iniziare

Astra Trident deve aver creato o importato il volume principale dello snapshot.

Fasi
  1. Cluster admin: creare un VolumeSnapshotContent oggetto che fa riferimento allo snapshot backend. In questo modo viene avviato il flusso di lavoro delle snapshot in Astra Trident.

    • Specificare il nome dell'istantanea backend in annotations come trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">.

    • Specificare <name-of-parent-volume-in-trident>/<volume-snapshot-content-name> poll snapshotHandle. Queste sono le uniche informazioni fornite a Astra Trident dallo snap-ter esterno in ListSnapshots chiamata.

      Nota Il <volumeSnapshotContentName> Impossibile corrispondere sempre al nome dell'istantanea backend a causa di vincoli di denominazione CR.
      Esempio

      Nell'esempio seguente viene creato un VolumeSnapshotContent oggetto che fa riferimento allo snapshot backend snap-01.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotContent
    metadata:
      name: import-snap-content
      annotations:
        trident.netapp.io/internalSnapshotName: "snap-01"  # This is the name of the snapshot on the backend
    spec:
      deletionPolicy: Retain
      driver: csi.trident.netapp.io
      source:
        snapshotHandle: pvc-f71223b5-23b9-4235-bbfe-e269ac7b84b0/import-snap-content # <import PV name or source PV name>/<volume-snapshot-content-name>
  2. Cluster admin: creare il VolumeSnapshot CR che fa riferimento a. VolumeSnapshotContent oggetto. In questo modo viene richiesto l'accesso per l'utilizzo di VolumeSnapshot in un determinato namespace.

    Esempio

    Nell'esempio seguente viene creato un VolumeSnapshot CR con nome import-snap questo fa riferimento al VolumeSnapshotContent con nome import-snap-content.

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: import-snap
    spec:
      # volumeSnapshotClassName: csi-snapclass (not required for pre-provisioned or imported snapshots)
      source:
        volumeSnapshotContentName: import-snap-content
  3. Elaborazione interna (nessuna azione richiesta): lo snapshot esterno riconosce la nuova creazione VolumeSnapshotContent ed esegue ListSnapshots chiamata. Astra Trident crea l' TridentSnapshot.

    • Lo snapshot esterno imposta VolumeSnapshotContent a. readyToUse e a. VolumeSnapshot a. true.

    • Trident ritorna readyToUse=true.

  4. Qualsiasi utente: creare un PersistentVolumeClaim per fare riferimento al nuovo VolumeSnapshot, dove il spec.dataSource (o. spec.dataSourceRef) è il VolumeSnapshot nome.

    Esempio

    Nell'esempio seguente viene creato un PVC che fa riferimento a. VolumeSnapshot con nome import-snap.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-from-snap
    spec:
      accessModes:
        - ReadWriteOnce
      storageClassName: simple-sc
      resources:
        requests:
          storage: 1Gi
      dataSource:
        name: import-snap
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io

Ripristinare i dati del volume utilizzando le snapshot

La directory Snapshot è nascosta per impostazione predefinita per facilitare la massima compatibilità dei volumi con cui viene eseguito il provisioning mediante ontap-nas e. ontap-nas-economy driver. Attivare il .snapshot directory per ripristinare i dati direttamente dalle snapshot.

Utilizzare la CLI ONTAP per il ripristino dello snapshot del volume per ripristinare uno stato di un volume registrato in uno snapshot precedente.

cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Nota Quando si ripristina una copia snapshot, la configurazione del volume esistente viene sovrascritta. Le modifiche apportate ai dati del volume dopo la creazione della copia snapshot andranno perse.

Eliminare un PV con gli snapshot associati

Quando si elimina un volume persistente con snapshot associate, il volume Trident corrispondente viene aggiornato a uno stato di eliminazione. Rimuovere le snapshot del volume per eliminare il volume Astra Trident.

Implementare un controller per lo snapshot dei volumi

Se la distribuzione Kubernetes non include lo snapshot controller e i CRD, è possibile implementarli come segue.

Fasi
  1. Creare CRD snapshot di volume.

    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
  2. Creare il controller di snapshot.

    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    Nota Se necessario, aprire deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml e aggiornare namespace allo spazio dei nomi.