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 Trident, importar um snapshot criado fora do Trident, criar um novo volume a partir de um snapshot existente e recuperar dados de volume de snapshots.
Visão geral
O snapshot de volume é suportado por ontap-nas , ontap-nas-flexgroup , ontap-san , ontap-san-economy , solidfire-san , azure-netapp-files , e google-cloud-netapp-volumes motoristas.
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 .-
Os
driverpontos para o driver 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 Trident oferece suporte ao "Processo de snapshot pré-provisionado do Kubernetes" para permitir que o administrador de cluster crie um VolumeSnapshotContent objeto e importe snapshots criados fora do Trident.
O Trident deve ter criado ou importado o volume pai do instantâneo.
-
Cluster admin: Crie um
VolumeSnapshotContentobjeto que faça referência ao snapshot de back-end. Isso inicia o fluxo de trabalho de snapshot no 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 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> volumeSnapshotRef: name: import-snap namespace: default -
-
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. 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. |
Restauração de volume no local a partir de um instantâneo
O Trident fornece restauração rápida de volume no local a partir de um instantâneo usando o TridentActionSnapshotRestore CR (TASR). Esse 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 , google-cloud-netapp-volumes , e solidfire-san motoristas.
Você deve ter um PVC vinculado e instantâneo de volume disponível.
-
Verifique se o status do PVC está vinculado.
kubectl get pvc -
Verifique se o instantâneo do volume está pronto para ser usado.
kubectl get vs
-
Crie o TASR CR. Este exemplo cria um CR para instantâneo de PVC
pvc1e volumepvc1-snapshot.O TAR CR deve estar num espaço de nomes onde o PVC e 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 o CR para restaurar a partir do instantâneo. Este exemplo restaura do instantâneo
pvc1.kubectl create -f tasr-pvc1-snapshot.yamltridentactionsnapshotrestore.trident.netapp.io/trident-snap created
O Trident restaura os dados do snapshot. Você pode verificar o status de restauração de 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: ""
|
|
|
Eliminar um PV com instantâneos associados
Ao excluir um volume persistente com instantâneos associados, o volume Trident correspondente é atualizado para um "estado de exclusão". Remova os instantâneos de volume para excluir o volume 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.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 atualizenamespacepara o seu namespace.