Trabalhar com instantâneos de grupos de volumes
Snapshots de grupos de volumes do Kubernetes de Volumes Persistentes (PVs) O NetApp Trident oferece a capacidade de criar snapshots de vários volumes (um grupo de snapshots de volumes). Este snapshot de grupo de volumes representa cópias de vários volumes feitas no mesmo momento.
|
|
VolumeGroupSnapshot é um recurso beta do Kubernetes com APIs beta. O Kubernetes 1.32 é a versão mínima necessária para o VolumeGroupSnapshot. |
Criar instantâneos de grupos de volumes
O recurso de snapshot de grupo de volumes é compatível com os seguintes drivers de armazenamento:
-
`ontap-san`Driver - somente para os protocolos iSCSI e FC, não para o protocolo NVMe/TCP.
-
ontap-san-economy -
ontap-nas
|
|
O recurso de snapshot de grupos de volumes não é compatível com sistemas de armazenamento NetApp AFX. |
-
Certifique-se de que sua versão do Kubernetes seja K8s 1.32 ou superior.
-
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 sua distribuição do Kubernetes não incluir o controlador de snapshot externo e os CRDs, consulte Implantar um controlador de snapshot de volume .
Não crie um controlador de snapshot se estiver criando snapshots de grupo de volumes sob demanda em um ambiente GKE. O GKE usa um controlador instantâneo oculto integrado. -
No controlador de snapshot YAML, defina o
CSIVolumeGroupSnapshotdefina o feature gate como 'true' para garantir que o instantâneo do grupo de volumes esteja habilitado. -
Crie as classes de instantâneos do grupo de volumes necessárias antes de criar um instantâneo do grupo de volumes.
-
Certifique-se de que todos os PVCs/volumes estejam no mesmo SVM para poder criar o VolumeGroupSnapshot.
-
Crie uma VolumeGroupSnapshotClass antes de criar um VolumeGroupSnapshot. Para obter mais informações, "Classe de instantâneo de grupo de volume"consulte .
apiVersion: groupsnapshot.storage.k8s.io/v1beta1 kind: VolumeGroupSnapshotClass metadata: name: csi-group-snap-class annotations: kubernetes.io/description: "Trident group snapshot class" driver: csi.trident.netapp.io deletionPolicy: Delete -
Crie PVCs com rótulos necessários usando classes de armazenamento existentes ou adicione esses rótulos aos PVCs existentes.
O exemplo a seguir cria o PVC usando
pvc1-group-snapcomo fonte de dados e rótuloconsistentGroupSnapshot: groupA. Defina a chave e o valor do rótulo com base em suas necessidades.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc1-group-snap
labels:
consistentGroupSnapshot: groupA
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Mi
storageClassName: sc1-1
-
Crie um VolumeGroupSnapshot com o mesmo rótulo (
consistentGroupSnapshot: groupA) especificado no PVC.Este exemplo cria um instantâneo de grupo de volumes:
apiVersion: groupsnapshot.storage.k8s.io/v1beta1
kind: VolumeGroupSnapshot
metadata:
name: "vgs1"
namespace: trident
spec:
volumeGroupSnapshotClassName: csi-group-snap-class
source:
selector:
matchLabels:
consistentGroupSnapshot: groupA
Recuperar dados de volume usando um snapshot de grupo
Você pode restaurar Volumes Persistentes individuais usando os snapshots individuais criados como parte do Snapshot do Grupo de Volumes. Não é possível recuperar o Snapshot do Grupo de Volumes como uma unidade.
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.
Para obter mais informações, "Restauração de volume no local a partir de um instantâneo"consulte .
Excluir um PV com snapshots de grupo associados
Ao excluir um instantâneo de volume de grupo:
-
Você pode excluir VolumeGroupSnapshots como um todo, não snapshots individuais no grupo.
-
Se PersistentVolumes forem excluídos enquanto houver um snapshot para esse PersistentVolume, o Trident moverá esse volume para um estado de "exclusão" porque o snapshot deve ser removido antes que o volume possa ser removido com segurança.
-
Se um clone tiver sido criado usando um instantâneo agrupado e o grupo precisar ser excluído, uma operação de divisão no clone será iniciada e o grupo não poderá ser excluído até que a divisão seja concluída.
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-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/client/config/crd/groupsnapshot.storage.k8s.io_volumegroupsnapshots.yaml -
Crie o controlador instantâneo.
kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamlkubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-8.2/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yamlSe necessário, abra deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yamle atualizenamespacepara o seu namespace.