Skip to main content
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 netapp-aruldeepa

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 , azure-netapp-files , e google-cloud-netapp-volumes motoristas.

Antes de começar

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 .

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

Passos
  1. Criar um VolumeSnapshotClass. para obter mais informações, "VolumeSnapshotClass"consulte .

    • Os driver pontos para o driver Trident CSI.

    • 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.

      Exemplo
      cat snap-sc.yaml
      apiVersion: snapshot.storage.k8s.io/v1
      kind: VolumeSnapshotClass
      metadata:
        name: csi-snapclass
      driver: csi.trident.netapp.io
      deletionPolicy: Delete
  2. 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 como pvc1-snap. Um VolumeSnapshot é análogo a um PVC e está associado a um VolumeSnapshotContent 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 o pvc1-snap VolumeSnapshot descrevendo-o. 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.

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

Antes de começar

O Trident deve ter criado ou importado o volume pai do instantâneo.

Passos
  1. 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 as trident.netapp.io/internalSnapshotName: <"backend-snapshot-name">.

    • Especifique <name-of-parent-volume-in-trident>/<volume-snapshot-content-name> em snapshotHandle. esta é a única informação fornecida ao Trident pelo snapshotter externo na ListSnapshots chamada.

      Observação O <volumeSnapshotContentName> nem sempre pode corresponder ao nome do instantâneo do back-end devido a restrições de nomenclatura CR.
      Exemplo

      O exemplo a seguir cria um VolumeSnapshotContent objeto que faz referência a snapshot de back-end snap-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>
      volumeSnapshotRef:
        name: import-snap
        namespace: default
  2. Cluster admin: Crie o VolumeSnapshot CR que faz referência ao VolumeSnapshotContent objeto. Isso solicita acesso para usar o VolumeSnapshot em um namespace dado.

    Exemplo

    O exemplo a seguir cria um VolumeSnapshot CR chamado import-snap que faz referência ao VolumeSnapshotContent 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
  3. * Processamento interno (nenhuma ação necessária):* o Snapshotter externo reconhece o recém-criado VolumeSnapshotContent e executa a ListSnapshots chamada. Trident cria o TridentSnapshot.

    • O snapshotter externo define VolumeSnapshotContent para readyToUse e VolumeSnapshot para true.

    • Trident retorna readyToUse=true.

  4. Qualquer usuário: Crie um PersistentVolumeClaim para fazer referência ao novo VolumeSnapshot, onde o spec.dataSource nome (ou spec.dataSourceRef) é o VolumeSnapshot nome.

    Exemplo

    O exemplo a seguir cria um PVC referenciando o VolumeSnapshot nome import-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
Observação 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.

O Trident oferece suporte à restauração de snapshot no ontap-san, ontap-san-economy, , ontap-nas ontap-nas-flexgroup , azure-netapp-files, , gcp-cvs google-cloud-netapp-volumes, , e solidfire-san drivers.

Antes de começar

Você deve ter um PVC vinculado e instantâneo de volume disponível.

  • Verifique se o status do PVC está vinculado.

    kubectl get pvc
  • Verifique se o instantâneo do volume está pronto para ser usado.

    kubectl get vs
Passos
  1. Crie o TASR CR. Este exemplo cria um CR para instantâneo de PVC pvc1 e volume pvc1-snapshot .

    Observação O TAR CR deve estar num espaço de nomes onde o PVC e VS existam.
    cat tasr-pvc1-snapshot.yaml
    apiVersion: trident.netapp.io/v1
    kind: TridentActionSnapshotRestore
    metadata:
      name: trident-snap
      namespace: trident
    spec:
      pvcName: pvc1
      volumeSnapshotName: pvc1-snapshot
  2. Aplique o CR para restaurar a partir do instantâneo. Este exemplo restaura do instantâneo pvc1.

    kubectl create -f tasr-pvc1-snapshot.yaml
    tridentactionsnapshotrestore.trident.netapp.io/trident-snap created
Resultados

O Trident restaura os dados do snapshot. Você pode verificar o status de restauração de snapshot:

kubectl get tasr -o yaml
apiVersion: trident.netapp.io/v1
items:
- apiVersion: trident.netapp.io/v1
  kind: TridentActionSnapshotRestore
  metadata:
    creationTimestamp: "2023-04-14T00:20:33Z"
    generation: 3
    name: trident-snap
    namespace: trident
    resourceVersion: "3453847"
    uid: <uid>
  spec:
    pvcName: pvc1
    volumeSnapshotName: pvc1-snapshot
  status:
    startTime: "2023-04-14T00:20:34Z"
    completionTime: "2023-04-14T00:20:37Z"
    state: Succeeded
kind: List
metadata:
  resourceVersion: ""
Observação
  • Na maioria dos casos, o Trident não tentará automaticamente a operação em caso de falha. Terá de efetuar novamente a operação.

  • Os usuários do Kubernetes sem acesso de administrador podem ter permissão para que o administrador crie um TASR CR em seu namespace de aplicativo.

Eliminar um PV com instantâneos associados

Ao excluir um volume persistente com instantâneos 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.

Passos
  1. 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
  2. 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
    Observação Se necessário, abra deploy/kubernetes/snapshot-controller/rbac-snapshot-controller.yaml e atualize namespace para o seu namespace.