Configurer un dépôt de sauvegarde pour les buckets à double zone

Cette page explique comment configurer des dépôts de sauvegarde pour les buckets Google Distributed Cloud (GDC) à double zone isolés. Cela vous permet de maintenir une haute disponibilité pour les données et applications critiques tout en minimisant les temps d'arrêt en cas de défaillance d'une zone. Cette page explique comment créer des buckets bizones, copier des secrets de bucket et configurer des dépôts de sauvegarde dans plusieurs zones.

Cette page s'adresse aux administrateurs informatiques du groupe des administrateurs de plate-forme, qui sont chargés de gérer les ressources au sein de leur organisation, et aux développeurs d'applications du groupe des opérateurs d'applications, qui sont chargés de développer et de gérer les applications dans un univers GDC.

Pour en savoir plus, consultez la documentation sur les audiences pour GDC air-gapped.

Avant de commencer

Avant d'utiliser les services de sauvegarde et de restauration pour les buckets GDC à double zone, vous devez disposer des éléments suivants :

  • Environnement provisionné avec au moins deux zones.
  • Accès au client de l'organisation mondiale ou au client racine mondial.
    • Si votre charge de travail est provisionnée dans un projet, utilisez le client d'organisation global.
    • Si votre charge de travail est provisionnée à la racine, utilisez le client racine global.
  • Le rôle global-project-bucket-admin, qui est requis pour créer des buckets bizones.

Créer un bucket bizonal

Pour créer un bucket à double zone, vous devez d'abord créer une ressource de projet dans laquelle le bucket résidera. Pour créer un projet, procédez comme suit :

  1. Créez une ressource de projet dans un cluster d'organisation global :

    apiVersion: resourcemanager.global.gdc.goog/v1
    kind: Project
    metadata:
      namespace: platform
      name: PROJECT_NAME
      labels:
        object.gdc.goog/tenant-category: user
    

    Remplacez les éléments suivants :

    • PROJECT_NAME : nom du projet.
  2. Créez un bucket bizonal :

    apiVersion: object.global.gdc.goog/v1
    kind: Bucket
    metadata:
      name: BUCKET_NAME
      namespace: PROJECT_NAME
    spec:
      location: LOCATION_TYPE
      description: DESCRIPTION
      storageClass: Standard
    

    Remplacez les éléments suivants :

    • BUCKET_NAME : nom du bucket.
    • LOCATION_TYPE : type de réplication. Pour la réplication synchrone, la valeur est syncz1z2. Pour la réplication asynchrone, la valeur est asyncz1z2.
    • DESCRIPTION : description textuelle du bucket.
  3. Créez un compte de service et une liaison de rôle IAM (Identity and Access Management) pour accorder les autorisations requises pour le bucket :

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: BUCKET_NAME-sa
      namespace: PROJECT_NAME
    ---
    apiVersion: iam.global.gdc.goog/v1
    kind: IAMRoleBinding
    metadata:
      namespace: PROJECT_NAME
      name: BUCKET_NAME-admin-binding
    spec:
      roleRef:
        apiGroup: iam.global.gdc.goog
        kind: IAMRole
        name: project-bucket-object-admin
      subjects:
        - kind: ServiceAccount
          name: BUCKET_NAME-sa
          namespace: PROJECT_NAME
    
  4. Attendez que l'état du bucket indique ready.

Copier le secret du bucket dans les deux zones

Une fois le bucket et les autorisations requises configurés, un secret est généré dans un cluster d'organisation global, qui peut être identifié par ses annotations.

  1. Vérifiez qu'un secret a été généré avec l'annotation du bucket :

    export BUCKET_SECRET=$(kubectl get secret -n PROJECT_NAME -o jsonpath="{range .items[*]}{.metadata.name}{':'}{.metadata.annotations['object\.gdc\.goog/subject']}{'\n'}{end}" | grep :BUCKET_NAME | cut -f1 -d :)
    
  2. Récupérez le contenu du secret :

    kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yaml
    
  3. Créez le même secret dans le cluster de gestion de l'organisation, dans les zones 1 et 2. Veillez à supprimer resourceVersion, uid et creationTimeStamp du fichier YAML pour éviter les erreurs de création :

    # zone-1
    kubectl apply -f bucket_secret.yaml
    
    # zone-2
    kubectl apply -f bucket_secret.yaml
    

Créer des dépôts de sauvegarde

Une fois le bucket et les secrets configurés, créez un dépôt de sauvegarde dans la zone 1 et la zone 2.

  1. Pour obtenir des informations sur le bucket, comme le nom de domaine complet et les points de terminaison, exécutez la commande suivante dans un cluster d'organisation global. Extrayez fullyQualifiedName et zonalEndpoints du résultat :

    kubectl get buckets.object.global.gdc.goog -n PROJECT_NAME BUCKET_NAME -o yaml
    
  2. Pour créer un dépôt de sauvegarde en lecture et écriture dans la zone 1 du cluster de gestion, utilisez la commande suivante. Veillez à utiliser le point de terminaison zonal de la zone 1 :

    apiVersion: backup.gdc.goog/v1
    kind: BackupRepository
    metadata:
      annotations:
        backup.gdc.goog/dz-bucket: "true"
        backup.gdc.goog/dz-bucket-info-namespace: PROJECT_NAME
      finalizers:
      - backup.gdc.goog/sentinel-finalizer
      generation: 1
      name: BACKUP_REPOSITORY_NAME
    spec:
      endpoint: ENDPOINT
      force: false
      importPolicy: ReadWrite
      s3Options:
        bucket: BUCKET_FULL_NAME
        forcePathStyle: true
        region: zone2
      secretReference:
        name: BUCKET_SECRET
        namespace: PROJECT_NAME
      type: S3
    

    Remplacez les éléments suivants :

    • BACKUP_REPOSITORY_NAME : nom du dépôt de sauvegarde.
    • ENDPOINT : point de terminaison zonal de la zone 1.
    • BUCKET_FULL_NAME : nom complet du bucket.
    • BUCKET_SECRET : secret du bucket.
  3. Vérifiez que le dépôt de sauvegarde a bien été créé :

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  4. Annotez le dépôt de sauvegarde avec des annotations de bucket bizone :

    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket="true"
    
    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket-info-namespace=PROJECT_NAME
    
  5. Créez un dépôt en lecture seule dans la zone 2 du cluster de gestion. Utilisez le point de terminaison zonal de la zone 2 pour cette commande :

    apiVersion: backup.gdc.goog/v1
    kind: ClusterBackupRepository
    metadata:
      annotations:
        backup.gdc.goog/dz-bucket: "true"
        backup.gdc.goog/dz-bucket-info-namespace: PROJECT_NAME
      finalizers:
      - backup.gdc.goog/sentinel-finalizer
      generation: 1
      name: BACKUP_REPOSITORY_NAME
    spec:
      endpoint: ENDPOINT
      force: false
      importPolicy: ReadOnly
      s3Options:
        bucket: BUCKET_FULL_NAME
        forcePathStyle: true
        region: zone2
      secretReference:
        name: BUCKET_SECRET
        namespace: PROJECT_NAME
      type: S3
    
  6. Vérifiez que le dépôt de sauvegarde a bien été créé :

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  7. Annotez la ressource de dépôt de sauvegarde sous-jacente avec les annotations suivantes :

    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket="true"
    
    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket-info-namespace=PROJECT_NAME
    

Sauvegarder les charges de travail dans les dépôts de sauvegarde

Une fois les dépôts de sauvegarde configurés, suivez les étapes pour sauvegarder et restaurer vos charges de travail.

Étapes suivantes