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 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 .-
Os
driver
pontos para o driver Trident CSI. -
deletionPolicy
pode serDelete
ouRetain
. Quando definido comoRetain
, o instantâneo físico subjacente no cluster de armazenamento é retido mesmo quando oVolumeSnapshot
objeto é 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
pvc1
e o nome do instantâneo é definido comopvc1-snap
. Um VolumeSnapshot é análogo a um PVC e está associado a umVolumeSnapshotContent
objeto 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
VolumeSnapshotContent
objeto para opvc1-snap
VolumeSnapshot descrevendo-o. OSnapshot Content Name
identifica o objeto VolumeSnapshotContent que serve este instantâneo. OReady To Use
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 . .
-
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
VolumeSnapshotContent
objeto 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
annotations
astrident.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 naListSnapshots
chamada.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
VolumeSnapshotContent
objeto 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
VolumeSnapshot
CR que faz referência aoVolumeSnapshotContent
objeto. Isso solicita acesso para usar oVolumeSnapshot
em um namespace dado.ExemploO exemplo a seguir cria um
VolumeSnapshot
CR chamadoimport-snap
que faz referência aoVolumeSnapshotContent
import-snap-content
chamado .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
VolumeSnapshotContent
e executa aListSnapshots
chamada. Trident cria oTridentSnapshot
.-
O snapshotter externo define
VolumeSnapshotContent
parareadyToUse
eVolumeSnapshot
paratrue
. -
Trident retorna
readyToUse=true
.
-
-
Qualquer usuário: Crie um
PersistentVolumeClaim
para fazer referência ao novoVolumeSnapshot
, onde ospec.dataSource
nome (ouspec.dataSourceRef
) é oVolumeSnapshot
nome.ExemploO exemplo a seguir cria um PVC referenciando o
VolumeSnapshot
nomeimport-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 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.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.yaml
e atualizenamespace
para o seu namespace.