Trabalhar com instantâneos
A partir do lançamento de 20,01 do Astra Trident, você pode criar snapshots de PVS na camada Kubernetes. Use esses snapshots para manter cópias pontuais de volumes criados pelo Astra Trident e agendar a criação de volumes adicionais (clones). O instantâneo de volume é suportado pelos ontap-nas
drivers , ontap-san
, ontap-san-economy
, solidfire-san
, gcp-cvs
e azure-netapp-files
.
Esse recurso está disponível no Kubernetes 1,17 (beta) e é GA no 1,20. Para entender as mudanças envolvidas na mudança de beta para GA, "o blog de lançamento" consulte . Com a graduação para GA, a v1 versão da API é introduzida e é compatível com v1beta1 snapshots.
|
-
A criação de instantâneos de volume requer a criação de um controlador de snapshot externo e de definições personalizadas de recursos (CRDs). Essa é a responsabilidade do orquestrador do Kubernetes sendo usado (por exemplo: Kubeadm, GKE, OpenShift).
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.
Para Kubernetes 1,20 e posterior, use CRDs de snapshot de v1 com componentes de snapshot de v5,0 ou superior. Para as versões 1,18 e 1,19 do Kubernetes, use o v1beta1 com componentes de snapshot v3,0.3.
v5.0 componentes$ cat snapshot-setup.sh #!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
v3.0.3 componentes$ cat snapshot-setup.sh #!/bin/bash # Create volume snapshot CRDs kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/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.
Para Kubernetes 1,20 e posterior, use o v5,0 ou superior. Para as versões 1,18 e 1,19 do Kubernetes, use o v3,0.3
Não crie um controlador de instantâneos se configurar instantâneos de volume sob demanda em um ambiente GKE. O GKE utiliza um controlador instantâneo oculto incorporado. Controlador v5.0kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/release-5.0/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
Controlador v3.0.3kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml kubectl apply -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v3.0.3/deploy/kubernetes/snapshot-controller/setup-snapshot-controller.yaml
O CSI Snapshotter fornece um "validar webhook" para ajudar os usuários a validar snapshots existentes do v1beta1 e confirmar que são objetos de recurso válidos. O webhook de validação rotula automaticamente objetos snapshot inválidos e impede a criação de futuros objetos inválidos. O webhook de validação é implantado pelo Kubernetes orchestrator. Consulte as instruções para implantar o webhook de validação manualmente "aqui". Encontre exemplos de manifestos de instantâneos inválidos "aqui" . |
O exemplo detalhado abaixo explica as construções necessárias para trabalhar com snapshots e mostra como os snapshots podem ser criados e usados.
Passo 1: Configure a. VolumeSnapshotClass
Antes de criar um instantâneo de volume, configure um link:../Trident-reference/objects.html[VolumeSnapshotClass
.
$ cat snap-sc.yaml #Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.18 and 1.19, use apiVersion v1beta1. 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.
Passo 2: Crie um instantâneo de um PVC existente
$ cat snap.yaml #Use apiVersion v1 for Kubernetes 1.20 and above. For Kubernetes 1.18 and 1.19, use apiVersion v1beta1. apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshot metadata: name: pvc1-snap spec: volumeSnapshotClassName: csi-snapclass source: persistentVolumeClaimName: pvc1
O instantâneo está sendo 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
Veja o exemplo a seguir para criar um PVC usando um snapshot:
$ 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. |
Encontre mais informações
-
link:../Trident-reference/objects.html[
VolumeSnapshotClass