Skip to main content
Uma versão mais recente deste produto está disponível.
O português é fornecido por meio de tradução automática para sua conveniência. O inglês precede o português em caso de inconsistências.

Trabalhar com instantâneos

Colaboradores

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 .

Observação 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.
O que você vai precisar
  • 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.

  1. 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
  2. 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

    Observação 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.0
    kubectl 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.3
    kubectl 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
Dica 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.

Observação 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