Sauvegarder et restaurer dans Kubernetes

Cette page explique comment sauvegarder et restaurer vos données AlloyDB Omni à l'aide de l'opérateur Kubernetes AlloyDB Omni. Pour ce faire, vous devez disposer de connaissances de base sur la mise à jour d'un cluster Kubernetes à l'aide de fichiers manifestes et de l'outil de ligne de commande kubectl. Pour en savoir plus sur l'installation et l'exécution d'AlloyDB Omni sur un cluster Kubernetes, consultez Installer AlloyDB sur Kubernetes.

Pour activer la sauvegarde et la récupération continues dans AlloyDB Omni, vous devez créer un plan de sauvegarde pour chaque cluster de base de données. Les sauvegardes sont effectuées en fonction des planifications définies dans la ressource backupPlan. Si aucun calendrier de sauvegarde n'est défini dans le plan de sauvegarde, des sauvegardes continues sont effectuées quotidiennement par défaut. Vous pouvez restaurer ou cloner des sauvegardes à partir de n'importe quel code temporel de la période de récupération avec une précision de seconde.

Pour en savoir plus sur la sauvegarde et la restauration de vos données AlloyDB Omni sur des déploiements autres que Kubernetes, consultez Installer et configurer Barman.

Activer et planifier des sauvegardes

Les sauvegardes continues sont activées lorsque vous créez une ressource de plan de sauvegarde pour votre cluster de base de données. Vous devez créer une ressource backupPlan pour chaque cluster de base de données afin d'activer la sauvegarde continue pour ce cluster. Cette ressource de plan de sauvegarde définit les paramètres suivants:

  • Emplacement où l'opérateur AlloyDB Omni stocke les sauvegardes. Il peut s'agir d'un stockage local sur votre cluster Kubernetes ou dans un bucket Cloud Storage.

  • Option permettant de définir plusieurs planifications de sauvegarde qui créent automatiquement des sauvegardes full, incremental et differential. Vous pouvez mettre cette planification en pause à tout moment, y compris lorsque vous définissez initialement le plan de sauvegarde. Si un plan de sauvegarde est suspendu, les sauvegardes planifiées ne sont pas créées, mais vous pouvez toujours l'utiliser pour créer des sauvegardes manuellement.

    Si aucun calendrier de sauvegarde n'est spécifié, la valeur par défaut est "0 0 * * *", ce qui génère une sauvegarde complète quotidienne à minuit, heure locale.

  • Période de conservation des sauvegardes stockées. Cette période peut être aussi courte qu'une journée ou aussi longue que 90 jours. La valeur par défaut est 14.

Votre cluster de base de données peut comporter plusieurs plans de sauvegarde, chacun avec son propre nom et sa propre configuration. Si vous créez plusieurs ressources backupPlan avec des planifications de sauvegarde différentes pour un cluster de bases de données, vous devez définir un emplacement de sauvegarde unique pour chaque ressource de sauvegarde.

Créer un plan de stockage des sauvegardes localement

Pour activer les sauvegardes stockées localement, appliquez le fichier manifeste suivant:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: BackupPlan
    metadata:
      name: BACKUP_PLAN_NAME
      namespace: NAMESPACE
    spec:
      dbclusterRef: DB_CLUSTER_NAME
      backupSchedules:
        full: "FULL_CRON_SCHEDULE"
        differential: "DIFF_CRON_SCHEDULE"
        incremental: "INCR_CRON_SCHEDULE"
      backupRetainDays: RETENTION_DAYS
      paused: PAUSED_BOOLEAN

Remplacez les éléments suivants :

  • BACKUP_PLAN_NAME: nom de cette ressource de plan de sauvegarde (par exemple, backup-plan-1).

  • NAMESPACE: espace de noms Kubernetes de ce plan de sauvegarde. Il doit correspondre à l'espace de noms du cluster de base de données.

  • DB_CLUSTER_NAME: nom de votre cluster de base de données, que vous avez attribué lors de sa création.

  • FULL_CRON_SCHEDULE: planification de sauvegarde pour créer une sauvegarde complète, contenant toutes les données, exprimée au format cron. Par exemple, définissez la valeur sur "0 0 * * 0" pour effectuer une sauvegarde complète à 00h00 tous les dimanches.

  • DIFF_CRON_SCHEDULE: planification des sauvegardes pour créer des sauvegardes initialement complètes. Les sauvegardes suivantes sont différentielles, en fonction des modifications apportées aux données, exprimées au format cron. Par exemple, définissez la valeur sur "0 22 * * 3" pour effectuer une sauvegarde différentielle à 22h00 tous les mercredis.

  • INCR_CRON_SCHEDULE: planification de sauvegarde pour créer des sauvegardes incluant les données modifiées depuis la dernière sauvegarde complète, différentielle ou incrémentielle. Il est exprimé au format cron. Par exemple, définissez la valeur sur "0 21 * * *" pour effectuer une sauvegarde incrémentielle à 21h00 tous les jours.

  • RETENTION_DAYS: nombre de jours pendant lesquels l'opérateur AlloyDB Omni conserve cette sauvegarde. Il doit s'agir d'un nombre entier compris entre 1 et 90. La valeur par défaut est 14.

  • PAUSED_BOOLEAN: indique si le plan de sauvegarde est mis en pause ou non. Indiquez l'une des valeurs suivantes:

    • true: les sauvegardes sont suspendues et aucune sauvegarde planifiée n'est créée.

    • false: l'opérateur AlloyDB Omni crée des sauvegardes selon le calendrier spécifié par cronSchedule. Il s'agit de la valeur par défaut, si elle n'est pas explicitement définie sur true.

    La valeur par défaut est false.

Créer un plan qui stocke les sauvegardes dans Cloud Storage

Pour activer les sauvegardes stockées dans Cloud Storage, procédez comme suit:

  1. Créer un bucket Cloud Storage Notez le nom que vous attribuez à ce bucket. Vous en aurez besoin à une étape ultérieure.

  2. Créez un compte de service pour ajouter des sauvegardes au bucket.

  3. Attribuez le rôle Identity and Access Management storage.objectAdmin au compte de service.

  4. Créez une clé pour le compte de service. La clé privée est ainsi téléchargée dans votre environnement local.

  5. Renommez le fichier de clé téléchargé en key.json.

  6. Créez un secret Kubernetes contenant la clé privée:

    kubectl create secret generic SECRET_NAME --from-file=KEY_PATH -n NAMESPACE

    Remplacez les éléments suivants :

    • SECRET_NAME: nom du secret Kubernetes que vous créez (par exemple, gcs-key).

    • KEY_PATH: chemin d'accès au système de fichiers local du fichier key.json que vous avez téléchargé aux étapes précédentes.

    • NAMESPACE: espace de noms du cluster de base de données.

  7. Appliquez le fichier manifeste suivant:

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: BackupPlan
      metadata:
        name: BACKUP_PLAN_NAME
        namespace: NAMESPACE
      spec:
        dbclusterRef: DB_CLUSTER_NAME
        backupSchedules:
          full: "FULL_CRON_SCHEDULE"
          differential: "DIFF_CRON_SCHEDULE"
          incremental: "INCR_CRON_SCHEDULE"
        backupRetainDays: RETENTION_DAYS
        paused: PAUSED_BOOLEAN
        backupLocation:
          type: GCS
          gcsOptions:
            bucket: BUCKET_URL
            key: BACKUP_PATH
            secretRef:
              name: SECRET_NAME
              namespace: NAMESPACE
    

    Remplacez les éléments suivants :

    • BACKUP_PLAN_NAME: nom de cette ressource de plan de sauvegarde (par exemple, backup-plan-1).

    • NAMESPACE: espace de noms Kubernetes de ce plan de sauvegarde. Il doit correspondre à l'espace de noms du cluster de base de données.

    • DB_CLUSTER_NAME: nom de votre cluster de base de données, que vous avez attribué lors de sa création.

    • FULL_CRON_SCHEDULE: planification de sauvegarde pour créer une sauvegarde complète, contenant toutes les données, exprimée au format cron. Par exemple, définissez la valeur sur "0 0 * * 0" pour effectuer une sauvegarde complète à 00h00 tous les dimanches.

    • DIFF_CRON_SCHEDULE: planification des sauvegardes pour créer des sauvegardes initialement complètes. Les sauvegardes suivantes sont différentielles, en fonction des modifications apportées aux données, exprimées au format cron. Par exemple, définissez la valeur sur "0 22 * * 3" pour effectuer une sauvegarde différentielle à 22h00 tous les mercredis.

    • INCR_CRON_SCHEDULE: planification de sauvegarde pour créer des sauvegardes incluant les données modifiées depuis la dernière sauvegarde complète, différentielle ou incrémentielle. Il est exprimé au format cron. Par exemple, définissez la valeur sur "0 21 * * *" pour effectuer une sauvegarde incrémentielle à 21h00 tous les jours.

    • RETENTION_DAYS: nombre de jours pendant lesquels l'opérateur AlloyDB Omni conserve cette sauvegarde. Il doit s'agir d'un nombre entier compris entre 1 et 90. La valeur par défaut est 14.

    • PAUSED_BOOLEAN: indique si le plan de sauvegarde est mis en pause ou non. Indiquez l'une des valeurs suivantes:

      • true: les sauvegardes sont suspendues et aucune sauvegarde planifiée n'est créée.

      • false: l'opérateur AlloyDB Omni crée des sauvegardes selon le calendrier spécifié par cronSchedule. Il s'agit de la valeur par défaut, si elle n'est pas explicitement définie sur true.

      La valeur par défaut est false.

    • BUCKET_URL: nom du bucket Cloud Storage que vous avez créé à une étape précédente. Il ne s'agit pas de l'URL complète du bucket. N'ajoutez pas gs:// au nom du bucket.

    • BACKUP_PATH: chemin d'accès au répertoire dans lequel l'opérateur AlloyDB Omni écrit les sauvegardes, dans le bucket Cloud Storage. Le chemin d'accès doit être absolu et commencer par /.

    • SECRET_NAME: nom que vous avez choisi pour le secret Kubernetes que vous avez créé à une étape précédente.

Créer manuellement une sauvegarde

Vous pouvez créer manuellement une ressource de sauvegarde à tout moment, à l'aide de n'importe quel plan de sauvegarde que vous avez déjà appliqué à un cluster de base de données. L'opérateur AlloyDB Omni applique l'emplacement de stockage et la période de conservation du plan de sauvegarde choisi à la nouvelle sauvegarde manuelle.

Pour créer manuellement une sauvegarde, appliquez le fichier manifeste suivant:

apiVersion: alloydbomni.dbadmin.goog/v1
kind: Backup
metadata:
  name: BACKUP_NAME
  namespace: NAMESPACE
spec:
  dbclusterRef: DB_CLUSTER_NAME
  backupPlanRef: BACKUP_PLAN_NAME
  manual: true
  physicalBackupSpec:
    backupType: BACKUP_TYPE

Remplacez les éléments suivants :

  • BACKUP_NAME: nom de cette sauvegarde (par exemple, backup-1).

  • NAMESPACE: espace de noms Kubernetes de cette restauration. Il doit correspondre à l'espace de noms du cluster de base de données.

  • BACKUP_PLAN_NAME: nom de la ressource de plan de sauvegarde à laquelle cette sauvegarde appartient. Il doit correspondre au nom que vous avez choisi lorsque vous avez créé le plan de sauvegarde.

  • DB_CLUSTER_NAME: nom de votre cluster de base de données, que vous avez attribué lors de sa création.

  • BACKUP_TYPE: spécifie le type de sauvegarde manuelle que vous souhaitez créer. Choisissez l'une des valeurs suivantes:

    • full: crée une sauvegarde complète contenant toutes les données.

    • diff: crée une sauvegarde différentielle qui dépend de la dernière sauvegarde complète. Les sauvegardes ultérieures sont différentielles, en fonction des modifications apportées aux données.

    • incr: crée une sauvegarde incrémentielle qui dépend de la sauvegarde complète ou différentielle précédente pour inclure les données qui ont changé depuis la dernière sauvegarde complète ou différentielle.

Surveiller et lister les sauvegardes

Vos plans de sauvegarde et vos sauvegardes sont toutes des ressources de votre cluster Kubernetes. Pour afficher des informations à leur sujet, utilisez la commande kubectl get.

Afficher le résumé d'un plan de sauvegarde

Pour afficher des informations sur les plans de sauvegarde de votre cluster de base de données, exécutez la commande suivante:

kubectl get backupplan.alloydbomni.dbadmin.goog -n NAMESPACE

Remplacez NAMESPACE par l'espace de noms du cluster de bases de données.

Le résultat se présente comme suit :

NAME               PHASE   LASTBACKUPTIME         NEXTBACKUPTIME
backup-plan-prod   Ready   2023-10-26T17:26:43Z   2023-10-27T00:00:00Z

Afficher la liste des sauvegardes

Pour afficher la liste des sauvegardes disponibles pour votre cluster de base de données, exécutez la commande suivante:

kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE

Remplacez NAMESPACE par l'espace de noms du cluster de bases de données.

Le résultat se présente comme suit :

NAME                              PHASE       COMPLETETIME
backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
manual-backup-2                   InProgress

Chaque ligne du tableau de sortie représente une ressource de sauvegarde, avec les attributs suivants:

  • Nom de la sauvegarde.
  • État de la sauvegarde, avec Succeeded indiquant une sauvegarde prête à être restaurée.
  • Code temporel de création de la sauvegarde.

Restaurer à partir d'une sauvegarde

AlloyDB vous permet de restaurer à partir de sauvegardes individuelles ou de cloner un cluster à l'aide d'une sauvegarde à un moment précis.

Restaurer à partir d'une sauvegarde nommée

Pour restaurer à partir d'une sauvegarde, en remplaçant les données de votre cluster de base de données par celles de la sauvegarde, procédez comme suit.

  1. Répertoriez toutes les sauvegardes dont la phase est Succeeded.

    kubectl get backup.alloydbomni.dbadmin.goog -n NAMESPACE | grep Succeeded

    Remplacez NAMESPACE par l'espace de noms du cluster de bases de données.

    Si au moins une bonne sauvegarde candidate existe, le résultat ressemble à ce qui suit:

    backup-plan-prod-20231026172643   Succeeded   2023-10-26T17:26:53Z
    manual-backup-1                   Succeeded   2023-10-26T18:15:27Z
    
  2. Choisissez l'une des sauvegardes listées à l'étape précédente comme sauvegarde à partir de laquelle effectuer la restauration. Notez son nom, car vous l'utiliserez à l'étape suivante.

  3. Appliquez le fichier manifeste suivant:

      apiVersion: alloydbomni.dbadmin.goog/v1
      kind: Restore
      metadata:
        name: RESTORE_NAME
        namespace: NAMESPACE
      spec:
        sourceDBCluster: DB_CLUSTER_NAME
        backup: BACKUP_NAME
    

    Remplacez les éléments suivants :

    • RESTORE_NAME: nom à utiliser avec la ressource de restauration de données créée par ce fichier manifeste (par exemple, restore-1).

    • DB_CLUSTER_NAME: nom de votre cluster de base de données, que vous avez attribué lors de sa création.

    • BACKUP_NAME: nom de la sauvegarde que vous avez choisie à l'étape précédente.

Cloner un cluster à partir d'un moment précis

L'opérateur AlloyDB Omni vous permet de cloner les données du cluster à partir de n'importe quel point dans le temps pendant une période de récupération. La durée de la fenêtre de récupération est directement déterminée par la période de conservation.

Par exemple, si votre période de conservation est définie sur 14 jours, vous ne pouvez pas récupérer les données de plus de 14 jours. Vous pouvez restaurer à tout moment pendant la période de récupération. L'opérateur AlloyDB Omni conserve les sauvegardes et les journaux pendant un jour de plus que la valeur spécifiée.

  1. Surveillez votre fenêtre de récupération pour identifier le point de restauration:

    kubectl get backupplan.alloydbomni.dbadmin.goog BACKUP_NAME -n NAMESPACE -o json | jq .status.recoveryWindow
    

    Voici un exemple de réponse:

    recoveryWindow:
    begin: "2024-01-31T02:54:35Z"
    

    La valeur d'horodatage au format RFC 3339 est utilisée dans la ressource de restauration.

  2. Créez et appliquez le fichier manifeste de ressources de restauration suivant:

    apiVersion: alloydbomni.dbadmin.goog/v1
    kind: Restore
    metadata:
      name: RESTORE_NAME
      namespace: NAMESPACE
    spec:
      sourceDBCluster: DB_CLUSTER_NAME
      pointInTime: "DATE_AND_TIME_STAMP"
      clonedDBClusterConfig:
        dbclusterName: NEW_DB_CLUSTER_NAME
    

    Remplacez les éléments suivants :

    • RESTORE_NAME: nom à utiliser avec la ressource de restauration de données créée par ce fichier manifeste (par exemple, restore-1).

    • DB_CLUSTER_NAME: nom de votre cluster de base de données, que vous avez attribué lors de sa création.

    • DATE_AND_TIME_STAMP: code temporel RFC 3339 à la granularité de la minute de la sauvegarde continue à partir de laquelle vous souhaitez effectuer la restauration (par exemple, 2024-03-05T15:32:10Z).

    • NEW_DB_CLUSTER_NAME: nom du nouveau cluster de base de données.

Afficher l'état de la restauration

  1. Afficher la progression de l'opération de restauration:

    kubectl get restore.alloydbomni.dbadmin.goog -n NAMESPACE

    Remplacez NAMESPACE par l'espace de noms du cluster de bases de données.

    Pour exécuter la commande en continu, ajoutez l'option -Aw.

    Le résultat se présente comme suit :

    NAME        PHASE               COMPLETETIME   RESTOREDPOINTINTIME
    restore-1   RestoreInProgress
    

    Lorsque la valeur de la colonne PHASE du tableau de sortie indique ProvisionSucceeded, la restauration est terminée.

  2. Afficher la progression de la mise en ligne du cluster de base de données restauré ou cloné:

    kubectl get dbclusters -A -n NAMESPACE

    Remplacez NAMESPACE par l'espace de noms du cluster de bases de données.

    Pour exécuter la commande en continu, ajoutez l'option -Aw.

    Le résultat se présente comme suit :

    NAMESPACE   NAME               PRIMARYENDPOINT   PRIMARYPHASE   DBCLUSTERPHASE
    default     db-cluster-1       10.128.0.55       Ready          DBClusterReady
    

    Lorsque la valeur de la colonne DBCLUSTERPHASE dans le tableau de sortie indique DBClusterReady, le cluster de base de données restauré ou cloné est prêt à l'emploi.

Supprimer une sauvegarde

En règle générale, vous n'avez pas besoin de supprimer manuellement les sauvegardes. L'opérateur AlloyDB Omni supprime automatiquement les sauvegardes antérieures à la période de conservation que vous spécifiez lors de la création d'un plan de sauvegarde.

Si vous souhaitez supprimer manuellement une sauvegarde, celle-ci doit répondre aux exigences suivantes:

  • La sauvegarde n'est pas la seule sauvegarde stockée pour son plan de sauvegarde. L'opérateur AlloyDB Omni nécessite qu'au moins une sauvegarde existe par plan de sauvegarde.

  • Aucune autre sauvegarde ne dépend de cette sauvegarde. Par exemple, une sauvegarde complète avec des sauvegardes différentielles ou incrémentielles qui en dépendent, ou une sauvegarde incrémentielle avec des sauvegardes différentielles qui en dépendent.

Pour supprimer une sauvegarde, exécutez la commande suivante :

kubectl delete backup.alloydbomni.dbadmin.goog/BACKUP_NAME -n NAMESPACE

Remplacez les éléments suivants :

  • BACKUP_NAME: nom de la sauvegarde à supprimer.

  • NAMESPACE: espace de noms du cluster de base de données.

Redimensionner un disque de sauvegarde

Pour redimensionner le disque local qui stocke vos sauvegardes dans le cluster Kubernetes, procédez comme suit:

  1. Mettez à jour le champ resources.disks du fichier manifeste DBCluster comme suit:

    spec:
      primarySpec:
        resources:
          disks:
            - name: BACKUP_DISK
              size: 10Gi
    

    Remplacez BACKUP_DISK par le nom du disque sur lequel sont stockées vos sauvegardes.

  2. Appliquez le fichier manifeste pour appliquer la mise à jour.

    L'opérateur AlloyDB Omni applique immédiatement les spécifications mises à jour à votre DBCluster.

Les restrictions suivantes s'appliquent à la modification du disque de sauvegarde d'un cluster de base de données en cours d'exécution:

  • Vous ne pouvez augmenter la taille d'un disque que si l'storageClass spécifiée est compatible avec l'extension de volume.
  • Vous ne pouvez pas réduire la taille d'un disque.

Mettre à jour un plan de sauvegarde

Chaque plan de sauvegarde est une ressource Kubernetes. Pour mettre à jour sa configuration, effectuez l'une des opérations suivantes:

  • Modifiez et réappliquez le fichier manifeste du plan de sauvegarde.

  • Exécutez la commande kubectl patch.

Par exemple, pour suspendre un plan de sauvegarde en cours d'exécution, remplacez l'attribut paused de son fichier manifeste par true, puis réappliquez le fichier manifeste.

Supprimer un plan de sauvegarde

Pour supprimer un plan de sauvegarde et toutes ses ressources de sauvegarde, exécutez la commande suivante:

kubectl delete backupplan.alloydbomni.dbadmin.goog/BACKUP_PLAN_NAME -n NAMESPACE

Remplacez les éléments suivants :

  • BACKUP_PLAN_NAME: nom du plan de sauvegarde à supprimer.

  • NAMESPACE: espace de noms du cluster de base de données.

Pour suspendre un plan de sauvegarde sans le supprimer, définissez l'attribut paused de la ressource du plan de sauvegarde sur true. Un plan de sauvegarde suspendu continue de stocker des sauvegardes et permet de créer des sauvegardes manuelles.