15.3. Sauvegarde des machines virtuelles
OADP pour OpenShift Virtualization est une fonctionnalité d'aperçu technologique uniquement. Les fonctionnalités de l'aperçu technologique ne sont pas prises en charge par les accords de niveau de service (SLA) de production de Red Hat et peuvent ne pas être complètes sur le plan fonctionnel. Red Hat ne recommande pas de les utiliser en production. Ces fonctionnalités offrent un accès anticipé aux fonctionnalités des produits à venir, ce qui permet aux clients de tester les fonctionnalités et de fournir des commentaires pendant le processus de développement.
Pour plus d'informations sur la portée de l'assistance des fonctionnalités de l'aperçu technologique de Red Hat, voir Portée de l'assistance des fonctionnalités de l'aperçu technologique.
Vous sauvegardez des machines virtuelles (VM) en créant une ressource personnalisée (CR) OpenShift API for Data Protection (OADP) Backup
.
Le CR Backup
effectue les actions suivantes :
- Sauvegarde les ressources d'OpenShift Virtualization en créant un fichier d'archive sur un stockage objet compatible S3, tel que Multicloud Object Gateway, Noobaa ou Minio.
Sauvegarde des disques VM à l'aide de l'une des options suivantes :
- Les instantanés de l'interface de stockage de conteneurs (CSI) sur le stockage en nuage compatible CSI, tel que Ceph RBD ou Ceph FS.
- Sauvegardes de systèmes de fichiers résilients sur des systèmes de stockage d'objets.
L'OADP fournit des crochets de sauvegarde pour geler le système de fichiers de la VM avant l'opération de sauvegarde et le dégeler lorsque la sauvegarde est terminée.
Le site kubevirt-controller
crée les pods virt-launcher
avec des annotations qui permettent à Velero d'exécuter le binaire virt-freezer
avant et après l'opération de sauvegarde.
Les API freeze
et unfreeze
sont des sous-ressources de l'API VM snapshot. Pour plus de détails, voir À propos des instantanés de machines virtuelles.
Vous pouvez ajouter des crochets au CR Backup
pour exécuter des commandes sur des machines virtuelles spécifiques avant ou après l'opération de sauvegarde.
Vous planifiez une sauvegarde en créant un CRSchedule
au lieu d'un CR Backup
.
15.3.1. Création d'un CR de sauvegarde
Vous sauvegardez les images Kubernetes, les images internes et les volumes persistants (PV) en créant une ressource personnalisée (CR) Backup
.
Conditions préalables
- Vous devez installer l'opérateur OpenShift API for Data Protection (OADP).
-
Le CR
DataProtectionApplication
doit être dans un étatReady
. Conditions préalables relatives à l'emplacement de la sauvegarde :
- Le stockage d'objets S3 doit être configuré pour Velero.
-
Un emplacement de sauvegarde doit être configuré dans le CR
DataProtectionApplication
.
Conditions préalables pour l'emplacement des instantanés :
- Votre fournisseur de cloud computing doit disposer d'une API d'instantané native ou prendre en charge les instantanés de l'interface de stockage de conteneurs (CSI).
-
Pour les instantanés CSI, vous devez créer un CR
VolumeSnapshotClass
pour enregistrer le pilote CSI. -
Un emplacement de volume doit être configuré dans le CR
DataProtectionApplication
.
Procédure
Récupérez les CR
backupStorageLocations
en entrant la commande suivante :$ oc get backupStorageLocations -n openshift-adp
Exemple de sortie
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
Créez un CR
Backup
, comme dans l'exemple suivant :apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> labels: velero.io/storage-location: default namespace: openshift-adp spec: hooks: {} includedNamespaces: - <namespace> 1 includedResources: [] 2 excludedResources: [] 3 storageLocation: <velero-sample-1> 4 ttl: 720h0m0s labelSelector: 5 - matchLabels: app=<label_1> - matchLabels: app=<label_2> - matchLabels: app=<label_3> orlabelSelectors: 6 - matchLabels: app=<label_1> - matchLabels: app=<label_2> - matchLabels: app=<label_3>
- 1
- Spécifier un tableau d'espaces de noms à sauvegarder.
- 2
- Facultatif : Spécifiez un tableau de ressources à inclure dans la sauvegarde. Les ressources peuvent être des raccourcis (par exemple, "po" pour "pods") ou être entièrement qualifiées. Si rien n'est spécifié, toutes les ressources sont incluses.
- 3
- Facultatif : Spécifiez un tableau de ressources à exclure de la sauvegarde. Les ressources peuvent être des raccourcis (par exemple, "po" pour "pods") ou être entièrement qualifiées.
- 4
- Indiquez le nom du CR
backupStorageLocations
. - 5
- Sauvegarde des ressources qui ont toutes les étiquettes spécifiées.
- 6
- Sauvegarde des ressources qui ont une ou plusieurs des étiquettes spécifiées.
Vérifiez que l'état de la CR
Backup
estCompleted
:$ oc get backup -n openshift-adp <backup> -o jsonpath='{.status.phase}'
15.3.1.1. Sauvegarde de volumes persistants avec des instantanés CSI
Vous sauvegardez des volumes persistants avec des instantanés de l'interface de stockage de conteneurs (CSI) en modifiant la ressource personnalisée (CR) VolumeSnapshotClass
du stockage en nuage avant de créer la CR Backup
.
Conditions préalables
- Le fournisseur de services en nuage doit prendre en charge les instantanés CSI.
-
Vous devez activer le CSI sur le site
DataProtectionApplication
CR.
Procédure
Ajouter la paire clé-valeur
metadata.labels.velero.io/csi-volumesnapshot-class: "true"
à la CRVolumeSnapshotClass
:apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: <volume_snapshot_class_name> labels: velero.io/csi-volumesnapshot-class: "true" driver: <csi_driver> deletionPolicy: Retain
Vous pouvez maintenant créer un CR Backup
.
15.3.1.2. Sauvegarde des applications avec Restic
Vous sauvegardez les ressources Kubernetes, les images internes et les volumes persistants avec Restic en modifiant la ressource personnalisée (CR) Backup
.
Il n'est pas nécessaire de spécifier un emplacement d'instantané dans le CR DataProtectionApplication
.
Restic ne prend pas en charge la sauvegarde des volumes hostPath
. Pour plus d'informations, voir les limitations supplémentaires de Restic.
Conditions préalables
- Vous devez installer l'opérateur OpenShift API for Data Protection (OADP).
-
Vous ne devez pas désactiver l'installation par défaut de Restic en remplaçant
spec.configuration.restic.enable
parfalse
dans le CRDataProtectionApplication
. -
Le CR
DataProtectionApplication
doit être dans un étatReady
.
Procédure
Modifiez le CR
Backup
, comme dans l'exemple suivant :apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> labels: velero.io/storage-location: default namespace: openshift-adp spec: defaultVolumesToRestic: true 1 ...
- 1
- Ajouter
defaultVolumesToRestic: true
au blocspec
.
15.3.1.3. Création de crochets de sauvegarde
Vous créez des crochets de sauvegarde pour exécuter des commandes dans un conteneur d'un pod en modifiant la ressource personnalisée (CR) Backup
.
Pre s'exécutent avant la sauvegarde du pod. Post s'exécutent après la sauvegarde.
Procédure
Ajoutez un crochet au bloc
spec.hooks
du CRBackup
, comme dans l'exemple suivant :apiVersion: velero.io/v1 kind: Backup metadata: name: <backup> namespace: openshift-adp spec: hooks: resources: - name: <hook_name> includedNamespaces: - <namespace> 1 excludedNamespaces: 2 - <namespace> includedResources: [] - pods 3 excludedResources: [] 4 labelSelector: 5 matchLabels: app: velero component: server pre: 6 - exec: container: <container> 7 command: - /bin/uname 8 - -a onError: Fail 9 timeout: 30s 10 post: 11 ...
- 1
- Facultatif : vous pouvez spécifier les espaces de noms auxquels le crochet s'applique. Si cette valeur n'est pas spécifiée, le crochet s'applique à tous les espaces de noms.
- 2
- Facultatif : vous pouvez spécifier des espaces de noms auxquels le crochet ne s'applique pas.
- 3
- Actuellement, les pods sont la seule ressource prise en charge à laquelle les crochets peuvent s'appliquer.
- 4
- Facultatif : vous pouvez spécifier les ressources auxquelles le crochet ne s'applique pas.
- 5
- Facultatif : Ce crochet ne s'applique qu'aux objets correspondant à l'étiquette. Si cette valeur n'est pas spécifiée, le crochet s'applique à tous les espaces de noms.
- 6
- Tableau de crochets à exécuter avant la sauvegarde.
- 7
- Facultatif : si le conteneur n'est pas spécifié, la commande s'exécute dans le premier conteneur du pod.
- 8
- Il s'agit du point d'entrée du conteneur init ajouté.
- 9
- Les valeurs autorisées pour le traitement des erreurs sont
Fail
etContinue
. La valeur par défaut estFail
. - 10
- Facultatif : durée d'attente pour l'exécution des commandes. La valeur par défaut est
30s
. - 11
- Ce bloc définit un tableau de hooks à exécuter après la sauvegarde, avec les mêmes paramètres que les hooks de pré-sauvegarde.
15.3.2. Planification des sauvegardes
Vous planifiez les sauvegardes en créant une ressource personnalisée (CR) Schedule
au lieu d'une CR Backup
.
Laissez suffisamment de temps dans votre calendrier de sauvegarde pour qu'une sauvegarde se termine avant qu'une autre ne soit créée.
Par exemple, si la sauvegarde d'un espace de noms prend généralement 10 minutes, ne planifiez pas de sauvegardes plus fréquentes que toutes les 15 minutes.
Conditions préalables
- Vous devez installer l'opérateur OpenShift API for Data Protection (OADP).
-
Le CR
DataProtectionApplication
doit être dans un étatReady
.
Procédure
Récupérer les CR de
backupStorageLocations
:$ oc get backupStorageLocations -n openshift-adp
Exemple de sortie
NAMESPACE NAME PHASE LAST VALIDATED AGE DEFAULT openshift-adp velero-sample-1 Available 11s 31m
Créez un CR
Schedule
, comme dans l'exemple suivant :$ cat << EOF | oc apply -f - apiVersion: velero.io/v1 kind: Schedule metadata: name: <schedule> namespace: openshift-adp spec: schedule: 0 7 * * * 1 template: hooks: {} includedNamespaces: - <namespace> 2 storageLocation: <velero-sample-1> 3 defaultVolumesToRestic: true 4 ttl: 720h0m0s EOF
- 1
cron
expression to schedule the backup, for example,0 7 * * *
to perform a backup every day at 7:00.- 2
- Tableau des espaces de noms à sauvegarder.
- 3
- Nom du CR
backupStorageLocations
. - 4
- Facultatif : Ajoutez la paire clé-valeur
defaultVolumesToRestic: true
si vous sauvegardez des volumes avec Restic.
Vérifiez que l'état de
Schedule
CR estCompleted
après l'exécution de la sauvegarde programmée :$ oc get schedule -n openshift-adp <schedule> -o jsonpath='{.status.phase}'