Proteja VMs no Red Hat OpenShift Virtualization usando Trident Protect
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
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.
|
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. |
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
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.
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
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".
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
Verifique se a VM, os pods e os PVCs foram restaurados
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
Verifique se a VM, os pods e os pvcs foram criados no novo namespace demo2.
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
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
Restaurar do Snapshot
Restaurar do Snapshot
Restaurar a VM do snapshot para o mesmo namespace Exclua a VM demo-fedora do namespace demo2.
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
Verifique se a VM e seus PVCs foram criados no namespace demo.
Restaurar a VM do snapshot para um namespace diferente
Exclua a VM no namespace demo2 restaurada anteriormente do backup.
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
Verifique se a VM e seus PVCs foram restaurados no novo namespace demo2.
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
Rotule a VM demo-centos e seus recursos associados
Verifique se a VM demo-centos e os pvcs receberam os rótulos
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
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.
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.
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.
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.
Demonstração em vídeo
O vídeo a seguir mostra uma demonstração de proteção de uma VM usando Snapshots