Skip to main content
NetApp container 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.

Faça backup e restaure aplicativos em contêineres em um cluster do vSphere Kubernetes Service usando o Trident Protect

Colaboradores banum-netapp

Faça backup e restaure aplicativos em contêineres em um cluster vSphere Kubernetes Service (VKS) usando snapshots e backups do Trident Protect. Este procedimento inclui a criação de um AppVault usando o ONTAP S3 storage de objetos, configurar o Trident Protect para capturar dados do aplicativo, incluindo objetos de recursos do Kubernetes e volumes persistentes, e restaurar os dados quando necessário.

Os aplicativos em contêineres executados em um cluster VKS são gerenciados como cargas de trabalho do Kubernetes em namespaces de nós de trabalho. É importante proteger tanto os metadados do aplicativo quanto os volumes persistentes para que, caso sejam perdidos ou corrompidos, você possa recuperá-los.

Os volumes persistentes de aplicações VKS podem ser suportados pelo armazenamento ONTAP integrado ao cluster VKS usando "O Trident CSI". Este procedimento utiliza "Trident Protect" para criar snapshots de aplicação, cujos metadados são armazenados no storage de objetos ONTAP enquanto os dados do snapshot do volume permanecem no backend de armazenamento, e backups, cujos dados são copiados para o storage de objetos ONTAP. Você pode restaurar a partir de um snapshot ou de um backup quando necessário.

O Trident Protect permite a criação de snapshots, backups, restauração e recuperação de desastres de aplicações em um cluster Kubernetes. Os dados que podem ser protegidos com o Trident Protect incluem objetos de recursos do Kubernetes associados às aplicações e seus volumes persistentes.

A seguir estão as versões dos diversos componentes utilizados nos exemplos desta seção

Instale o Trident Protect no cluster Kubernetes vSphere

Instalar Trident Protect

Use o Helm para instalar o Trident Protect no cluster do vSphere Kubernetes Service. Os exemplos nesta seção usam tridentctl-protect o Trident Protect CLI. Instale-o seguindo as instruções no "Documentação da CLI do Trident Protect". Métodos adicionais de instalação do Trident Protect estão documentados no "Documentação do Trident Protect".

Primeiro, crie e nomeie o `trident-protect`namespace. O `enforce=privileged`rótulo é necessário porque o Trident Protect executa cargas de trabalho privilegiadas. Sem ele, o controlador de admissão de segurança de pods do Kubernetes impedirá a inicialização dos pods do Trident Protect.

kubectl create namespace trident-protect
kubectl label namespace trident-protect pod-security.kubernetes.io/enforce=privileged

Em seguida, adicione o repositório Helm e instale o Trident Protect no namespace.

helm repo add netapp-trident-protect https://netapp.github.io/trident-protect-helm-chart
helm install trident-protect netapp-trident-protect/trident-protect --set clusterName=<name-of-cluster> --version 100.2606.0 --namespace trident-protect
Observação Se os pods do Trident Protect não iniciarem com um erro de admissão PodSecurity, é possível que os rótulos de segurança do pod não tenham sido aplicados ao namespace trident-protect antes da instalação. Use --overwrite para reaplicá-los e, em seguida, verifique se os pods iniciam.
kubectl label namespace trident-protect pod-security.kubernetes.io/enforce=privileged --overwrite
kubectl get pods -n trident-protect
Os pods do Trident Protect em execução
Os pods do Trident Protect em execução

Crie um App Vault para storage de objetos.

Criar AppVault

Antes de criar snapshots e backups para um aplicativo, você deve configurar o storage de objetos no Trident Protect. Isso é feito criando um CR AppVault. Somente administradores podem criar e configurar um CR AppVault.

Os objetos AppVault são a representação de recurso personalizado do Kubernetes de um bucket de armazenamento. Um CR de AppVault contém as configurações necessárias para que um bucket seja usado em operações de proteção, como backup, snapshots, operações de restauração e replicação do SnapMirror.

As etapas a seguir criam um AppVault CR configurado para o ONTAP S3: Crie um servidor de armazenamento de objetos S3 na SVM no cluster ONTAP. . Crie um bucket no servidor de armazenamento de objetos. . Crie um usuário S3 na SVM. Guarde a chave de acesso e a chave secreta em um local seguro.

+ NOTA: o Trident Protect exige que o usuário S3 tenha pelo menos PutObject, GetObject, ListBucket e DeleteObject permissões. Sem essas permissões, as operações de backup e restauração do AppVault falham com erros de acesso negado. Para obter detalhes, consulte "Documentação do Trident Protect AppVault". . No cluster VKS, crie um segredo para armazenar as credenciais do ONTAP S3. . Crie um objeto AppVault para o ONTAP S3.

Configurar o Trident Protect AppVault para o ONTAP S3

Importante O manifesto abaixo usa HTTPS com validação de certificado habilitada, o que é necessário para produção. Se o endpoint ONTAP S3 usar um certificado assinado por uma CA pública já confiável pelo cluster, nenhuma configuração de certificado adicional é necessária. Se usar um certificado autoassinado ou de uma CA interna, forneça o certificado da CA raiz personalizada usando o campo rootCA conforme mostrado no manifesto. Consulte a variante somente para laboratório no final desta seção se você precisar de uma configuração HTTP para testes isolados em ambiente de não produção.
# alias tp='tridentctl-protect'

# cat appvault-secret.yaml
apiVersion: v1
data:
  accessKeyID: <base64 encoded access key>
  secretAccessKey: <base64 encoded secret access key>
# Alternatively, remove the data section above and use:
# stringData:
#   accessKeyID: "<access key of S3>"
#   secretAccessKey: "<secret access key of S3>"
kind: Secret
metadata:
  name: ontap-s3-appvault-secret1
  namespace: trident-protect
type: Opaque

# cat appvault.yaml
apiVersion: protect.trident.netapp.io/v1
kind: AppVault
metadata:
  name: ontap-s3-appvault1
  namespace: trident-protect
spec:
  providerConfig:
    azure:
      accountName: ""
      bucketName: ""
      endpoint: ""
    gcp:
      bucketName: ""
      projectID: ""
    s3:
      bucketName: trident-protect
      endpoint: <lif for S3 access>
      secure: "true"
      skipCertValidation: "false"
      # If your ONTAP S3 endpoint uses a certificate signed by a public CA
      # already trusted by the cluster, no additional certificate config is needed.
      # If it uses a self-signed or internal CA certificate, provide the
      # root CA certificate:
      # rootCA: <root CA certificate>
  providerCredentials:
    accessKeyID:
      valueFromSecret:
        key: accessKeyID
        name: ontap-s3-appvault-secret1
    secretAccessKey:
      valueFromSecret:
        key: secretAccessKey
        name: ontap-s3-appvault-secret1
  providerType: OntapS3

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

Variante exclusiva para laboratório (HTTP, sem validação de certificado)

Utilize as seguintes s3 configurações apenas em um ambiente de laboratório isolado, onde não haja dados confidenciais. Não utilize essas configurações em produção.

    s3:
      bucketName: trident-protect
      endpoint: <lif for S3 access>
      secure: "false"
      skipCertValidation: "true"
ONTAP S3 AppVault criado

Criar um aplicativo Trident Protect

Criar um aplicativo Trident Protect

Este exemplo aborda a proteção de dados para o aplicativo de exemplo postgres, que está instalado no namespace postgres. Para obter detalhes sobre a instalação, consulte "Implemente cargas de trabalho VKS usando o armazenamento NetApp".

Observação Os PVCs de exemplo do PostgreSQL solicitam o modo de acesso RWO. O modo de acesso deve ser especificado explicitamente no manifesto do PVC; o Trident não seleciona automaticamente um modo de acesso com base no protocolo de storage. O modo RWX é compatível com PVCs baseados em NAS, e os PVCs baseados em SAN podem suportar RWX com configuração adicional. Para mais informações, consulte "Documentação do Trident Protect".

No exemplo, o namespace postgres possui um aplicativo e todos os recursos do namespace são incluídos ao criar o Trident Protect Application.

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

# cat postgres-app.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Application
metadata:
  name: postgres-app
spec:
  includedNamespaces:
  - namespace: postgres
  resourceFilter: {}
# kubectl create -f postgres-app.yaml -n postgres
O Trident Protect application foi criado

Proteja o aplicativo criando um backup

Criar backups

Criar um backup sob demanda

Crie um backup do aplicativo postgres-app criado anteriormente, incluindo todos os recursos no namespace postgres. Forneça o nome do appvault onde os backups serão armazenados.

# cat postgres-backup-on-demand.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Backup
metadata:
  name: postgres-backup-on-demand
spec:
  appVaultRef: ontap-s3-appvault1
  applicationRef: postgres-app
  cleanupSnapshot: true
  replicateSnapshot: false
kubectl create -f postgres-backup-on-demand.yaml -n postgres
Backup sob demanda criada
O estado de proteção do aplicativo é parcial

Crie backups de acordo com 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 postgres-app --appvault ontap-s3-appvault1 --granularity Hourly --minute 45 --backup-retention 1 -n postgres --dry-run>postgres-backup-schedule1.yaml

#cat postgres-backup-schedule1.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
  name: backup-schedule1
  namespace: postgres
spec:
  appVaultRef: ontap-s3-appvault1
  applicationRef: postgres-app
  backupRetention: "1"
  dayOfMonth: ""
  dayOfWeek: ""
  enabled: true
  granularity: Hourly
  hour: ""
  minute: "45"
  recurrenceRule: ""
  replicationRetention: "0"
  runImmediately: false
  snapshotRetention: "0"
# kubectl create -f postgres-backup-schedule1.yaml -n postgres
Cronograma de backup criado
Cronograma de backup

Restauração a partir do backup

Restaurar a partir de backups

Restaure o aplicativo no mesmo namespace

Neste exemplo, o backup postgres-backup-on-demand contém o backup para o postgres-app.

Antes de excluir o aplicativo, verifique se o backup que você pretende restaurar está no estado Completed correto. Um backup em andamento ou com falha não pode ser usado para restaurar o aplicativo.

kubectl get backup -n postgres

Após confirmar que o estado do backup é Completed, exclua o aplicativo postgres e certifique-se de que os PVCs e os objetos do pod sejam excluídos do namespace "postgres".

Objetos do aplicativo Postgres
Objetos do aplicativo Postgres
Objetos do aplicativo Postgres excluídos

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

# tp create bir postgres-app-restore --backup postgres/postgres-backup-on-demand -n postgres --dry-run>postgres-app-bir.yaml

# cat postgres-app-bir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: BackupInplaceRestore
metadata:
  annotations:
    protect.trident.netapp.io/max-parallel-restore-jobs: "25"
  name: postgres-app-restore
  namespace: postgres
spec:
  appArchivePath: postgres-app_314bbaf6-2ce3-4065-b3c1-ab85c7bb7c7c/backups/postgres-backup-on-demand_63efc9d1-92d7-45ce-84fe-846ce7db7b29
  appVaultRef: ontap-s3-appvault1
  cleanUpAdditionalExecHooks: true
  cleanUpArchivedExecHooks: false
  resourceFilter: {}
  runArchivedExecHooks: true

# kubectl create -f postgres-app-bir.yaml -n postgres
Restauração no local de backup criada

Verifique se a implantação do aplicativo postgres, o serviço, o pod e os PVCs foram restaurados.

Aplicativo restaurado

Restaure o aplicativo para um namespace diferente

Primeiro, crie um novo namespace para o qual você deseja restaurar o aplicativo, neste exemplo, postgres2. Um backup criado pelo agendamento agora está disponível para o aplicativo postgres-app. Use esse backup para restaurar o aplicativo para o novo namespace postgres2.

Backup por hora disponível
# tp create backuprestore --appvault ontap-s3-appvault1 --path postgres-app_314bbaf6-2ce3-4065-b3c1-ab85c7bb7c7c/backups/hourly-cbd11-20260831124500_2b57bda9-5cb0-4c8f-ae7a-20f94c23c3b9 --namespace-mapping postgres:postgres2 -n postgres2 --dry-run>postgres-app-postgres2-br.yaml
Observação Para obter o caminho do backup, use o comando kubectl get backups <backup-name> -n postgres -o jsonpath='{.status.appArchivePath}'.
Caminho de backup por hora
apiVersion: protect.trident.netapp.io/v1
kind: BackupRestore
metadata:
  annotations:
    protect.trident.netapp.io/max-parallel-restore-jobs: "25"
  name: postgres-app-z2woek
  namespace: postgres2
spec:
  appArchivePath: postgres-app_314bbaf6-2ce3-4065-b3c1-ab85c7bb7c7c/backups/hourly-cbd11-20260831124500_2b57bda9-5cb0-4c8f-ae7a-20f94c23c3b9
  appVaultRef: ontap-s3-appvault1
  cleanUpAdditionalExecHooks: true
  cleanUpArchivedExecHooks: false
  namespaceMapping:
  - destination: postgres2
    source: postgres
  resourceFilter: {}
  runArchivedExecHooks: true
  skipApplicationCreation: false

# kubectl create -f postgres-app-postgres2-br.yaml -n postgres2
Restauração de backup criada

Verifique se os objetos da aplicação postgres e os PVCs foram criados no novo namespace postgres2.

Aplicação Postgres restaurada no novo namespace

Proteja o aplicativo usando Snapshots

Criar Snapshots

Crie um snapshot sob demanda Crie um snapshot para o aplicativo e especifique o AppVault onde os metadados do snapshot serão armazenados. Os dados do snapshot do volume em si não são copiados para o storage de objetos — eles permanecem no backend de storage.

# tp create snapshot postgres-app-snapshot-ondemand --app postgres-app --appvault ontap-s3-appvault1 -n postgres --dry-run>postgres-app-snapshot-ondemand.yaml

# cat postgres-app-snapshot-ondemand.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Snapshot
metadata:
  name: postgres-app-snapshot-ondemand
  namespace: postgres
spec:
  appVaultRef: ontap-s3-appvault1
  applicationRef: postgres-app
  cleanupSnapshot: false
  completionTimeout: 0s
  volumeSnapshotsCreatedTimeout: 0s
  volumeSnapshotsReadyToUseTimeout: 0s

# kubectl create -f postgres-app-snapshot-ondemand.yaml
snapshot.protect.trident.netapp.io/postgres-app-snapshot-ondemand created
Snapshot sob demanda

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

# tp create schedule snapshot-schedule1 --app postgres-app --appvault ontap-s3-appvault1 --granularity Hourly --minute 55 --snapshot-retention 1 -n postgres --dry-run>postgres-app-snapshot-schedule1.yaml

# cat postgres-app-snapshot-schedule1.yaml
apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
  name: snapshot-schedule1
  namespace: postgres
spec:
  appVaultRef: ontap-s3-appvault1
  applicationRef: postgres-app
  backupRetention: "0"
  dayOfMonth: ""
  dayOfWeek: ""
  enabled: true
  granularity: Hourly
  hour: ""
  minute: "55"
  recurrenceRule: ""
  replicationRetention: "0"
  runImmediately: false
  snapshotRetention: "1"

# kubectl create -f postgres-app-snapshot-schedule1.yaml
schedule.protect.trident.netapp.io/snapshot-schedule1 created
agendamento e Snapshot criados em um agendamento

Restaurar a partir de Snapshot

Restaurar a partir de Snapshot

Restaure o aplicativo a partir de um Snapshot para o mesmo namespace

Antes de excluir o aplicativo, verifique se o snapshot que você pretende restaurar está no estado Completed. Um snapshot em andamento ou com falha não pode ser usado para restaurar o aplicativo.

kubectl get snapshot -n postgres

Após confirmar que o estado do snapshot é Completed, exclua os objetos do aplicativo e os PVCs para postgres do namespace postgres.

Objetos do aplicativo excluídos

Crie um objeto de restauração no local a partir do Snapshot.

# tp create sir postgres-restore-from-snapshot --snapshot postgres/hourly-f1dd9-20260831135500 -n postgres --dry-run > postgres-sir.yaml

# cat postgres-sir.yaml
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotInplaceRestore
metadata:
  name: postgres-restore-from-snapshot
  namespace: postgres
spec:
  appArchivePath: postgres-app_314bbaf6-2ce3-4065-b3c1-ab85c7bb7c7c/snapshots/20260831135500_hourly-f1dd9-20260831135500_36c2bd2a-9405-4424-88a7-75e6bbc5b315
  appVaultRef: ontap-s3-appvault1
  cleanUpAdditionalExecHooks: true
  cleanUpArchivedExecHooks: false
  resourceFilter: {}
  runArchivedExecHooks: true

# kubectl create -f postgres-sir.yaml
snapshotinplacerestore.protect.trident.netapp.io/postgres-restore-from-snapshot created

Verifique se os objetos e PVCs da aplicação são criados no namespace postgres.

Aplicativo Postgres restaurado a partir de um Snapshot

Restaurar a aplicação a partir de um Snapshot para um namespace diferente

Exclua o aplicativo no namespace postgres2 que foi restaurado anteriormente do backup.

Excluir objetos de aplicação e PVCs

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

# tp create sr postgres-sr --snapshot postgres/hourly-f1dd9-20260831135500 --namespace-mapping postgres:postgres2 -n postgres2 --dry-run>postgres-sr.yaml

# cat postgres-sr.yaml
apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
  name: postgres-sr
  namespace: postgres2
spec:
  appArchivePath: postgres-app_314bbaf6-2ce3-4065-b3c1-ab85c7bb7c7c/snapshots/20260831135500_hourly-f1dd9-20260831135500_36c2bd2a-9405-4424-88a7-75e6bbc5b315
  appVaultRef: ontap-s3-appvault1
  cleanUpAdditionalExecHooks: true
  cleanUpArchivedExecHooks: false
  namespaceMapping:
  - destination: postgres2
    source: postgres
  resourceFilter: {}
  runArchivedExecHooks: true
  skipApplicationCreation: false

# kubectl create -f postgres-sr.yaml
snapshotrestore.protect.trident.netapp.io/postgres-sr created
Snapshot restauração criada

Verifique se os objetos e PVCs da aplicação foram restaurados no namespace postgres2.

Aplicativo restaurado em um namespace diferente