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 Container Apps en OpenShift Container Platform usando Trident Protect

Colaboradores banum-netapp kevin-hoke

Esta sección del documento de referencia proporciona detalles para crear instantáneas y copias de seguridad de Container Apps usando Trident Protect. NetApp Trident Protect proporciona capacidades avanzadas de gestión de datos de aplicaciones que mejoran la funcionalidad y la disponibilidad de aplicaciones Kubernetes con estado respaldadas por sistemas de almacenamiento NetApp ONTAP y el aprovisionador de almacenamiento NetApp Trident CSI. Trident Protect crea instantáneas y copias de seguridad de aplicaciones. Esto significa que las instantáneas y copias de seguridad se crean no solo para los datos de la aplicación en volúmenes persistentes, sino también para los metadatos de la aplicación. Las instantáneas y copias de seguridad creadas por Trident Protect pueden almacenarse en cualquiera de los siguientes almacenes de objetos y restaurarse desde ellos más adelante.

  • 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 de control de acceso basado en roles (RBAC) de Kubernetes. Por defecto, Trident Protect proporciona un único espacio de nombres del sistema llamado trident-protect y su cuenta de servicio predeterminada asociada. Si tienes una organización con muchos usuarios o necesidades de seguridad específicas, puedes usar las funciones de RBAC de Trident Protect para tener un control más granular sobre el acceso a los recursos y espacios de nombres.

Puedes encontrar información adicional sobre RBAC en Trident Protect en el "Documentación de Trident Protect"

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 puede instalarse siguiendo las instrucciones proporcionadas en la documentación "aquí". Esta sección te va a mostrar el flujo de trabajo para la protección de datos de aplicaciones en contenedores y la restauración de las aplicaciones usando Trident Protect. 1. Creación de instantáneas (bajo demanda o programada) 2. Restaurar desde una instantánea (restaurar en el mismo o en otro espacio de nombres) 3. Creación de copias de seguridad 4. Restaurar desde una copia de seguridad

Requisito previo

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

En este ejemplo, mostraremos el uso de ONTAP S3 como almacenamiento de objetos. Aquí está el flujo de trabajo para crear AppVault CR para ONTAP S3: 1. Crea un servidor de almacén de objetos S3 en el SVM en el clúster ONTAP. 2. Crea un bucket en el servidor de almacén de objetos. 3. Crea un usuario S3 en el SVM. Guarda la clave de acceso y la clave secreta en un lugar seguro. 4. En OpenShift, crea un secreto para almacenar las credenciales de ONTAP S3. 5. Crea un objeto AppVault para ONTAP S3

Configura Trident Protect AppVault para ONTAP S3

Archivo YAML de ejemplo 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 un clon entre clústeres), crea una copia de seguridad en el clúster de origen y luego restaura la copia de seguridad en un clúster diferente. Asegúrate 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