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 volumes persistentes (PVs) do Kubernetes permitem a criação de cópias pontuais dos 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 volumes a partir de snapshots.

Visão geral

O snapshot 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

Para trabalhar com snapshots, você precisa de um controlador de snapshots externo e definições de recursos personalizados (CRDs). Essa é a responsabilidade do orquestrador do Kubernetes (por exemplo: Kubeadm, GKE, OpenShift).

Se a sua distribuição Kubernetes não incluir o controlador de snapshots e os CRDs, consulteImplante um controlador de instantâneo de volume .

Observação Não crie um controlador de snapshots se estiver criando snapshots de volume sob demanda em um ambiente GKE. O GKE utiliza um controlador de snapshots integrado e oculto.

Criar um instantâneo de volume

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

    • O driver Aponta para o motorista do Trident CSI.

    • deletionPolicy`pode ser `Delete ou Retain . Quando definido para Retain , o snapshot físico subjacente no cluster de armazenamento é mantido mesmo quando o VolumeSnapshot O objeto foi 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 uma imagem instantânea de um tubo de 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 de instantâneo de volume para um PVC chamado pvc1 e o nome do instantâneo está definido como pvc1-snap . Um VolumeSnapshot é análogo a um PVC e está associado a um VolumeSnapshotContent objeto que representa a captura instantânea real.

      kubectl create -f snap.yaml
      volumesnapshot.snapshot.storage.k8s.io/pvc1-snap created
      
      kubectl get volumesnapshots
      NAME                   AGE
      pvc1-snap              50s
    • Você pode identificar o VolumeSnapshotContent objeto para o pvc1-snap O VolumeSnapshot é descrito dessa forma. O Snapshot Content Name Identifica o objeto VolumeSnapshotContent que fornece este snapshot. O Ready To Use O 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
      ...

Criar um PVC a partir de um instantâneo de volume

Você pode usar dataSource para criar um PVC usando um VolumeSnapshot chamado <pvc-name> como fonte dos dados. Após a fabricação do PVC, ele pode ser fixado a um invólucro e utilizado 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

A Trident apoia o"Processo de snapshot pré-provisionado do Kubernetes" para permitir que o administrador do cluster crie um VolumeSnapshotContent snapshots de objetos e importações criados fora do Trident.

Antes de começar

O Trident deve ter criado ou importado o volume pai do snapshot.

Passos
  1. Administrador do cluster: Criar um VolumeSnapshotContent objeto que faz referência ao snapshot do backend. Isso inicia o fluxo de trabalho de captura de instantâneos no Trident.

    • Especifique o nome do snapshot do backend em annotations como trident.netapp.io/internalSnapshotName: <"backend-snapshot-name"> .

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

      Observação O <volumeSnapshotContentName> Nem sempre é possível que o nome do snapshot do backend corresponda ao nome original devido a restrições de nomenclatura do CR.
      Exemplo

      O exemplo a seguir cria um VolumeSnapshotContent objeto que faz referência a um snapshot do backend 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. Administrador do cluster: Crie o VolumeSnapshot CR que faz referência ao VolumeSnapshotContent objeto. Este pedido permite o acesso para usar o VolumeSnapshot em um determinado espaço de nomes.

    Exemplo

    O exemplo a seguir cria um VolumeSnapshot CR nomeado import-snap que faz referência ao VolumeSnapshotContent nomeado import-snap-content .

    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 o ListSnapshots chamar. Trident cria o TridentSnapshot .

    • O capturador de instantâneos externo define o VolumeSnapshotContent para readyToUse e o VolumeSnapshot para true .

    • Trident retorna readyToUse=true .

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

    Exemplo

    O exemplo a seguir cria um PVC que faz referência a VolumeSnapshot nomeado 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

Recupere dados de volume usando snapshots

O diretório de snapshots fica oculto por padrão para facilitar a máxima compatibilidade dos volumes provisionados usando o ontap-nas e ontap-nas-economy motoristas. Ative o .snapshot diretório para recuperar dados diretamente de snapshots.

Utilize o comando volume snapshot restore da CLI do ONTAP para restaurar um volume a um estado registrado em um snapshot anterior.

cluster1::*> volume snapshot restore -vserver vs0 -volume vol3 -snapshot vol3_snap_archive
Observação Ao restaurar uma cópia de snapshot, a configuração de volume existente é sobrescrita. As alterações feitas nos dados do volume após a criação da cópia instantânea serão perdidas.

Restauração de volume in-place a partir de um snapshot

O Trident proporciona restauração de volume rápida e in situ a partir de uma imagem instantânea usando o TridentActionSnapshotRestore (TASR) CR. Essa solicitação de configuração (CR) funciona como uma ação imperativa do Kubernetes e não persiste após a conclusão da operação.

O Trident suporta a restauração de snapshots no ontap-san , ontap-san-economy , ontap-nas , ontap-nas-flexgroup , azure-netapp-files , gcp-cvs , google-cloud-netapp-volumes , e solidfire-san motoristas.

Antes de começar

Você precisa ter um PVC encadernado e um snapshot de volume disponível.

  • Verifique se o status do PVC está vinculado.

    kubectl get pvc
  • Verifique se o snapshot do volume está pronto para uso.

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

    Observação O TASR CR deve estar em um namespace onde o PVC e o 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 a solicitação de restauração (CR) para restaurar a partir do snapshot. Este exemplo restaura a partir de um snapshot. pvc1 .

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

O Trident restaura os dados a partir do snapshot. Você pode verificar o status da restauração do 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á novamente a operação automaticamente em caso de falha. Você precisará repetir a operação.

  • Usuários do Kubernetes sem acesso de administrador podem precisar de permissão do administrador para criar um CR do TASR em seu namespace de aplicação.

Excluir um PV com snapshots associados

Ao excluir um Volume Persistente com snapshots associados, o volume Trident correspondente é atualizado para o estado "Excluindo". Remova os snapshots de volume para excluir o volume Trident .

Implante um controlador de instantâneo de volume

Se a sua distribuição Kubernetes não incluir o controlador de snapshots e os CRDs, você pode implantá-los da seguinte forma.

Passos
  1. Criar CRDs de snapshot 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 de 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 atualizar namespace para o seu espaço de nomes.