Protección de datos para aplicaciones de contenedores en OpenShift Container Platform mediante Trident Protect
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"
|
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
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 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:
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.