Ce document décrit la procédure à suivre pour configurer le BackupRepository requis pour le service de base de données (DBS) Google Distributed Cloud (GDC) air gap. Ce dépôt, obligatoirement nommé dbs-backup-repository, est une ressource personnalisée dans Kubernetes qui dirige le service de sauvegarde GDC vers un bucket de stockage d'objets compatible S3 pour stocker les sauvegardes de base de données.
Une configuration appropriée est essentielle pour activer les fonctionnalités de sauvegarde et de restauration des instances DBS telles que PostgreSQL, Oracle et AlloyDB Omni.
Avant de commencer
Avant de commencer, assurez-vous de disposer des éléments suivants :
- Projet : un projet pour héberger le bucket, généralement nommé
backups, avec un accès réservé au compte de service. - Accès : autorisations suffisantes pour interagir avec le serveur de l'API de gestion.
- L'utilisateur doit disposer des rôles suivants au niveau de l'organisation pour créer le dépôt de sauvegarde :
- Administrateur de buckets (
bucket-admin) - Créateur de projet (
project-creator) - Administrateur de sauvegarde de l'organisation (
organization-backup-admin)
- Administrateur de buckets (
- Dans le projet cible :
- Administrateur de projet IAM (
project-iam-admin) - Lecteur de projets d'objets de bucket (
project-bucket-object-viewer) - Administrateur de projet d'objets de bucket (
project-bucket-object-admin) - Administrateur de projet de bucket (
project-bucket-admin) - Lecteur de secrets (
secret-viewer) - Administrateur d'espace de noms (
namespace-admin) - Créateur de sauvegardes (
backup-creator)
- Administrateur de projet IAM (
- L'utilisateur doit disposer des rôles suivants au niveau de l'organisation pour créer le dépôt de sauvegarde :
- Outils :
- La console GDC.
- CLI kubectl configurée pour accéder au serveur d'API de gestion.
Créer un bucket de stockage d'objets
Toutes les étapes suivantes sont effectuées sur le serveur d'API de gestion. Définissez et créez une ressource Bucket. Le nom recommandé dbs-backups pour ce bucket de stockage est utilisé pour le reste de ce document, situé dans l'espace de noms du projet backups. Assurez-vous que le bucket ne dispose d'aucune règle de conservation.
Console
- Connectez-vous à la console GDC de l'organisation.
- Assurez-vous d'être dans le projet
backups. - Accédez à Object Storage > Buckets.
- Cliquez sur Créer un bucket.
- Nommez-le
dbs-backups. - Définissez la description sur
Bucket for DBS backups. - Configurez la classe de stockage selon vos besoins. Par exemple,
Standard. - Pour Sécurité, veillez à ne pas définir de règle de conservation, car cela entraînerait la conservation erronée des bases de données et de leurs sauvegardes.
- Cliquez sur Créer.
API
- Appliquez le fichier manifeste suivant au serveur d'API de gestion :
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: object.gdc.goog/v1
kind: Bucket
metadata:
name: dbs-backups
namespace: backups
spec:
description: "Bucket for DBS backups"
storageClass: "Standard"
EOF
Créer un compte de service et définir des autorisations
Créez un ProjectServiceAccount et accordez-lui les autorisations d'accès au bucket.
Console
- Dans le projet
backups, accédez à Identité et accès > Identités de service. - Cliquez sur Créer une identité de service. La page Détails de l'identité du service s'ouvre.
- Dans le champ Nom de l'identité de service, saisissez
dbs-backup-sa. - Cliquez sur Créer.
- Accédez à Identité et accès > Accès.
- Dans la liste Membre, cliquez sur Ajouter un membre. La page Utilisateurs et rôles s'affiche.
- Sélectionnez Identité du service dans la liste Type de membre.
- Dans la liste Identité du service, sélectionnez
dbs-backup-sapour attribuer une liaison de rôle. - Dans la liste Rôle, sélectionnez Administrateur de projet d'objets de bucket à attribuer à l'identité de service.
- Cliquez sur Ajouter.
API
- Appliquez ces fichiers manifestes au serveur d'API de gestion :
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: resourcemanager.gdc.goog/v1
kind: ProjectServiceAccount
metadata:
name: dbs-backup-sa
namespace: backups
spec: {}
EOF
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f -
<<EOF
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: dbs-backups-readwrite-rolebinding
namespace: backups
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: Role
name: project-bucket-object-admin
subjects:
- kind: ServiceAccount
name: dbs-backup-sa
namespace: backups
EOF
Identifier le secret d'identifiant du compte de service et les détails du bucket
Lorsque vous accordez l'accès au bucket à dbs-backup-sa, GDC crée automatiquement un secret dans le même espace de noms, backups, contenant les identifiants d'accès S3. Vous devez trouver le nom de ce secret et les détails du bucket à l'aide de la CLI (API) kubectl.
Définissez les variables d'environnement :
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERRecherchez le nom du secret :
export BUCKET_CRED_SECRET_NAME=$(kubectl --kubeconfig=${KUBECONFIG} get secret \ -n "${SA_NAMESPACE}" -l object.gdc.goog/subject-type=ServiceAccount -o json | \ jq -r --arg SA_NAME "${SA_NAME}" \ '.items[] | select(.metadata.annotations["object.gdc.goog/subject"] == $SA_NAME and (.metadata.name |startswith("object-storage-key-std-sa-"))) | .metadata.name') echo "Bucket Credential Secret Name: ${BUCKET_CRED_SECRET_NAME}"Cette commande filtre les secrets de l'espace de noms
backupspour trouver celui annoté pour le compte de servicedbs-backup-saet correspondant à la convention d'attribution de noms standard. Pour exécuter cette commande, vous devez disposer du rôle Lecteur de secrets (secret-viewer) dans le projetbackups, ou demander à l'administrateur de la plate-forme qui a créé le compte de service de fournir le nom du secret.Obtenez les détails du point de terminaison et de la région du bucket :
export BUCKET_NAME=dbs-backups export FULL_BUCKET_NAME=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.fullyQualifiedName}') export ENDPOINT=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.endpoint}') export REGION=$(kubectl --kubeconfig=${KUBECONFIG} get bucket -n ${SA_NAMESPACE} ${BUCKET_NAME} -o jsonpath='{.status.region}') echo "FULL_BUCKET_NAME: ${FULL_BUCKET_NAME}" echo "ENDPOINT: ${ENDPOINT}" echo "REGION: ${REGION}"
Créer le BackupRepository
Créez la ressource BackupRepository en référençant le secret identifié dans la section précédente, Identifier le secret d'identification du compte de service et les détails du bucket. Cette étape doit être effectuée à l'aide de la CLI kubectl (API).
Créez le fichier YAML (par exemple,
backup-repo.yaml) en remplaçant les variables de la section précédente :kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF apiVersion: backup.gdc.goog/v1 kind: BackupRepository metadata: name: dbs-backup-repository # This specific name is required for DBS spec: secretReference: namespace: "backups" # Namespace of the Service Account and the auto-generated secret name: BUCKET_CRED_SECRET_NAME endpoint: ENDPOINT type: "S3" s3Options: bucket: FULL_BUCKET_NAME region: REGION forcePathStyle: true importPolicy: "ReadWrite" force: true EOFRemplacez les éléments suivants :
BUCKET_CRED_SECRET_NAME: nom du secret.ENDPOINT: point de terminaison du bucket.FULL_BUCKET_NAME: nom complet du bucket.REGION: région du bucket.
Vérifier le dépôt de sauvegarde
Vérifiez l'état du dépôt pour vous assurer qu'il a été correctement configuré.
Imprimez les informations de votre dépôt de sauvegarde :
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .statusVérifiez que le résultat ressemble à ce qui suit. Un message
NoErrorindique que le dépôt a été configuré comme prévu :NAME TYPE POLICY ERROR dbs-backup-repository S3 ReadWrite NoError status: conditions: - lastTransitionTime: "2025-11-13T00:36:09Z" message: Backup Repository reconciled successfully reason: Ready status: "True" type: Ready initialImportDone: true reconciliationError: NoError sentinelEtag: 9b82fbb7-6ea2-444d-8878-ab91397ae961