Trabalhar com instantâneos
Os snapshots de volumes persistentes (PVs) do Kubernetes permitem a criação de cópias pontuais dos volumes. Você pode criar um snapshot de um volume criado usando o Trident, importar um snapshot criado fora do Trident, criar um novo volume a partir de um snapshot existente e recuperar dados de volumes a partir de snapshots.
Visão geral
O snapshot de volume é suportado por ontap-nas , ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , gcp-cvs , azure-netapp-files , e google-cloud-netapp-volumes motoristas.
Para trabalhar com snapshots, você precisa de um controlador de snapshots externo e definições de recursos personalizados (CRDs). Essa é a responsabilidade do orquestrador do Kubernetes (por exemplo: Kubeadm, GKE, OpenShift).
Se a sua distribuição Kubernetes não incluir o controlador de snapshots e os CRDs, consulteImplante um controlador de instantâneo de volume .
|
|
Não crie um controlador de snapshots se estiver criando snapshots de volume sob demanda em um ambiente GKE. O GKE utiliza um controlador de snapshots integrado e oculto. |
Criar um instantâneo de volume
-
Criar um
VolumeSnapshotClassPara obter mais informações, consulte"VolumeSnapshotClass" .-
O
driverAponta para o motorista do Trident CSI. -
deletionPolicy`pode ser `DeleteouRetain. Quando definido paraRetain, o snapshot físico subjacente no cluster de armazenamento é mantido mesmo quando oVolumeSnapshotO objeto foi 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 uma imagem instantânea de um tubo de 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 de instantâneo de volume para um PVC chamado
pvc1e o nome do instantâneo está definido comopvc1-snap. Um VolumeSnapshot é análogo a um PVC e está associado a umVolumeSnapshotContentobjeto que representa a captura instantânea real.kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
-
Você pode identificar o
VolumeSnapshotContentobjeto para opvc1-snapO VolumeSnapshot é descrito dessa forma. OSnapshot Content NameIdentifica o objeto VolumeSnapshotContent que fornece este snapshot. OReady To UseO parâ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 ...
-
Criar um PVC a partir de um instantâneo de volume
Você pode usar dataSource para criar um PVC usando um VolumeSnapshot chamado <pvc-name> como fonte dos dados. Após a fabricação do PVC, ele pode ser fixado a um invólucro e utilizado como qualquer outro PVC.
|
|
O PVC será criado no mesmo backend que o volume de origem. Consulte"KB: A criação de um PVC a partir de um Snapshot de PVC do Trident não pode ser feita em um backend alternativo." . |
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
A Trident apoia o"Processo de snapshot pré-provisionado do Kubernetes" para permitir que o administrador do cluster crie um VolumeSnapshotContent snapshots de objetos e importações criados fora do Trident.
O Trident deve ter criado ou importado o volume pai do snapshot.
-
Administrador do cluster: Criar um
VolumeSnapshotContentobjeto que faz referência ao snapshot do backend. Isso inicia o fluxo de trabalho de captura de instantâneos no Trident.-
Especifique o nome do snapshot do backend em
annotationscomotrident.netapp.io/internalSnapshotName: <"backend-snapshot-name">. -
Especificar
<name-of-parent-volume-in-trident>/<volume-snapshot-content-name>emsnapshotHandleEsta é a única informação fornecida ao Trident pelo snapshotter externo.ListSnapshotschamar.O <volumeSnapshotContentName>Nem sempre é possível que o nome do snapshot do backend corresponda ao nome original devido a restrições de nomenclatura do CR.ExemploO exemplo a seguir cria um
VolumeSnapshotContentobjeto que faz referência a um snapshot do backendsnap-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> volumeSnapshotRef: name: import-snap namespace: default -
-
Administrador do cluster: Crie o
VolumeSnapshotCR que faz referência aoVolumeSnapshotContentobjeto. Este pedido permite o acesso para usar oVolumeSnapshotem um determinado espaço de nomes.ExemploO exemplo a seguir cria um
VolumeSnapshotCR nomeadoimport-snapque faz referência aoVolumeSnapshotContentnomeadoimport-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 -
Processamento interno (nenhuma ação necessária): O snapshotter externo reconhece o recém-criado
VolumeSnapshotContente executa oListSnapshotschamar. Trident cria oTridentSnapshot.-
O capturador de instantâneos externo define o
VolumeSnapshotContentparareadyToUsee oVolumeSnapshotparatrue. -
Trident retorna
readyToUse=true.
-
-
Qualquer usuário: Criar um
PersistentVolumeClaimpara fazer referência ao novoVolumeSnapshot, onde ospec.dataSource(ouspec.dataSourceRef) o nome é oVolumeSnapshotnome.ExemploO exemplo a seguir cria um PVC que faz referência a
VolumeSnapshotnomeadoimport-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
Recupere dados de volume usando snapshots
O diretório de snapshots fica oculto por padrão para facilitar a máxima compatibilidade dos volumes provisionados usando o ontap-nas e ontap-nas-economy motoristas. Ative o .snapshot diretório para recuperar dados diretamente de snapshots.
Utilize o comando volume snapshot restore da CLI do ONTAP para restaurar um volume a um estado registrado em um snapshot anterior.
cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
|
|
Ao restaurar uma cópia de snapshot, a configuração de volume existente é sobrescrita. As alterações feitas nos dados do volume após a criação da cópia instantânea serão perdidas. |
Restauração de volume in-place a partir de um snapshot
O Trident proporciona restauração de volume rápida e in situ a partir de uma imagem instantânea usando o TridentActionSnapshotRestore (TASR) CR. Essa solicitação de configuração (CR) funciona como uma ação imperativa do Kubernetes e não persiste após a conclusão da operação.
O Trident suporta a restauração de snapshots no ontap-san , ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , e solidfire-san motoristas.
Você precisa ter um PVC encadernado e um snapshot de volume disponível.
-
Verifique se o status do PVC está vinculado.
kubectl get pvc -
Verifique se o snapshot do volume está pronto para uso.
kubectl get vs
-
Crie o TASR CR. Este exemplo cria um CR para PVC
pvc1e instantâneo de volumepvc1-snapshot.O TASR CR deve estar em um namespace onde o PVC e o VS existam. cat tasr-pvc1-snapshot.yamlapiVersion: trident.netapp.io/v1 kind: TridentActionSnapshotRestore metadata: name: trident-snap namespace: trident spec: pvcName: pvc1 volumeSnapshotName: pvc1-snapshot -
Aplique a solicitação de restauração (CR) para restaurar a partir do snapshot. Este exemplo restaura a partir de um snapshot.
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
O Trident restaura os dados a partir do snapshot. Você pode verificar o status da restauração do snapshot:
kubectl get tasr -o yaml
apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
kind: TridentActionSnapshotRestore
metadata:
creationTimestamp: "2023-04-14T00:20:33Z"
generation: 3
name: trident-snap
namespace: trident
resourceVersion: "3453847"
uid: <uid>
spec:
pvcName: pvc1
volumeSnapshotName: pvc1-snapshot
status:
startTime: "2023-04-14T00:20:34Z"
completionTime: "2023-04-14T00:20:37Z"
state: Succeeded
kind: List
metadata:
resourceVersion: ""
|
|
|
Excluir um PV com snapshots associados
Ao excluir um Volume Persistente com snapshots associados, o volume Trident correspondente é atualizado para o estado "Excluindo". Remova os snapshots de volume para excluir o volume Trident .
Implante um controlador de instantâneo de volume
Se a sua distribuição Kubernetes não incluir o controlador de snapshots e os CRDs, você pode implantá-los da seguinte forma.
-
Criar CRDs de snapshot 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 de instantâneo.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-6.1/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlSe necessário, abra deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamle atualizarnamespacepara o seu espaço de nomes.