Protección de datos para Container Apps en OpenShift Container Platform usando Trident Protect
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"
|
|
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

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

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.


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.

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: {}

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

También se crean instantáneas de volumen.

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.

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

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.

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

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.

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.

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

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

La aplicación y los PVC se restauran en el 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.

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:

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.

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.

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