Trabalhar com instantâneos
Você pode criar snapshots de volume do Kubernetes (snapshot de volume) de volumes persistentes (PVS) para manter cópias pontuais de volumes Astra Trident. Além disso, você pode criar um novo volume, também conhecido como clone, a partir de um instantâneo de volume existente. 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). 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, Implantando um controlador de snapshot de volumeconsulte .
Não crie um controlador de snapshot se estiver criando snapshots de volume sob demanda em um ambiente GKE. O GKE usa um controlador instantâneo oculto integrado. |
Passo 1: Crie a. VolumeSnapshotClass
Este exemplo cria uma classe de instantâneo de volume.
cat snap-sc.yaml apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: csi-snapclass driver: csi.trident.netapp.io deletionPolicy: Delete
`driver`O ponto é o condutor CSI do Astra Trident. `deletionPolicy` pode ser `Delete` ou `Retain`. Quando definido como `Retain`, o instantâneo físico subjacente no cluster de armazenamento é retido mesmo quando o `VolumeSnapshot` objeto é excluído.
Para obter mais informações, consulte link:../Trident-reference/objects.html[VolumeSnapshotClass
.
Passo 2: Crie um instantâneo de um PVC existente
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
Neste exemplo, o instantâneo é criado para um PVC chamado pvc1
e o nome do instantâneo é definido como pvc1-snap
.
kubectl create -f snap.yaml volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created kubectl get volumesnapshots NAME AGE pvc1-snap 50s
Isso criou um VolumeSnapshot
objeto. Um VolumeSnapshot é análogo a um PVC e está associado a um VolumeSnapshotContent
objeto que representa o snapshot real.
É possível identificar o VolumeSnapshotContent
objeto para o pvc1-snap
VolumeSnapshot descrevendo-o.
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 . .
O Snapshot Content Name
identifica o objeto VolumeSnapshotContent que serve este instantâneo. O Ready To Use
parâmetro indica que o instantâneo pode ser usado para criar um novo PVC.
Etapa 3: Criar PVCs a partir do VolumeSnapshots
Este exemplo cria um PVC usando um instantâneo:
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
dataSource
Mostra que o PVC deve ser criado usando um VolumeSnapshot nomeado pvc1-snap
como a fonte dos dados. Isso instrui o Astra Trident a criar um PVC a partir do snapshot. Depois que o PVC é criado, ele pode ser anexado a um pod e usado como qualquer outro PVC.
Ao excluir um volume persistente com snapshots associados, o volume Trident correspondente é atualizado para um "estado de exclusão". Para que o volume do Astra Trident seja excluído, os snapshots do volume devem ser removidos. |
Implantando 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 de snapshot no namespace desejado. Edite os manifestos YAML abaixo para modificar o namespace.
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