Proteja máquinas virtuais KubeVirt com Trident Protect
Trident Protect permite que você faça backup e restaure máquinas virtuais (VMs) KubeVirt em execução na Virtualização OpenShift. Você pode proteger todas as VMs em um ou mais namespaces de uma vez, ou usar o campo includedVirtualMachines para selecionar VMs específicas pelo nome. Trident Protect coleta automaticamente todos os recursos dependentes da VM durante o backup e, durante a restauração, você pode recuperar todo o arquivo ou restaurar VMs individualmente.
KubeVirt modos de proteção
Trident Protect oferece duas maneiras de definir quais KubeVirt VMs proteger. Escolha um modo ao definir um aplicativo:
| Modo | Campo | Descrição |
|---|---|---|
Baseado em namespace |
|
Proteja todos os recursos correspondentes em um ou mais namespaces. Use um |
Com escopo de VM |
|
Proteja máquinas virtuais KubeVirt específicas por namespace e nome. Use este modo quando as máquinas virtuais estiverem distribuídas por namespaces ou quando você não quiser proteger todos os recursos de um namespace. |
Você deve especificar exatamente um campo (includedNamespaces ou includedVirtualMachines) no ApplicationSpec. Você não pode usar ambos na mesma aplicação.
Ambos os modos suportam filtragem adicional:
-
Use
resourceFilterpara incluir ou excluir recursos específicos. -
Use
includedClusterScopedResourcespara incluir recursos compatíveis com escopo de cluster, comoStorageClassobjetos.
|
|
Trident Protect pode congelar e descongelar os sistemas de arquivos de máquinas virtuais KubeVirt durante operações de proteção de dados para garantir a consistência. Para detalhes de configuração, consulte "Proteção de dados com máquinas virtuais do KubeVirt". |
Recursos coletados durante backup e snapshot
Ao criar um backup ou snapshot para um aplicativo que inclui KubeVirt VMs, Trident Protect coleta os recursos de VM selecionados e descobre automaticamente seus recursos dependentes.
O comportamento de coleta se aplica em dois casos:
-
Aplicações com escopo de VM que usam
includedVirtualMachines. -
Aplicações baseadas em namespaces que contêm KubeVirt
VirtualMachinerecursos.
Coleção com escopo de VM
Para aplicações com escopo de máquina virtual (VM), Trident Protect inicia com cada VirtualMachine listada em includedVirtualMachines e descobre os recursos dependentes necessários para restaurar essa VM.
| Tipo de recurso | Escopo | Como é descoberto |
|---|---|---|
|
Com namespace |
Correspondência direta da lista |
|
Com namespace |
Mesmo namespace e nome da VM, se a VM estiver em execução. |
|
Com namespace |
Referenciado por |
|
Cluster |
Referenciado por |
|
Com namespace |
Referenciado por |
|
Cluster |
Referenciado por |
|
Com namespace |
Referenciado por |
|
Com namespace |
Descoberto a partir de PVCs de suporte de DataVolume, que usam o mesmo nome que o DataVolume; referências diretas de PVC em |
|
Cluster |
Descoberto a partir do PV de suporte para cada PVC coletado usando |
|
Com namespace |
Descoberto a partir de segredos de volume em |
|
Com namespace |
Descoberto a partir do volume ConfigMaps em |
|
Com namespace |
Descoberto a partir de `serviceAccount.serviceAccountName`referências de volume. |
|
Com namespace |
Descoberto em redes Multus |
|
Com namespace |
Descoberto para |
Classe de armazenamento, volumes Trident e backends Trident |
Cluster |
Coletados da mesma forma que os aplicativos baseados em namespace, com base nos PVCs descobertos para a VM. |
|
|
Após a coleta de todos os recursos com escopo de máquina virtual e namespace, Trident Protect aplica o padrão resourceFilter, caso esteja configurado. A coleta de recursos com escopo de cluster prossegue normalmente.
|
Coleção baseada em namespace
Para aplicações baseadas em namespaces, Trident Protect examina os namespaces selecionados e coleta todos os recursos correspondentes. Se algum KubeVirt VirtualMachine objeto for encontrado, Trident Protect coleta automaticamente seus recursos dependentes, incluindo tipos de instância, preferências e virt-launcher Pods, da mesma forma que faz para aplicações com escopo de máquina virtual.
Isso significa que os recursos específicos da VM são incluídos no seu backup ou snapshot mesmo quando o aplicativo é definido com includedNamespaces.
Proteja máquinas virtuais usando definições de aplicativos baseadas em namespace
Ao criar um aplicativo baseado em namespaces, Trident Protect examina os namespaces selecionados e coleta todos os recursos, incluindo quaisquer KubeVirt VMs. Para cada máquina virtual encontrada, Trident Protect também coleta os recursos dependentes necessários para fazer backup e restaurar essa máquina virtual.
Exemplo de CR de aplicação baseada em namespace:
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: <application_name>
namespace: <application_namespace>
spec:
includedNamespaces:
- namespace: <vm_namespace>
Após criar o aplicativo, use os fluxos de trabalho padrão do Trident Protect para backups e snapshots:
-
Para exemplos de snapshots em YAML, veja "Crie um snapshot sob demanda".
-
Para exemplos de YAML de backup, consulte "Crie um backup sob demanda".
Comportamento de restauração para aplicativos de máquina virtual baseados em namespace
Como os aplicativos baseados em namespaces coletam recursos dos namespaces selecionados, o backup ou snapshot pode incluir objetos de tempo de execução do KubeVirt e metadados gerenciados pelo KubeVirt. Alguns desses objetos não devem ser restaurados diretamente porque representam o estado de tempo de execução do cluster de origem.
Durante a restauração, Trident Protect aplica transformações compatíveis com KubeVirt para remover os metadados do cluster de origem e ignorar recursos transitórios do KubeVirt. Isso ajuda o KubeVirt a recriar a máquina virtual corretamente no ambiente restaurado.
| Recurso | Transformar |
|---|---|
VirtualMachine |
Remove rótulos e anotações que começam com |
VirtualMachineInstance |
Remove rótulos e anotações que começam com |
VirtualMachineInstanceMigration |
Ignorado e não restaurado. |
VirtualMachineSnapshot |
Ignorado e não restaurado. |
VirtualMachineSnapshotContent |
Ignorado e não restaurado. |
Pod ( |
Ignorado quando o pod possui o |
|
|
Trident Protect restaura os recursos do KubeVirt em uma ordem definida para evitar problemas de dependência. CDI DataVolumes (cdi.kubevirt.io são restaurados primeiro para que os dados de disco da máquina virtual estejam disponíveis antes da criação dos objetos da máquina virtual. Depois disso, VirtualMachines (kubevirt.io são restauradas antes de VirtualMachineInstances.
|
Proteção dinâmica de VM com seletores de rótulos
Se você deseja proteger máquinas virtuais dinamicamente sem listar o nome de cada máquina virtual, use definições de aplicativos baseadas em namespace com seletores de rótulo.
Apenas o VirtualMachine CR precisa de rótulos. Recursos dependentes, como DataVolumes, PVCs, Segredos e ConfigMaps, são coletados automaticamente.
-
Rotule as CRs da máquina virtual com um rótulo compartilhado:
kubectl label virtualmachine <vm_name 1> app=<label_value> -n <vm_namespace> kubectl label virtualmachine <vm_name_2> app=<label_value> -n <vm_namespace> -
Crie um CR de aplicativo com
includedNamespacese umlabelSelector:apiVersion: protect.trident.netapp.io/v1 kind: Application metadata: name: <application_name> namespace: <application_namespace> spec: includedNamespaces: - namespace: <vm_namespace> labelSelector: matchLabels: app: <label_value> -
Crie backups e restaurações usando o fluxo de trabalho padrão do Trident Protect.
Detalhes adicionais:
-
Você pode adicionar ou remover VMs da proteção a qualquer momento alterando os rótulos:
kubectl label virtualmachine <vm_name_to_add> app=<label_value> -n <vm_namespace>
kubectl label virtualmachine <vm_name_to_remove> app=<different_label_value> -n <vm_namespace>
-
Você também pode usar seletores de rótulo em vários namespaces:
spec:
includedNamespaces:
- namespace: <vm_namespace_1>
labelSelector:
matchLabels:
<label_key>: <label_value>
- namespace: <vm_namespace_2>
labelSelector:
matchLabels:
<label_key>: <label_value>
Proteja VMs específicas com includedVirtualMachines
Use includedVirtualMachines quando você quiser proteger um conjunto nomeado de VirtualMachines em um ou mais namespaces e restaurar seletivamente VMs específicas de um arquivamento.
Tanto a solicitação de alteração (CR) quanto a restauração utilizam o mesmo formato de seletor includedVirtualMachines.
Utilize este seletor em diferentes contextos:
-
Em um CR de aplicação, ele define quais VMs estão protegidas.
-
Em uma solicitação de restauração (CR), define quais máquinas virtuais (VMs) são restauradas a partir do backup ou do arquivamento de Snapshot.
|
|
Na restauração de CRs, includedVirtualMachines é opcional. Se você não incluir este campo, todo o arquivamento será restaurado. Quando especificado, somente as VMs listadas e seus recursos dependentes serão restaurados.
|
O YAML abaixo mostra a estrutura do seletor compartilhado:
includedVirtualMachines:
- namespace: <vm_namespace_1>
names:
- <vm_name_1>
- <vm_name_2>
- namespace: <vm_namespace_2>
names:
- <vm_name_3>
|
|
Várias entradas em includedVirtualMachines podem referenciar namespaces diferentes, o que possibilita definições e restaurações de aplicativos com reconhecimento de máquina virtual em múltiplos namespaces.
|
| Campo | Tipo | Descrição |
|---|---|---|
namespace |
cadeia de carateres |
Namespace do Kubernetes que contém os objetos da máquina virtual de destino. |
nomes |
lista de strings |
Um ou mais nomes de máquinas virtuais nesse namespace. |
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: <application_name>
namespace: <application_namespace>
spec:
includedVirtualMachines:
- namespace: <vm_namespace_1>
names:
- <vm_name_1>
- <vm_name_2>
- namespace: <vm_namespace_2>
names:
- <vm_name_3>
includedClusterScopedResources:
- group: storage.k8s.io
kind: StorageClass
Restaurar VMs específicas do KubeVirt
Você pode usar includedVirtualMachines em CRs de restauração para restaurar apenas as KubeVirt VMs selecionadas de um backup, Snapshot ou arquivamento de Snapshot replicado.
Quando includedVirtualMachines é especificado em um CR de restauração, Trident Protect restaura apenas as VirtualMachines listadas e seus recursos dependentes, como VirtualMachineInstance, DataVolume, PersistentVolumeClaim, PersistentVolume, Secret, ConfigMap, ServiceAccount e outros objetos relacionados à máquina virtual.
Se você não especificar `includedVirtualMachines`na CR de restauração, o Trident Protect restaura o arquivamento completo de acordo com a configuração da CR de restauração.
CRs de restauração e comandos CLI compatíveis
A tabela a seguir lista os CRs de restauração compatíveis includedVirtualMachines e seus respectivos comandos da CLI.
| Restaurar CR | Comando CLI | Descrição |
|---|---|---|
|
|
Restaura a partir de um backup para mapeamentos de namespace novos ou diferentes. Suporta |
|
|
Restaura a partir de um backup no namespace ou namespaces originais. |
|
|
Restaura a partir de um snapshot para mapeamentos de namespace novos ou diferentes. Suporta |
|
|
Restaura a partir de um Snapshot no namespace ou namespaces originais. |
|
Somente YAML ou use o comando CLI compatível se disponível em seu ambiente |
Restaura a partir de um snapshot replicado. Suporta |
|
|
A tridentctl-protect`CLI não possui uma flag para `includedVirtualMachines`em comandos de restauração. Para restaurar VMs específicas, você deve aplicar um arquivo YAML de restauração CR diretamente usando `kubectl apply. Você pode escrever o YAML do zero ou usar a CLI com --dry-run --output yaml`para gerar um arquivo inicial, adicionar o campo `includedVirtualMachines em spec, e então aplicá-lo.
|
Comportamento de restauração com escopo de VM
O campo includedVirtualMachines em um CR de restauração usa o mesmo formato de seletor que o CR do aplicativo:
includedVirtualMachines:
- namespace: <source_vm_namespace>
names:
- <vm_name_1>
- <vm_name_2>
Para CRs de restauração, os valores de namespace includedVirtualMachines referem-se aos namespaces de origem conforme existem no backup, Snapshot ou arquivamento de Snapshot replicado.
Se você usar namespaceMapping, o Trident Protect primeiro seleciona as máquinas virtuais solicitadas do arquivamento de origem e, em seguida, aplica os mapeamentos de namespace durante a restauração. Se você usar storageClassMapping, o Trident Protect aplica os mapeamentos de classe de armazenamento durante a fase de transformação da restauração.
Gerar YAML de restauração com a CLI
Você pode usar tridentctl-protect para gerar um CR de restauração base e, em seguida, editar o YAML para adicionar includedVirtualMachines.
tridentctl-protect create <restore_command> <restore_name> \
<restore_options> \
--dry-run --output yaml > <restore_name>.yaml
Edite o arquivo YAML gerado e adicione o campo includedVirtualMachines em spec, depois aplique o arquivo:
kubectl apply -f <restore_name>.yaml
Exemplo: defina um aplicativo baseado em máquina virtual
O seguinte aplicativo protege três máquinas virtuais específicas em dois namespaces.
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
name: production-vms
namespace: prod
spec:
includedVirtualMachines:
- namespace: prod
names:
- app-server
- database-server
- namespace: monitoring
names:
- prometheus-vm
includedClusterScopedResources:
- group: storage.k8s.io
kind: StorageClass
Exemplo: criar um backup
A criação de um backup para um aplicativo baseado em máquina virtual utiliza o backup CR padrão. Não são necessários campos específicos de máquina virtual no backup CR.
apiVersion: protect.trident.netapp.io/v1
kind: Backup
metadata:
name: daily-backup
namespace: prod
spec:
applicationRef: production-vms
appVaultRef: s3-vault
Exemplo: restaurar uma única máquina virtual a partir de um backup
O exemplo a seguir restaura apenas database-server do arquivamento de backup. As outras VMs no arquivamento, como app-server e prometheus-vm, são ignoradas.
apiVersion: protect.trident.netapp.io/v1
kind: BackupRestore
metadata:
name: restore-db-only
namespace: prod-vms-restore
spec:
appVaultRef: s3-vault
appArchivePath: backups/production-vms/2026-03-10T00-00-00Z
namespaceMapping:
- source: prod
destination: prod-dr
includedVirtualMachines:
- namespace: prod
names:
- database-server
kubectl apply -f restore-db-only.yaml
Somente database-server e seus recursos dependentes, como DataVolumes, PVCs, PVs, Secrets, ConfigMaps e recursos relacionados do KubeVirt, são restaurados.
Exemplo: restaurar uma única máquina virtual no local a partir de um backup
O exemplo a seguir restaura apenas `database-server`no namespace original a partir do arquivamento de backup.
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
name: ipr-db-only
namespace: prod
spec:
appVaultRef: s3-vault
appArchivePath: backups/production-vms/2026-03-10T00-00-00Z
includedVirtualMachines:
- namespace: prod
names:
- database-server
kubectl apply -f ipr-db-only.yaml
Exemplo: restaurar uma única máquina virtual a partir de um Snapshot
O exemplo a seguir restaura apenas ubuntu-vm-blue-a627be38 de um arquivamento de Snapshot.
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
name: blue-vm-snap-restore
namespace: blue
spec:
appVaultRef: my-appvault
appArchivePath: snapshots/protectctl-blue-vm/snap-1
includedVirtualMachines:
- namespace: blue
names:
- ubuntu-vm-blue-a627be38
kubectl apply -f blue-vm-snap-restore.yaml
Combine a restauração da máquina virtual com outros filtros
Você pode usar includedVirtualMachines junto com resourceFilter, namespaceMapping e storageClassMapping no mesmo CR de restauração para ajustar com precisão o que será restaurado.
Ao adicionar um resourceFilter, Trident Protect primeiro seleciona as VMs listadas em includedVirtualMachines e seus recursos dependentes. Em seguida, aplica o filtro de recursos para restringir ainda mais o que está incluído ou excluído desses resultados.
spec:
includedVirtualMachines:
- namespace: <vm_namespace>
names:
- <vm_name>
resourceFilter:
resourceSelectionCriteria: Include
resourceMatchers:
- kinds: ["PersistentVolumeClaim"]
names: ["<pvc_name>"]
Para BackupRestore, SnapshotRestore e ReplicateSnapshotRestore, namespaceMapping e storageClassMapping funcionam junto com includedVirtualMachines. As referências de namespace em includedVirtualMachines correspondem aos namespaces de origem conforme aparecem no arquivamento. Os mapeamentos de namespace e classe de armazenamento são aplicados durante a fase de transformação de restauração após a conclusão da filtragem.
Para obter detalhes sobre o comportamento de restauração, consulte "Restaure aplicativos usando o Trident Protect.".
Crie um aplicativo com escopo de máquina virtual usando a CLI
Use a --virtual-machines flag para restringir o escopo de um aplicativo a KubeVirt VMs específicas em vez de namespaces inteiros. A --virtual-machines flag é mutuamente exclusiva com --namespaces.
-
Crie a aplicação executando um dos seguintes comandos, substituindo os valores entre colchetes pelas informações do seu ambiente. O formato para o
--virtual-machinesparâmetro é<namespace>(<vm_name>). Para várias VMs, use nomes separados por vírgulas dentro dos parênteses:-
Uma única máquina virtual em um namespace:
tridentctl-protect create application <application_name> \ -n <application_namespace> \ --virtual-machines "<vm_namespace>(<vm_name>)" -
Múltiplas máquinas virtuais em diferentes namespaces:
tridentctl-protect create application <application_name> \ -n <application_namespace> \ --virtual-machines "<vm_namespace_1>(<vm_name_1>,<vm_name_2>),<vm_namespace_2>(<vm_name_3>)"
-