Restaure aplicativos usando o Trident Protect.
Você pode usar o Trident Protect para restaurar seu aplicativo a partir de um snapshot ou backup. A restauração a partir de um snapshot existente será mais rápida ao restaurar o aplicativo no mesmo cluster.
|
|
Quando você restaura um aplicativo, todos os ganchos de execução configurados para o aplicativo são restaurados com o aplicativo. Se um gancho de execução pós-restauração estiver presente, ele será executado automaticamente como parte da operação de restauração. |
Anotações e rótulos de namespace durante operações de restauração e failover
Durante as operações de restauração e failover, rótulos e anotações no namespace de destino são feitos para corresponder aos rótulos e anotações no namespace de origem. Rótulos ou anotações do namespace de origem que não existem no namespace de destino são adicionados, e quaisquer rótulos ou anotações que já existem são sobrescritos para corresponder ao valor do namespace de origem. Rótulos ou anotações que existem apenas no namespace de destino permanecem inalterados.
|
|
Se você usar o RedHat OpenShift, é importante observar o papel crítico das anotações de namespace em ambientes OpenShift. As anotações de namespace garantem que os pods restaurados aderem às permissões apropriadas e às configurações de segurança definidas pelas restrições de contexto de segurança OpenShift (SCCs) e possam acessar volumes sem problemas de permissão. Para obter mais informações, consulte o "Documentação de restrições de contexto de segurança OpenShift". |
Você pode impedir que anotações específicas no namespace de destino sejam sobrescritas definindo a variável de ambiente do Kubernetes RESTORE_SKIP_NAMESPACE_ANNOTATIONS antes de executar a operação de restauração ou failover. Por exemplo:
kubectl set env -n trident-protect deploy/trident-protect-controller-manager RESTORE_SKIP_NAMESPACE_ANNOTATIONS=<annotation_key_to_skip_1>,<annotation_key_to_skip_2>
Se você instalou o aplicativo de origem usando o Helm com o --create-namespace bandeira, tratamento especial é dado ao name Legenda da etiqueta. Durante o processo de restauração ou failover, o Trident Protect copia esse rótulo para o namespace de destino, mas atualiza o valor para o valor do namespace de destino se o valor da origem corresponder ao namespace de origem. Se esse valor não corresponder ao namespace de origem, ele será copiado para o namespace de destino sem alterações.
Exemplo
O exemplo a seguir apresenta um namespace de origem e destino, cada um com anotações e rótulos diferentes. Você pode ver o estado do namespace de destino antes e depois da operação e como as anotações e rótulos são combinados ou substituídos no namespace de destino.
Antes da operação de restauração ou failover
A tabela a seguir ilustra o estado dos namespaces de origem e destino de exemplo antes da operação de restauração ou failover:
| Namespace | Anotações | Etiquetas |
|---|---|---|
Namespace ns-1 (fonte) |
|
|
Namespace ns-2 (destino) |
|
|
Após a operação de restauração
A tabela a seguir ilustra o estado do namespace de destino de exemplo após a operação de restauração ou failover. Algumas chaves foram adicionadas, algumas foram sobrescritas e o name rótulo foi atualizado para corresponder ao namespace de destino:
| Namespace | Anotações | Etiquetas |
|---|---|---|
Namespace ns-2 (destino) |
|
|
Restaure de um backup para um namespace diferente
Ao restaurar um backup para um namespace diferente usando um CR de BackupRestore, o Trident Protect restaura o aplicativo em um novo namespace e cria um CR de aplicativo para o aplicativo restaurado. Para proteger a aplicação restaurada, crie backups ou snapshots sob demanda, ou estabeleça um cronograma de proteção.
|
|
Restaurar um backup para um namespace diferente com recursos existentes não alterará nenhum recurso que compartilhe nomes com aqueles no backup. Para restaurar todos os recursos no backup, exclua e recrie o namespace de destino ou restaure o backup para um novo namespace. |
-
Crie o arquivo de recurso personalizado (CR) e nomeie-o
trident-protect-backup-restore-cr.yaml. -
No arquivo criado, configure os seguintes atributos:
-
metadata.name: (required) o nome deste recurso personalizado; escolha um nome único e sensível para o seu ambiente.
-
Spec.appArchivePath: O caminho dentro do AppVault onde o conteúdo do backup é armazenado. Você pode usar o seguinte comando para encontrar este caminho:
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}' -
Spec.appVaultRef: (required) o nome do AppVault onde o conteúdo de backup é armazenado.
-
spec.namespaceMapping: o mapeamento do namespace de origem da operação de restauração para o namespace de destino. Substitua
my-source-namespaceemy-destination-namespacepor informações do seu ambiente. -
Spec.storageClassMapping: O mapeamento da classe de armazenamento de origem da operação de restauração para a classe de armazenamento de destino. Substitua
destinationStorageClassesourceStorageClasspor informações do seu ambiente.--- apiVersion: protect.trident.netapp.io/v1 kind: BackupRestore metadata: name: my-cr-name namespace: my-destination-namespace spec: appArchivePath: my-backup-path appVaultRef: appvault-name namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(Opcional) se você precisar selecionar apenas determinados recursos do aplicativo para restaurar, adicione filtragem que inclua ou exclua recursos marcados com rótulos específicos:
-
ResourceFilter.resourceSelectionCriteria: (Necessário para filtragem) Use
IncludeouExcludeinclua ou exclua um recurso definido em resourceMatchers. Adicione os seguintes parâmetros resourceMatchers para definir os recursos a serem incluídos ou excluídos:-
ResourceFilter.resourceMatchers: Uma matriz de resourceMatcher objetos. Se você definir vários elementos nesse array, eles corresponderão como uma OPERAÇÃO OU, e os campos dentro de cada elemento (grupo, tipo, versão) corresponderão como uma OPERAÇÃO E.
-
ResourceMatchers[].group: (Optional) Grupo do recurso a ser filtrado.
-
ResourceMatchers[].kind: (Opcional) tipo do recurso a ser filtrado.
-
ResourceMatchers[].version: (Optional) versão do recurso a ser filtrado.
-
ResourceMatchers[].names: (Optional) nomes no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].namespaces: (Optional) namespaces no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].labelSelectors: (Optional) string de seleção de etiquetas no campo Kubernetes metadata.name do recurso, conforme definido no "Documentação do Kubernetes". Por exemplo
"trident.netapp.io/os=linux": .Por exemplo:
-
-
spec: resourceFilter: resourceSelectionCriteria: "Include" resourceMatchers: - group: my-resource-group-1 kind: my-resource-kind-1 version: my-resource-version-1 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] - group: my-resource-group-2 kind: my-resource-kind-2 version: my-resource-version-2 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] -
-
Depois de preencher o
trident-protect-backup-restore-cr.yamlficheiro com os valores corretos, aplique o CR:kubectl apply -f trident-protect-backup-restore-cr.yaml
-
Restaure o backup para um namespace diferente, substituindo valores entre parênteses por informações do seu ambiente. O
namespace-mappingargumento usa namespaces separados por dois pontos para mapear namespaces de origem para os namespaces de destino corretos no formatosource1:dest1,source2:dest2. Por exemplo:tridentctl-protect create backuprestore <my_restore_name> --backup <backup_namespace>/<backup_to_restore> --namespace-mapping <source_to_destination_namespace_mapping> -n <application_namespace>
Restaure de um backup para o namespace original
Você pode restaurar um backup para o namespace original a qualquer momento.
-
Crie o arquivo de recurso personalizado (CR) e nomeie-o
trident-protect-backup-ipr-cr.yaml. -
No arquivo criado, configure os seguintes atributos:
-
metadata.name: (required) o nome deste recurso personalizado; escolha um nome único e sensível para o seu ambiente.
-
Spec.appArchivePath: O caminho dentro do AppVault onde o conteúdo do backup é armazenado. Você pode usar o seguinte comando para encontrar este caminho:
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}' -
Spec.appVaultRef: (required) o nome do AppVault onde o conteúdo de backup é armazenado.
Por exemplo:
--- apiVersion: protect.trident.netapp.io/v1 kind: BackupInplaceRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appArchivePath: my-backup-path appVaultRef: appvault-name -
-
(Opcional) se você precisar selecionar apenas determinados recursos do aplicativo para restaurar, adicione filtragem que inclua ou exclua recursos marcados com rótulos específicos:
-
ResourceFilter.resourceSelectionCriteria: (Necessário para filtragem) Use
IncludeouExcludeinclua ou exclua um recurso definido em resourceMatchers. Adicione os seguintes parâmetros resourceMatchers para definir os recursos a serem incluídos ou excluídos:-
ResourceFilter.resourceMatchers: Uma matriz de resourceMatcher objetos. Se você definir vários elementos nesse array, eles corresponderão como uma OPERAÇÃO OU, e os campos dentro de cada elemento (grupo, tipo, versão) corresponderão como uma OPERAÇÃO E.
-
ResourceMatchers[].group: (Optional) Grupo do recurso a ser filtrado.
-
ResourceMatchers[].kind: (Opcional) tipo do recurso a ser filtrado.
-
ResourceMatchers[].version: (Optional) versão do recurso a ser filtrado.
-
ResourceMatchers[].names: (Optional) nomes no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].namespaces: (Optional) namespaces no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].labelSelectors: (Optional) string de seleção de etiquetas no campo Kubernetes metadata.name do recurso, conforme definido no "Documentação do Kubernetes". Por exemplo
"trident.netapp.io/os=linux": .Por exemplo:
-
-
spec: resourceFilter: resourceSelectionCriteria: "Include" resourceMatchers: - group: my-resource-group-1 kind: my-resource-kind-1 version: my-resource-version-1 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] - group: my-resource-group-2 kind: my-resource-kind-2 version: my-resource-version-2 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] -
-
Depois de preencher o
trident-protect-backup-ipr-cr.yamlficheiro com os valores corretos, aplique o CR:kubectl apply -f trident-protect-backup-ipr-cr.yaml
-
Restaure o backup para o namespace original, substituindo valores entre parênteses por informações do seu ambiente. O
backupargumento usa um namespace e um nome de backup no formato<namespace>/<name>. Por exemplo:tridentctl-protect create backupinplacerestore <my_restore_name> --backup <namespace/backup_to_restore> -n <application_namespace>
Restaure de um backup para um cluster diferente
Você pode restaurar um backup para um cluster diferente se houver um problema com o cluster original.
Antes de começar
Certifique-se de que os seguintes pré-requisitos são cumpridos:
-
O cluster de destino tem o Trident Protect instalado.
-
O cluster de destino tem acesso ao caminho do bucket do mesmo AppVault que o cluster de origem, onde o backup é armazenado.
-
Verifique a disponibilidade do AppVault CR no cluster de destino usando o plugin Trident Protect CLI:
tridentctl-protect get appvault --context <destination_cluster_name>Verifique se o namespace destinado à restauração do aplicativo existe no cluster de destino. -
Veja o conteúdo de backup do AppVault disponível no cluster de destino:
tridentctl-protect get appvaultcontent <appvault_name> --show-resources backup --show-paths --context <destination_cluster_name>Executar esse comando exibe os backups disponíveis no AppVault, incluindo os clusters de origem, nomes de aplicativos correspondentes, carimbos de data/hora e caminhos de arquivamento.
Exemplo de saída:
+-------------+-----------+--------+-----------------+--------------------------+-------------+ | CLUSTER | APP | TYPE | NAME | TIMESTAMP | PATH | +-------------+-----------+--------+-----------------+--------------------------+-------------+ | production1 | wordpress | backup | wordpress-bkup-1| 2024-10-30 08:37:40 (UTC)| backuppath1 | | production1 | wordpress | backup | wordpress-bkup-2| 2024-10-30 08:37:40 (UTC)| backuppath2 | +-------------+-----------+--------+-----------------+--------------------------+-------------+
-
Restaure o aplicativo para o cluster de destino usando o nome do AppVault e o caminho do arquivo:
-
Crie o arquivo de recurso personalizado (CR) e nomeie-o
trident-protect-backup-restore-cr.yaml. -
No arquivo criado, configure os seguintes atributos:
-
metadata.name: (required) o nome deste recurso personalizado; escolha um nome único e sensível para o seu ambiente.
-
Spec.appVaultRef: (required) o nome do AppVault onde o conteúdo de backup é armazenado.
-
Spec.appArchivePath: O caminho dentro do AppVault onde o conteúdo do backup é armazenado. Você pode usar o seguinte comando para encontrar este caminho:
kubectl get backups <BACKUP_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'Se o BackupRestore CR não estiver disponível, você poderá usar o comando mencionado na etapa 2 para visualizar o conteúdo do backup. -
spec.namespaceMapping: o mapeamento do namespace de origem da operação de restauração para o namespace de destino. Substitua
my-source-namespaceemy-destination-namespacepor informações do seu ambiente.Por exemplo:
apiVersion: protect.trident.netapp.io/v1 kind: BackupRestore metadata: name: my-cr-name namespace: my-destination-namespace spec: appVaultRef: appvault-name appArchivePath: my-backup-path namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] -
-
Depois de preencher o
trident-protect-backup-restore-cr.yamlficheiro com os valores corretos, aplique o CR:kubectl apply -f trident-protect-backup-restore-cr.yaml
-
Use o comando a seguir para restaurar o aplicativo, substituindo valores entre parênteses por informações do ambiente. O argumento namespace-mapping usa namespaces separados por dois pontos para mapear namespaces de origem para os namespaces de destino corretos no formato source1:dest1,source2:dest2. Por exemplo:
tridentctl-protect create backuprestore <restore_name> --namespace-mapping <source_to_destination_namespace_mapping> --appvault <appvault_name> --path <backup_path> -n <application_namespace> --context <destination_cluster_name>
Restauração de um snapshot para um namespace diferente
Você pode restaurar dados de um snapshot usando um arquivo de recurso personalizado (CR) para um namespace diferente ou para o namespace de origem original. Ao restaurar um snapshot para um namespace diferente usando um CR de SnapshotRestore, o Trident Protect restaura o aplicativo em um novo namespace e cria um CR de aplicativo para o aplicativo restaurado. Para proteger a aplicação restaurada, crie backups ou snapshots sob demanda, ou estabeleça um cronograma de proteção.
-
Crie o arquivo de recurso personalizado (CR) e nomeie-o
trident-protect-snapshot-restore-cr.yaml. -
No arquivo criado, configure os seguintes atributos:
-
metadata.name: (required) o nome deste recurso personalizado; escolha um nome único e sensível para o seu ambiente.
-
Spec.appVaultRef: (required) o nome do AppVault onde o conteúdo do instantâneo é armazenado.
-
Spec.appArchivePath: O caminho dentro do AppVault onde o conteúdo do snapshot é armazenado. Você pode usar o seguinte comando para encontrar este caminho:
kubectl get snapshots <SNAPHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}' -
spec.namespaceMapping: o mapeamento do namespace de origem da operação de restauração para o namespace de destino. Substitua
my-source-namespaceemy-destination-namespacepor informações do seu ambiente. -
Spec.storageClassMapping: O mapeamento da classe de armazenamento de origem da operação de restauração para a classe de armazenamento de destino. Substitua
destinationStorageClassesourceStorageClasspor informações do seu ambiente.--- apiVersion: protect.trident.netapp.io/v1 kind: SnapshotRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appVaultRef: appvault-name appArchivePath: my-snapshot-path namespaceMapping: [{"source": "my-source-namespace", "destination": "my-destination-namespace"}] storageClassMapping: destination: "${destinationStorageClass}" source: "${sourceStorageClass}"
-
-
(Opcional) se você precisar selecionar apenas determinados recursos do aplicativo para restaurar, adicione filtragem que inclua ou exclua recursos marcados com rótulos específicos:
-
ResourceFilter.resourceSelectionCriteria: (Necessário para filtragem) Use
IncludeouExcludeinclua ou exclua um recurso definido em resourceMatchers. Adicione os seguintes parâmetros resourceMatchers para definir os recursos a serem incluídos ou excluídos:-
ResourceFilter.resourceMatchers: Uma matriz de resourceMatcher objetos. Se você definir vários elementos nesse array, eles corresponderão como uma OPERAÇÃO OU, e os campos dentro de cada elemento (grupo, tipo, versão) corresponderão como uma OPERAÇÃO E.
-
ResourceMatchers[].group: (Optional) Grupo do recurso a ser filtrado.
-
ResourceMatchers[].kind: (Opcional) tipo do recurso a ser filtrado.
-
ResourceMatchers[].version: (Optional) versão do recurso a ser filtrado.
-
ResourceMatchers[].names: (Optional) nomes no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].namespaces: (Optional) namespaces no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].labelSelectors: (Optional) string de seleção de etiquetas no campo Kubernetes metadata.name do recurso, conforme definido no "Documentação do Kubernetes". Por exemplo
"trident.netapp.io/os=linux": .Por exemplo:
-
-
spec: resourceFilter: resourceSelectionCriteria: "Include" resourceMatchers: - group: my-resource-group-1 kind: my-resource-kind-1 version: my-resource-version-1 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] - group: my-resource-group-2 kind: my-resource-kind-2 version: my-resource-version-2 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] -
-
Depois de preencher o
trident-protect-snapshot-restore-cr.yamlficheiro com os valores corretos, aplique o CR:kubectl apply -f trident-protect-snapshot-restore-cr.yaml
-
Restaure o snapshot para um namespace diferente, substituindo valores entre parênteses por informações do seu ambiente.
-
O
snapshotargumento usa um namespace e um nome instantâneo no formato<namespace>/<name>. -
O
namespace-mappingargumento usa namespaces separados por dois pontos para mapear namespaces de origem para os namespaces de destino corretos no formatosource1:dest1,source2:dest2.Por exemplo:
tridentctl-protect create snapshotrestore <my_restore_name> --snapshot <namespace/snapshot_to_restore> --namespace-mapping <source_to_destination_namespace_mapping> -n <application_namespace> -
Restauração de um snapshot para o namespace original
Você pode restaurar um snapshot para o namespace original a qualquer momento.
-
Crie o arquivo de recurso personalizado (CR) e nomeie-o
trident-protect-snapshot-ipr-cr.yaml. -
No arquivo criado, configure os seguintes atributos:
-
metadata.name: (required) o nome deste recurso personalizado; escolha um nome único e sensível para o seu ambiente.
-
Spec.appVaultRef: (required) o nome do AppVault onde o conteúdo do instantâneo é armazenado.
-
Spec.appArchivePath: O caminho dentro do AppVault onde o conteúdo do snapshot é armazenado. Você pode usar o seguinte comando para encontrar este caminho:
kubectl get snapshots <SNAPSHOT_NAME> -n my-app-namespace -o jsonpath='{.status.appArchivePath}'--- apiVersion: protect.trident.netapp.io/v1 kind: SnapshotInplaceRestore metadata: name: my-cr-name namespace: my-app-namespace spec: appVaultRef: appvault-name appArchivePath: my-snapshot-path
-
-
(Opcional) se você precisar selecionar apenas determinados recursos do aplicativo para restaurar, adicione filtragem que inclua ou exclua recursos marcados com rótulos específicos:
-
ResourceFilter.resourceSelectionCriteria: (Necessário para filtragem) Use
IncludeouExcludeinclua ou exclua um recurso definido em resourceMatchers. Adicione os seguintes parâmetros resourceMatchers para definir os recursos a serem incluídos ou excluídos:-
ResourceFilter.resourceMatchers: Uma matriz de resourceMatcher objetos. Se você definir vários elementos nesse array, eles corresponderão como uma OPERAÇÃO OU, e os campos dentro de cada elemento (grupo, tipo, versão) corresponderão como uma OPERAÇÃO E.
-
ResourceMatchers[].group: (Optional) Grupo do recurso a ser filtrado.
-
ResourceMatchers[].kind: (Opcional) tipo do recurso a ser filtrado.
-
ResourceMatchers[].version: (Optional) versão do recurso a ser filtrado.
-
ResourceMatchers[].names: (Optional) nomes no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].namespaces: (Optional) namespaces no campo Kubernetes metadata.name do recurso a ser filtrado.
-
ResourceMatchers[].labelSelectors: (Optional) string de seleção de etiquetas no campo Kubernetes metadata.name do recurso, conforme definido no "Documentação do Kubernetes". Por exemplo
"trident.netapp.io/os=linux": .Por exemplo:
-
-
spec: resourceFilter: resourceSelectionCriteria: "Include" resourceMatchers: - group: my-resource-group-1 kind: my-resource-kind-1 version: my-resource-version-1 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] - group: my-resource-group-2 kind: my-resource-kind-2 version: my-resource-version-2 names: ["my-resource-names"] namespaces: ["my-resource-namespaces"] labelSelectors: ["trident.netapp.io/os=linux"] -
-
Depois de preencher o
trident-protect-snapshot-ipr-cr.yamlficheiro com os valores corretos, aplique o CR:kubectl apply -f trident-protect-snapshot-ipr-cr.yaml
-
Restaure o snapshot para o namespace original, substituindo valores entre parênteses por informações do seu ambiente. Por exemplo:
tridentctl-protect create snapshotinplacerestore <my_restore_name> --snapshot <snapshot_to_restore> -n <application_namespace>
Verifique o status de uma operação de restauração
Você pode usar a linha de comando para verificar o status de uma operação de restauração que está em andamento, concluiu ou falhou.
-
Use o seguinte comando para recuperar o status da operação de restauração, substituindo valores em brackes por informações do seu ambiente:
kubectl get backuprestore -n <namespace_name> <my_restore_cr_name> -o jsonpath='{.status}'