Skip to main content
NetApp public and hybrid cloud solutions
Se proporciona el idioma español mediante traducción automática para su comodidad. En caso de alguna inconsistencia, el inglés precede al español.

Protección de datos para aplicaciones de contenedores en OpenShift Container Platform mediante Trident Protect

Colaboradores kevin-hoke

Esta sección del documento de referencia proporciona detalles para crear instantáneas y copias de seguridad de aplicaciones de contenedores mediante Trident Protect. NetApp Trident Protect proporciona capacidades avanzadas de gestión de datos de aplicaciones que mejoran la funcionalidad y la disponibilidad de las aplicaciones Kubernetes con estado respaldadas por los sistemas de almacenamiento NetApp ONTAP y el aprovisionador de almacenamiento NetApp Trident CSI. Trident Protect crea instantáneas y copias de seguridad de las aplicaciones, lo que significa que no solo se crean instantáneas y copias de seguridad de los datos de la aplicación en volúmenes persistentes, sino que también se crean instantáneas y copias de seguridad de los metadatos de la aplicación. Las instantáneas y copias de seguridad creadas por Trident Protect se pueden almacenar en cualquiera de los siguientes almacenamientos de objetos y restaurar desde ellos en un momento posterior.

  • AWS S3

  • Almacenamiento de blobs de Azure

  • Almacenamiento en la nube de Google

  • Ontap S3

  • StorageGrid

  • cualquier otro almacenamiento compatible con S3

Trident Protect utiliza el modelo Kubernetes de control de acceso basado en roles (RBAC). De forma predeterminada, Trident Protect proporciona un único espacio de nombres de sistema llamado trident-protect y su cuenta de servicio predeterminada asociada. Si tiene una organización con muchos usuarios o necesidades de seguridad específicas, puede utilizar las funciones RBAC de Trident Protect para obtener un control más granular sobre el acceso a los recursos y espacios de nombres.

Se puede encontrar información adicional sobre RBAC en Trident Protect en"Documentación de protección de Trident"

Nota El administrador del clúster tiene acceso a los recursos en el espacio de nombres trident-protect predeterminado y también puede acceder a los recursos en todos los demás espacios de nombres. Los usuarios no pueden crear recursos personalizados (CR) de gestión de datos de aplicaciones, como CR de instantáneas y de copia de seguridad, en el espacio de nombres trident-protect. Como práctica recomendada, los usuarios deberán crear esas CR en el espacio de nombres de la aplicación.

Trident Protect se puede instalar siguiendo las instrucciones proporcionadas en la documentación."aquí" Esta sección mostrará el flujo de trabajo para la protección de datos de aplicaciones de contenedores y la restauración de las aplicaciones utilizando Trident Protect. 1. Creación de instantáneas (a pedido o programada) 2. Restaurar desde instantánea (restaurar al mismo espacio de nombres y a uno diferente) 3. Creación de copia de seguridad 4. Restaurar desde una copia de seguridad

Requisito previo

Antes de crear las instantáneas y las copias de seguridad para una aplicación, se debe configurar un almacenamiento de objetos en Trident Protect para almacenar las instantáneas y las copias de seguridad. Esto se hace usando el bucket CR. Sólo los administradores pueden crear un CR de bucket y configurarlo. El contenedor CR se conoce como AppVault en Trident Protect. Los objetos AppVault son la representación declarativa del flujo de trabajo de Kubernetes de un depósito de almacenamiento. Un CR de AppVault contiene las configuraciones necesarias para que un bucket se utilice en operaciones de protección, como copias de seguridad, instantáneas, operaciones de restauración y replicación de SnapMirror .

En este ejemplo, mostraremos el uso de ONTAP S3 como almacenamiento de objetos. Aquí se muestra el flujo de trabajo para crear AppVault CR para ONTAP S3: 1. Cree un servidor de almacén de objetos S3 en la SVM en el clúster ONTAP . 2. Cree un depósito en el servidor de almacén de objetos. 3. Cree un usuario S3 en la SVM. Guarde la clave de acceso y la clave secreta en un lugar seguro. 4. En OpenShift, cree un secreto para almacenar las credenciales de ONTAP S3. 5. Crear un objeto AppVault para ONTAP S3

Configurar Trident Protect AppVault para ONTAP S3

Archivo yaml de muestra para configurar Trident Protect con ONTAP S3 como AppVault

# alias tp='tridentctl-protect'

appvault-secret.yaml

apiVersion: v1
stringData:
  accessKeyID: "<access key id created for a user to access ONTAP S3 bucket>"
  secretAccessKey: "corresponding Secret Access Key"
#data:
# base 64 encoded values
#  accessKeyID: <base64 access key id created for a user to access ONTAP S3 bucket>
#  secretAccessKey: <base 64  Secret Access Key>
kind: Secret
metadata:
  name: appvault-secret
  namespace: trident-protect
type: Opaque

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: <bucket-name for storing the snapshots and backups>
      endpoint: <endpoint IP for S3>
      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

AppVault creado

Archivo yaml de muestra para instalar la aplicación postgresql

postgres.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:14
        env:
        - name: POSTGRES_USER
          #value: "myuser"
          value: "admin"
        - name: POSTGRES_PASSWORD
          #value: "mypassword"
          value: "adminpass"
        - name: POSTGRES_DB
          value: "mydb"
        - name: PGDATA
          value: "/var/lib/postgresql/data/pgdata"
        ports:
        - containerPort: 5432
        volumeMounts:
        - name: postgres-storage
          mountPath: /var/lib/postgresql/data
      volumes:
      - name: postgres-storage
        persistentVolumeClaim:
          claimName: postgres-pvc
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
    app: postgres
  ports:
  - protocol: TCP
    port: 5432
    targetPort: 5432
  type: ClusterIP

Now create the Trident protect application CR for the postgres app. Include the objects in the namespace postgres and create it in the postgres namespace.
# tp create app postgres-app --namespaces postgres -n postgres

Aplicación creada

Crear instantáneas

Creación de una instantánea a pedido

# tp create snapshot postgres-snap1 --app postgres-app --appvault ontap-s3-appvault -n postgres
Snapshot "postgres-snap1" created.

Instantánea creada

instantánea-pvc creada

Creación de una programación Con el siguiente comando, se crearán instantáneas diariamente a las 15:33 y se conservarán dos instantáneas y copias de seguridad.

# tp create schedule schedule1 --app postgres-app --appvault ontap-s3-appvault --backup-retention 2 --snapshot-retention 2 --granularity Daily --hour 15 --minute 33 --data-mover Restic -n postgres
Schedule "schedule1" created.

Schedule1 creado

Creación de un cronograma usando yaml

# tp create schedule schedule2 --app postgres-app --appvault ontap-s3-appvault --backup-retention 2 --snapshot-retention 2 --granularity Daily --hour 15 --minute 33 --data-mover Restic -n postgres --dry-run > hourly-snapshotschedule.yaml

cat hourly-snapshotschedule.yaml

apiVersion: protect.trident.netapp.io/v1
kind: Schedule
metadata:
  creationTimestamp: null
  name: schedule2
  namespace: postgres
spec:
  appVaultRef: ontap-s3-appvault
  applicationRef: postgres-app
  backupRetention: "2"
  dataMover: Restic
  dayOfMonth: ""
  dayOfWeek: ""
  enabled: true
  granularity: Hourly
  #hour: "15"
  minute: "33"
  recurrenceRule: ""
  snapshotRetention: "2"
status: {}

Schedule2 creado

Puedes ver las instantáneas creadas según este cronograma.

Snap creado según lo previsto

También se crean instantáneas de volumen.

PVC Snap creado según lo previsto

Eliminar la aplicación para simular la pérdida de la aplicación
# oc delete deployment/postgres -n postgres
# oc get pod,pvc -n postgres
No resources found in postgres namespace.
Restaurar desde una instantánea al mismo espacio de nombres
# tp create sir postgres-sir --snapshot postgres/hourly-3f1ee-20250214183300 -n postgres
SnapshotInplaceRestore "postgres-sir" created.

Señor creado

La aplicación y su PVC se restauran al mismo espacio de nombres.

Aplicación restaurada, señor

Restaurar desde una instantánea a un espacio de nombres diferente
# tp create snapshotrestore postgres-restore --snapshot postgres/hourly-3f1ee-20250214183300 --namespace-mapping postgres:postgres-restore -n postgres-restore
SnapshotRestore "postgres-restore" created.

snapRestore creado

Puedes ver que la aplicación ha sido restaurada a un nuevo espacio de nombres.

Aplicación restaurada, snapRestore

Crear copias de seguridad

Creación de una copia de seguridad a pedido

# tp create backup postgres-backup1 --app postgres-app --appvault ontap-s3-appvault -n postgres
Backup "postgres-backup1" created.

Copia de seguridad creada

Creación de un cronograma para la copia de seguridad

Las copias de seguridad diarias y horarias de la lista anterior se crean a partir de la programación configurada previamente.

# tp create schedule schedule1 --app postgres-app --appvault ontap-s3-appvault --backup-retention 2 --snapshot-retention 2 --granularity Daily --hour 15 --minute 33 --data-mover Restic -n postgres
Schedule "schedule1" created.

Horario creado previamente

Restaurar desde una copia de seguridad

Elimine la aplicación y los PVC para simular una pérdida de datos.

Horario creado previamente

Restaurar al mismo espacio de nombres #tp create bir postgres-bir --backup postgres/hourly-3f1ee-20250224023300 -n postgres BackupInplaceRestore "postgres-bir" creado.

restaurar al mismo espacio de nombres

La aplicación y los PVC se restauran en el mismo espacio de nombres.

La aplicación y los PVC se restauran al mismo espacio de nombres

Restaurar a un espacio de nombres diferente Crea un nuevo espacio de nombres. Restaurar desde una copia de seguridad al nuevo espacio de nombres.

restaurar a un espacio de nombres diferente

Migrar aplicaciones

Para clonar o migrar una aplicación a un clúster diferente (realizar una clonación entre clústeres), cree una copia de seguridad en el clúster de origen y luego restaure la copia de seguridad en un clúster diferente. Asegúrese de que Trident Protect esté instalado en el clúster de destino.

En el clúster de origen, realice los pasos como se muestra en la siguiente imagen:

restaurar a un espacio de nombres diferente

Desde el clúster de origen, cambie el contexto al clúster de destino. Luego, asegúrese de que se pueda acceder a AppVault desde el contexto del clúster de destino y obtenga el contenido de AppVault del clúster de destino.

cambiar el contexto al destino

Utilice la ruta de respaldo de la lista y cree un objeto CR de respaldo y restauración como se muestra en el siguiente comando.

# tp create backuprestore backup-restore-cluster2 --namespace-mapping postgres:postgres --appvault ontap-s3-appvault --path postgres-app_4d798ed5-cfa8-49ff-a5b6-c5e2d89aeb89/backups/postgres-backup-cluster1_ec0ed3f3-5500-4e72-afa8-117a04a0b1c3 -n postgres
BackupRestore "backup-restore-cluster2" created.

restaurar al destino

Ahora puedes ver que los pods de aplicación y los PVC se crean en el clúster de destino.

aplicación en el clúster de destino