Skip to main content
È disponibile una versione più recente di questo prodotto.
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

A partire dalla versione 20.01 di Astra Trident, è possibile creare snapshot di PVS nel livello Kubernetes. È possibile utilizzare queste snapshot per mantenere copie point-in-time dei volumi creati da Astra Trident e pianificare la creazione di volumi aggiuntivi (cloni). Lo snapshot del volume è supportato da ontap-nas, ontap-san, ontap-san-economy, solidfire-san, gcp-cvs, e. azure-netapp-files driver.

Nota Questa funzione è disponibile da Kubernetes 1.17 (beta) ed è GA da 1.20. Per informazioni sulle modifiche apportate al passaggio dalla versione beta a quella GA, vedere "il blog di release". Con la laurea in GA, il v1 La versione API è stata introdotta ed è compatibile con le versioni precedenti v1beta1 snapshot.
Di cosa hai bisogno
  • La creazione di snapshot di volumi richiede la creazione di uno snapshot controller esterno e di definizioni di risorse personalizzate (CRD). Questa è la responsabilità dell'utilizzo di Kubernetes orchestrator (ad esempio: Kubeadm, GKE, OpenShift).

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

  1. Creare CRD snapshot di volume.

    Per Kubernetes 1.20 e versioni successive, utilizzare gli snapshot CRD v1 con i componenti snapshot della versione 5.0 o superiore. Per Kubernetes 1.19, utilizzare v1beta1 con i componenti snapshot v3.0.3.

    componenti v5.0
    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
    componenti v3.0.3
    cat snapshot-setup.sh
    #!/bin/bash
    # Create volume snapshot CRDs
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
  2. Creare lo snapshot controller nello spazio dei nomi desiderato. Modificare i manifesti YAML riportati di seguito per modificare lo spazio dei nomi.

    Per Kubernetes 1.20 e versioni successive, utilizzare la versione 5.0 o superiore. Per Kubernetes versione 1.19 utilizzare v3.0.3

    Nota Non creare un controller di snapshot se si configurano snapshot di volumi on-demand in un ambiente GKE. GKE utilizza un controller di snapshot integrato e nascosto.
    controller v5.0
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
    controller v3.0.3
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml
    kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
Suggerimento CSI Snapshotter offre un "convalida di webhook" per aiutare gli utenti a convalidare le istantanee v1beta1 esistenti e confermare che si tratta di oggetti di risorse validi. Il webhook validante etichetta automaticamente gli oggetti snapshot non validi e impedisce la creazione di oggetti non validi futuri. Il webhook di convalida viene implementato da Kubernetes orchestrator. Consultare le istruzioni per implementare manualmente il webhook di convalida "qui". Trova esempi di manifesti di snapshot non validi "qui".

Nell'esempio riportato di seguito vengono illustrati i costrutti necessari per l'utilizzo delle snapshot e viene illustrato come creare e utilizzare le istantanee.

Fase 1: Impostare un VolumeSnapshotClass

Prima di creare un'istantanea del volume, impostare un collegamento:../trident-reference/objects.html[VolumeSnapshotClass^].

cat snap-sc.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
  name: csi-snapclass
driver: csi.trident.netapp.io
deletionPolicy: Delete

Il driver Indica il driver CSI di Astra Trident. 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.

Fase 2: Creare un'istantanea di un PVC esistente

cat snap.yaml
#Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.19, use apiVersion v1beta1.
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
  name: pvc1-snap
spec:
  volumeSnapshotClassName: csi-snapclass
  source:
    persistentVolumeClaimName: pvc1

Lo snapshot è in fase di creazione per un PVC denominato pvc1`e il nome dello snapshot è impostato su `pvc1-snap.

kubectl create -f snap.yaml
volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created

kubectl get volumesnapshots
NAME                   AGE
pvc1-snap              50s

Questo ha creato un VolumeSnapshot oggetto. Un'istantanea VolumeSnapshot è analoga a un PVC ed è associata a un VolumeSnapshotContent oggetto che rappresenta lo snapshot effettivo.

È possibile identificare VolumeSnapshotContent oggetto per pvc1-snap VolumeSnapshot descrivendolo.

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

Il Snapshot Content Name Identifica l'oggetto VolumeSnapshotContent che fornisce questa snapshot. Il Ready To Use Il parametro indica che l'istantanea può essere utilizzata per creare un nuovo PVC.

Fase 3: Creazione di PVC da VolumeSnapshots

Vedere l'esempio seguente per creare un PVC utilizzando uno snapshot:

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

dataSource Mostra che il PVC deve essere creato utilizzando un VolumeSnapshot denominato pvc1-snap come origine dei dati. Questo indica ad Astra Trident di creare un PVC dall'istantanea. Una volta creato, il PVC può essere collegato a un pod e utilizzato come qualsiasi altro PVC.

Nota Quando si elimina un volume persistente con snapshot associate, il volume Trident corrispondente viene aggiornato a uno stato di eliminazione. Per eliminare il volume Astra Trident, è necessario rimuovere le snapshot del volume.

Trova ulteriori informazioni