Skip to main content
NetApp public and hybrid cloud solutions
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.

Proteja VMs no Red Hat OpenShift Virtualization usando Trident Protect

Colaboradores kevin-hoke

Proteja VMs no OpenShift Virtualization usando snapshots e backup. Este procedimento inclui a criação de um AppVault usando o armazenamento de objetos ONTAP S3, a configuração do Trident Protect para capturar dados de VM, incluindo objetos de recursos do Kubernetes, volumes persistentes e imagens internas, e a restauração dos dados quando necessário.

As máquinas virtuais no ambiente de virtualização OpenShift são aplicativos em contêineres executados nos nós de trabalho da sua plataforma OpenShift Container. É importante proteger os metadados da VM, bem como os discos persistentes das VMs, para que, quando eles forem perdidos ou corrompidos, você possa recuperá-los.

Os discos persistentes das VMs de virtualização OpenShift podem ser apoiados pelo armazenamento ONTAP integrado ao cluster OpenShift usando"Trident CSI" . Nesta seção usamos"Trident protege" para criar snapshots e backups de VMs, incluindo seus volumes de dados no ONTAP Object Storage.

Em seguida, restauramos a partir de um snapshot ou de um backup quando necessário.

O Trident Protect permite snapshots, backups, restaurações e recuperação de desastres de aplicativos e VMs em um cluster OpenShift. Para VMs do OpenShift Virtualization, os dados que podem ser protegidos com o Trident Protect incluem objetos de recursos do Kubernetes associados às VMs, volumes persistentes e imagens internas.

A seguir estão as versões dos vários componentes usados nos exemplos desta seção

Criar App Vault para armazenamento de objetos

Criar AppVault

Antes de criar snapshots e backups para um aplicativo ou uma VM, um Object Storage deve ser configurado no Trident Protect para armazenar snapshots e backups. Isso é feito usando o bucket CR. Somente administradores podem criar um CR de bucket e configurá-lo. O bucket CR é conhecido como AppVault no Trident Protect. Os objetos do AppVault são a representação declarativa do fluxo de trabalho do Kubernetes de um bucket de armazenamento. Um AppVault CR contém as configurações necessárias para que um bucket seja usado em operações de proteção, como backups, snapshots, operações de restauração e replicação do SnapMirror .

Neste exemplo, mostraremos o uso do ONTAP S3 como armazenamento de objetos. Aqui está o fluxo de trabalho para criar o AppVault CR para o ONTAP S3: 1. Crie um servidor de armazenamento de objetos S3 no SVM no cluster ONTAP . 2. Crie um bucket no Object Store Server. 3. Crie um usuário S3 no SVM. Mantenha a chave de acesso e a chave secreta em um local seguro. 4. No OpenShift, crie um segredo para armazenar as credenciais do ONTAP S3. 5. Crie um objeto AppVault para o ONTAP S3

Configurar o Trident Protect AppVault para ONTAP S3

# alias tp='tridentctl-protect'

# cat appvault-secret.yaml
apiVersion: v1
stringData:
  accessKeyID: "<access key of S3>"
  secretAccessKey: "<secret access key of S3>"
# you can also provide base 64 encoded values instead of string values
#data:
# base 64 encoded values
#  accessKeyID: < base 64 encoded access key>
#  secretAccessKey: <base 64 encoded secretAccess key>
kind: Secret
metadata:
  name: appvault-secret
  namespace: trident-protect
type: Opaque

# cat appvault.yaml
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
  name: ontap-s3-appvault
  namespace: trident-protect
spec:
  providerConfig:
    azure:
      accountName: ""
      bucketName: ""
      endpoint: ""
    gcp:
      bucketName: ""
      projectID: ""
    s3:
      bucketName: trident-protect
      endpoint: <lif for S3 access>
      secure: "false"
      skipCertValidation: "true"
  providerCredentials:
    accessKeyID:
      valueFromSecret:
        key: accessKeyID
        name: appvault-secret
    secretAccessKey:
      valueFromSecret:
        key: secretAccessKey
        name: appvault-secret
  providerType: OntapS3

# oc create -f appvault-secret.yaml -n trident-protect
# oc create -f appvault.yaml -n trident-protect

ONTAP S3 Appvault criado

Criar uma VM no OpenShift Virtualization

Criar uma VM no OpenShift Virtualization

As capturas de tela a seguir mostram a criação da VM (demo-fedora no namespace demo) a partir do console usando o modelo. O disco raiz escolhe a classe de armazenamento padrão automaticamente, portanto, verifique se a classe de armazenamento padrão está definida corretamente. Nesta configuração, a classe de armazenamento padrão é sc-zonea-san. Ao criar o disco adicional, certifique-se de escolher a classe de armazenamento sc-zonea-san e marcar a caixa de seleção "Aplicar configurações de armazenamento otimizadas". Isso definirá os modos de acesso como RWX e o modo de volume como Bloqueio.

Observação O Trident suporta o modo de acesso RWX no modo Block Volume para SAN (iSCSI, NVMe/TCP e FC). (É o modo de acesso padrão para NAS). O modo de acesso RWX é necessário se você precisar fazer a migração ao vivo das VMs posteriormente.

classe de armazenamento padrão

criar VM fedora

modelo padrão

personalizar

Adicionar disco

disco adicionado

vm, pods e pvc criados

Criar um aplicativo

Criar aplicativo

Crie um aplicativo de proteção Trident para a VM

No exemplo, o namespace de demonstração tem uma VM e todos os recursos do namespace são incluídos ao criar o aplicativo.

# alias tp='tridentctl-protect'
# tp create app demo-vm --namespaces demo -n demo --dry-run > app.yaml

# cat app.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
  creationTimestamp: null
  name: demo-vm
  namespace: demo
spec:
  includedNamespaces:
  - namespace: demo
# oc create -f app.yaml -n demo

Aplicativo criado

Proteja o aplicativo criando um backup

Criar backups

Criar um backup sob demanda

Crie um backup para o aplicativo (demo-vm) criado anteriormente que inclua todos os recursos no namespace demo. Forneça o nome do appvault onde os backups serão armazenados.

# tp create backup demo-vm-backup-on-demand --app demo-vm --appvault ontap-s3-appvault -n demo
Backup "demo-vm-backup-on-demand" created.

Backup sob demanda criado

Crie backups conforme uma programação

Crie um cronograma para os backups especificando a granularidade e o número de backups a serem mantidos.

# tp create schedule backup-schedule1 --app demo-vm --appvault ontap-s3-appvault --granularity Hourly --minute 45 --backup-retention 1 -n demo --dry-run>backup-schedule-demo-vm.yaml
schedule.protect.trident.netapp.io/backup-schedule1 created

#cat backup-schedule-demo-vm.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
  creationTimestamp: null
  name: backup-schedule1
  namespace: demo
spec:
  appVaultRef: ontap-s3-appvault
  applicationRef: demo-vm
  backupRetention: "1"
  dayOfMonth: ""
  dayOfWeek: ""
  enabled: true
  granularity: Hourly
  hour: ""
  minute: "45"
  recurrenceRule: ""
  snapshotRetention: "0"
status: {}
# oc create -f backup-schedule-demo-vm.yaml -n demo

Agendamento de backup criado

Backups criados sob demanda e conforme agendamento

Restaurar do backup

Restaurar de backups

Restaurar a VM para o mesmo namespace

No exemplo, o backup demo-vm-backup-on-demand contém o backup com o demo-app para a VM do Fedora.

Primeiro, exclua a VM e certifique-se de que os PVCs, o pod e os objetos da VM sejam excluídos do namespace "demo".

fedora-vm excluído

Agora, crie um objeto de restauração de backup no local.

# tp create bir demo-fedora-restore --backup demo/demo-vm-backup-on-demand -n demo --dry-run>vm-demo-bir.yaml

# cat vm-demo-bir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
  annotations:
    protect.trident.netapp.io/max-parallel-restore-jobs: "25"
  creationTimestamp: null
  name: demo-fedora-restore
  namespace: demo
spec:
  appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/backups/demo-vm-backup-on-demand_f6af3513-9739-480e-88c7-4cca45808a80
  appVaultRef: ontap-s3-appvault
  resourceFilter: {}
status:
  postRestoreExecHooksRunResults: null
  state: ""

# oc create -f vm-demo-bir.yaml -n demo
backupinplacerestore.protect.trident.netapp.io/demo-fedora-restore created

bir criou

Verifique se a VM, os pods e os PVCs foram restaurados

VM restaurada criada

Restaurar a VM para um namespace diferente

Primeiro, crie um novo namespace para o qual você deseja restaurar o aplicativo, neste exemplo, demo2. Em seguida, crie um objeto de restauração de backup

# tp create br demo2-fedora-restore --backup demo/hourly-4c094-20250312154500 --namespace-mapping demo:demo2 -n demo2 --dry-run>vm-demo2-br.yaml

# cat vm-demo2-br.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupRestore
metadata:
  annotations:
    protect.trident.netapp.io/max-parallel-restore-jobs: "25"
  creationTimestamp: null
  name: demo2-fedora-restore
  namespace: demo2
spec:
  appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/backups/hourly-4c094-20250312154500_aaa14543-a3fa-41f1-a04c-44b1664d0f81
  appVaultRef: ontap-s3-appvault
  namespaceMapping:
  - destination: demo2
    source: demo
  resourceFilter: {}
status:
  conditions: null
  postRestoreExecHooksRunResults: null
  state: ""
# oc create -f vm-demo2-br.yaml -n demo2

br criado

Verifique se a VM, os pods e os pvcs foram criados no novo namespace demo2.

VM no novo namespace

Proteja o aplicativo usando Snapshots

Criar instantâneos

Crie um snapshot sob demanda Crie um snapshot para o aplicativo e especifique o appvault onde ele precisa ser armazenado.

# tp create snapshot demo-vm-snapshot-ondemand --app demo-vm --appvault ontap-s3-appvault -n demo --dry-run
# cat demo-vm-snapshot-on-demand.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Snapshot
metadata:
  creationTimestamp: null
  name: demo-vm-snapshot-ondemand
  namespace: demo
spec:
  appVaultRef: ontap-s3-appvault
  applicationRef: demo-vm
  completionTimeout: 0s
  volumeSnapshotsCreatedTimeout: 0s
  volumeSnapshotsReadyToUseTimeout: 0s
status:
  conditions: null
  postSnapshotExecHooksRunResults: null
  preSnapshotExecHooksRunResults: null
  state: ""

# oc create -f demo-vm-snapshot-on-demand.yaml
snapshot.protect.trident.netapp.io/demo-vm-snapshot-ondemand created

instantâneo sob demanda

Crie um cronograma para instantâneos Crie um cronograma para os instantâneos. Especifique a granularidade e o número de instantâneos a serem retidos.

# tp create Schedule snapshot-schedule1 --app demo-vm --appvault ontap-s3-appvault --granularity Hourly --minute 50 --snapshot-retention 1 -n demo --dry-run>snapshot-schedule-demo-vm.yaml

# cat snapshot-schedule-demo-vm.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
  creationTimestamp: null
  name: snapshot-schedule1
  namespace: demo
spec:
  appVaultRef: ontap-s3-appvault
  applicationRef: demo-vm
  backupRetention: "0"
  dayOfMonth: ""
  dayOfWeek: ""
  enabled: true
  granularity: Hourly
  hour: ""
  minute: "50"
  recurrenceRule: ""
  snapshotRetention: "1"
status: {}

# oc create -f snapshot-schedule-demo-vm.yaml
schedule.protect.trident.netapp.io/snapshot-schedule1 created

agendamento para instantâneos

instantâneo agendado

Restaurar do Snapshot

Restaurar do Snapshot

Restaurar a VM do snapshot para o mesmo namespace Exclua a VM demo-fedora do namespace demo2.

excluir vm

Crie um objeto de restauração de snapshot no local a partir do snapshot da VM.

# tp create sir demo-fedora-restore-from-snapshot --snapshot demo/demo-vm-snapshot-ondemand -n demo --dry-run>vm-demo-sir.yaml

# cat vm-demo-sir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotInplaceRestore
metadata:
  creationTimestamp: null
  name: demo-fedora-restore-from-snapshot
  namespace: demo
spec:
  appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/snapshots/20250318132959_demo-vm-snapshot-ondemand_e3025972-30c0-4940-828a-47c276d7b034
  appVaultRef: ontap-s3-appvault
  resourceFilter: {}
status:
  conditions: null
  postRestoreExecHooksRunResults: null
  state: ""

# oc create -f vm-demo-sir.yaml
snapshotinplacerestore.protect.trident.netapp.io/demo-fedora-restore-from-snapshot created

senhor

Verifique se a VM e seus PVCs foram criados no namespace demo.

vm restaurada no mesmo namespace

Restaurar a VM do snapshot para um namespace diferente

Exclua a VM no namespace demo2 restaurada anteriormente do backup.

Excluir VM, PVCs

Crie o objeto de restauração de snapshot a partir do snapshot e forneça o mapeamento de namespace.

# tp create sr demo2-fedora-restore-from-snapshot --snapshot demo/demo-vm-snapshot-ondemand --namespace-mapping demo:demo2 -n demo2 --dry-run>vm-demo2-sr.yaml

# cat vm-demo2-sr.yaml
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
  creationTimestamp: null
  name: demo2-fedora-restore-from-snapshot
  namespace: demo2
spec:
  appArchivePath: demo-vm_cc8adc7a-0c28-460b-a32f-0a7b3d353e13/snapshots/20250318132959_demo-vm-snapshot-ondemand_e3025972-30c0-4940-828a-47c276d7b034
  appVaultRef: ontap-s3-appvault
  namespaceMapping:
  - destination: demo2
    source: demo
  resourceFilter: {}
status:
  postRestoreExecHooksRunResults: null
  state: ""

# oc create -f vm-demo2-sr.yaml
snapshotrestore.protect.trident.netapp.io/demo2-fedora-restore-from-snapshot created

SR criado

Verifique se a VM e seus PVCs foram restaurados no novo namespace demo2.

VM restaurada em novo namespace

Restaurar uma VM específica

Selecionando VMs específicas em um namespace para criar snapshots/backups e restaurar

No exemplo anterior, tínhamos uma única VM dentro de um namespace. Ao incluir todo o namespace no backup, todos os recursos associados a essa VM foram capturados. No exemplo a seguir, adicionamos outra VM ao mesmo namespace e criamos um aplicativo apenas para essa nova VM usando um seletor de rótulos.

Crie uma nova VM (demo-centos vm) no namespace demo

VM demo-centos no namespace demo

Rotule a VM demo-centos e seus recursos associados

etiqueta demo-centos vm, pvc

Verifique se a VM demo-centos e os pvcs receberam os rótulos

rótulos vm demo-centos

demo-centos pvc tem etiquetas

Crie um aplicativo apenas para uma VM específica (demo-centos) usando o seletor de rótulos

# tp create app demo-centos-app --namespaces 'demo(category=protect-demo-centos)' -n demo --dry-run>demo-centos-app.yaml

# cat demo-centos-app.yaml

apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
  creationTimestamp: null
  name: demo-centos-app
  namespace: demo
spec:
  includedNamespaces:
  - labelSelector:
      matchLabels:
        category: protect-demo-centos
    namespace: demo
status:
  conditions: null

# oc create -f demo-centos-app.yaml -n demo
application.protect.trident.netapp.io/demo-centos-app created

demo-centos pvc tem etiquetas

O método de criação de backups e snapshots sob demanda e conforme agendamento é o mesmo mostrado anteriormente. Como o aplicativo trident-protect que está sendo usado para criar os snapshots ou backups contém apenas a VM específica do namespace, a restauração a partir deles restaura apenas uma VM específica. Um exemplo de operação de backup/restauração é mostrado abaixo.

Crie um backup de uma VM específica em um namespace usando seu aplicativo correspondente

Nas etapas anteriores, um aplicativo foi criado usando seletores de rótulos para incluir apenas a VM centos no namespace demo. Crie um backup (backup sob demanda, neste exemplo) para este aplicativo.

# tp create backup demo-centos-backup-on-demand --app demo-centos-app --appvault ontap-s3-appvault -n demo
Backup "demo-centos-backup-on-demand" created.

Backup de VM específica criado

Restaurar uma VM específica para o mesmo namespace O backup de uma VM específica (centos) foi criado usando o aplicativo correspondente. Se um backup-in-loco-restauração ou um backup-restauração for criado a partir disso, somente essa VM específica será restaurada. Exclua a VM Centos.

Centos VM presente

VM Centos excluída

Crie uma restauração de backup no local a partir do demo-centos-backup-on-demand e verifique se a VM centos foi recriada.

#tp create bir demo-centos-restore --backup demo/demo-centos-backup-on-demand -n demo
BackupInplaceRestore "demo-centos-restore" created.

criar centos vm bir

centos vm criada

Restaurar uma VM específica para um namespace diferente Crie uma restauração de backup para um namespace diferente (demo3) de demo-centos-backup-on-demand e verifique se a VM centos foi recriada.

# tp create br demo2-centos-restore --backup demo/demo-centos-backup-on-demand --namespace-mapping demo:demo3 -n demo3
BackupRestore "demo2-centos-restore" created.

criar centos vm bir

centos vm criada

Demonstração em vídeo

O vídeo a seguir mostra uma demonstração de proteção de uma VM usando Snapshots

Protegendo uma VM