Trabalhar com instantâneos
Os snapshots de volume do Kubernetes de volumes persistentes (PVS) permitem cópias pontuais de volumes. Você pode criar um snapshot de um volume criado usando o Astra Trident, importar um snapshot criado fora do Astra Trident, criar um novo volume a partir de um snapshot existente e recuperar dados de volume de snapshots.
Visão geral
O instantâneo de volume é suportado por ontap-nas ontap-nas-flexgroup , , ontap-san, ontap-san-economy, , , , solidfire-san gcp-cvs, e azure-netapp-files drivers.
Você deve ter um controlador de snapshot externo e definições personalizadas de recursos (CRDs) para trabalhar com snapshots. Essa é a responsabilidade do orquestrador do Kubernetes (por exemplo: Kubeadm, GKE, OpenShift).
Se a distribuição do Kubernetes não incluir a controladora de snapshot e CRDs, Implantar um controlador de snapshot de volumeconsulte .
|
|
Não crie um controlador de snapshot se estiver criando instantâneos de volume sob demanda em um ambiente GKE. O GKE usa um controlador instantâneo oculto integrado. |
Criar um instantâneo de volume
-
Criar um
VolumeSnapshotClass. para obter mais informações, "VolumeSnapshotClass"consulte .-
O
driveraponta para o condutor Astra Trident CSI. -
deletionPolicypode serDeleteouRetain. Quando definido comoRetain, o instantâneo físico subjacente no cluster de armazenamento é retido mesmo quando oVolumeSnapshotobjeto é excluído.Exemplocat snap-sc.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
-
-
Crie um instantâneo de um PVC existente.
Exemplos-
Este exemplo cria um instantâneo de um PVC existente.
cat snap.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1 -
Este exemplo cria um objeto instantâneo de volume para um PVC chamado
pvc1e o nome do instantâneo é definido comopvc1-snap. Um VolumeSnapshot é análogo a um PVC e está associado a umVolumeSnapshotContentobjeto que representa o snapshot real.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Pode identificar o
VolumeSnapshotContentobjeto para opvc1-snapVolumeSnapshot descrevendo-o. OSnapshot Content Nameidentifica o objeto VolumeSnapshotContent que serve este instantâneo. OReady To Useparâmetro indica que o instantâneo pode ser usado para criar um novo 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 . .
-
Crie um PVC a partir de um instantâneo de volume
Você pode usar dataSource para criar um PVC usando um VolumeSnapshot nomeado <pvc-name> como a fonte dos dados. Depois que o PVC é criado, ele pode ser anexado a um pod e usado como qualquer outro PVC.
|
|
O PVC será criado no mesmo backend que o volume de origem. "KB: A criação de um PVC a partir de um instantâneo de PVC do Trident não pode ser criada em um back-end alternativo"Consulte a . |
O exemplo a seguir cria o PVC usando pvc1-snap como fonte de dados.
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
Importar um instantâneo de volume
O Astra Trident é compatível com o "Processo de snapshot pré-provisionado do Kubernetes" para permitir que o administrador do cluster crie um VolumeSnapshotContent objeto e importe snapshots criados fora do Astra Trident.
O Astra Trident precisa ter criado ou importado o volume pai do snapshot.
-
Cluster admin: Crie um
VolumeSnapshotContentobjeto que faça referência ao snapshot de back-end. Isso inicia o fluxo de trabalho de snapshot no Astra Trident.-
Especifique o nome do instantâneo de back-end em
annotationsastrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Especifique
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>emsnapshotHandle. esta é a única informação fornecida ao Astra Trident pelo snapshotter externo naListSnapshotschamada.O <volumeSnapshotContentName>nem sempre pode corresponder ao nome do instantâneo do back-end devido a restrições de nomenclatura CR.ExemploO exemplo a seguir cria um
VolumeSnapshotContentobjeto que faz referência a snapshot de back-endsnap-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> -
-
Cluster admin: Crie o
VolumeSnapshotCR que faz referência aoVolumeSnapshotContentobjeto. Isso solicita acesso para usar oVolumeSnapshotem um namespace dado.ExemploO exemplo a seguir cria um
VolumeSnapshotCR chamadoimport-snapque faz referência aoVolumeSnapshotContentimport-snap-contentchamado .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 -
* Processamento interno (nenhuma ação necessária):* o Snapshotter externo reconhece o recém-criado
VolumeSnapshotContente executa aListSnapshotschamada. O Astra Trident cria oTridentSnapshot.-
O snapshotter externo define
VolumeSnapshotContentparareadyToUseeVolumeSnapshotparatrue. -
Trident retorna
readyToUse=true.
-
-
Qualquer usuário: Crie um
PersistentVolumeClaimpara fazer referência ao novoVolumeSnapshot, onde ospec.dataSourcenome (ouspec.dataSourceRef) é oVolumeSnapshotnome.ExemploO exemplo a seguir cria um PVC referenciando o
VolumeSnapshotnomeimport-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
Recuperar dados de volume usando snapshots
O diretório instantâneo é oculto por padrão para facilitar a compatibilidade máxima dos volumes provisionados usando os ontap-nas drivers e ontap-nas-economy. Ative o .snapshot diretório para recuperar dados de instantâneos diretamente.
Use a CLI do ONTAP de restauração de snapshot de volume para restaurar um volume para um estado gravado em um snapshot anterior.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Quando você restaura uma cópia snapshot, a configuração de volume existente é sobrescrita. As alterações feitas aos dados de volume após a criação da cópia instantânea são perdidas. |
Eliminar um PV com instantâneos associados
Ao excluir um volume persistente com snapshots associados, o volume Trident correspondente é atualizado para um "estado de exclusão". Remova os snapshots de volume para excluir o volume Astra Trident.
Implantar um controlador de snapshot de volume
Se a sua distribuição do Kubernetes não incluir a controladora de snapshot e CRDs, você poderá implantá-los da seguinte forma.
-
Criar CRDs de instantâneos de 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
-
Crie o controlador instantâneo.
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
Se necessário, abra deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamle atualizenamespacepara o seu namespace.