En este documento, se describen los pasos para configurar el BackupRepository requerido para el servicio de base de datos (DBS) de Google Distributed Cloud (GDC) aislado. Este repositorio, que debe llamarse dbs-backup-repository, es un recurso personalizado dentro de Kubernetes que dirige el servicio de copia de seguridad de GDC a un bucket de almacén de objetos compatible con S3 para almacenar copias de seguridad de la base de datos.
La configuración adecuada es fundamental para habilitar las funciones de copia de seguridad y restablecimiento de las instancias de DBS, como PostgreSQL, Oracle y AlloyDB Omni.
Antes de comenzar
Antes de comenzar, asegúrate de cumplir con los siguientes requisitos:
- Proyecto: Un proyecto para alojar el bucket, que suele llamarse
backups, con acceso solo a la cuenta de servicio. - Acceso: Permisos suficientes para interactuar con el servidor de la API de administración.
- El usuario debe tener los siguientes roles a nivel de la organización para crear el repositorio de copias de seguridad:
- Administrador de buckets (
bucket-admin) - Creador del proyecto (
project-creator) - Administrador de copias de seguridad de la organización (
organization-backup-admin)
- Administrador de buckets (
- Dentro del proyecto de destino:
- Administrador de IAM del proyecto (
project-iam-admin) - Visualizador de proyectos de objetos de bucket (
project-bucket-object-viewer) - Administrador de proyectos de objetos de bucket (
project-bucket-object-admin) - Administrador de proyectos de buckets (
project-bucket-admin) - Visualizador de secretos (
secret-viewer) - Administrador de espacios de nombres (
namespace-admin) - Creador de copias de seguridad (
backup-creator)
- Administrador de IAM del proyecto (
- El usuario debe tener los siguientes roles a nivel de la organización para crear el repositorio de copias de seguridad:
- Herramientas:
- La consola de GDC.
- La CLI de kubectl configurada para acceder al servidor de la API de administración.
Crea un bucket de almacenamiento de objetos
Todos los pasos siguientes se realizan en el servidor de la API de administración. Define y crea un recurso Bucket. Se asume el nombre recomendado dbs-backups para este bucket de almacenamiento durante el resto de este documento, ubicado dentro del espacio de nombres del proyecto backups. Asegúrate de que el bucket no tenga ninguna política de retención.
Console
- Accede a la consola de GDC de la organización.
- Asegúrate de estar en el proyecto
backups. - Navega a Almacén de objetos > Buckets.
- Haz clic en Crear bucket.
- Establece el nombre del bucket como
dbs-backups. - Establece la descripción como
Bucket for DBS backups. - Configura la clase de almacenamiento según sea necesario. Por ejemplo,
Standard. - En Seguridad, asegúrate de no establecer una política de retención, ya que esto hará que las bases de datos y sus copias de seguridad se retengan de forma errónea.
- Haz clic en Crear.
API
- Aplica el siguiente manifiesto al servidor de la API de administración:
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
Crea una cuenta de servicio y configura los permisos
Crea una ProjectServiceAccount y otórgale permisos para acceder al bucket.
Console
- En el proyecto
backups, navega a Identidad y acceso > Identidades de servicio. - Haz clic en Crear identidad de servicio. Se abrirá la página Detalles de la identidad del servicio.
- En el campo Nombre de la identidad del servicio, ingresa
dbs-backup-sa. - Haz clic en Crear.
- Ve a Identidad y acceso > Acceso.
- En la lista Miembro, haz clic en Agregar miembro. Verás la página Usuarios y roles.
- Selecciona Identidad de servicio en la lista Tipo de miembro.
- En la lista Identidad de servicio, selecciona
dbs-backup-sapara asignar una vinculación de rol. - En la lista Rol, selecciona Administrador de proyectos de objetos de bucket para asignarlo a la identidad de servicio.
- Haz clic en Agregar.
API
- Aplica estos manifiestos al servidor de la API de administración:
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
Identifica el secreto de credenciales de la cuenta de servicio y los detalles del bucket
Cuando se otorga acceso al bucket al dbs-backup-sa, GDC crea automáticamente un Secret en el mismo espacio de nombres, backups, que contiene las credenciales de acceso de S3. Debes encontrar el nombre de este Secret y los detalles del bucket con la CLI (API) de kubectl.
Establece las variables de entorno:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERBusca el nombre del 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}"Este comando filtra los Secrets en el espacio de nombres
backupspara encontrar el que tiene la anotación de la cuenta de serviciodbs-backup-say que coincide con la convención de nombres estándar. Para ejecutar este comando, debes tener el rol de visualizador de secretos (secret-viewer) en el proyectobackupso pedirle al administrador de la plataforma que creó la cuenta de servicio que proporcione el nombre del secreto.Obtén los detalles del extremo y de la región del 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}"
Crea el BackupRepository
Crea el recurso BackupRepository, que hace referencia al secreto identificado en la sección anterior, Identifica el secreto de credenciales de la cuenta de servicio y los detalles del bucket. Este paso se debe completar con la CLI de kubectl (API).
Crea el archivo YAML, como
backup-repo.yaml, y sustituye las variables que se encuentran en la sección anterior: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 EOFReemplaza lo siguiente:
BUCKET_CRED_SECRET_NAME: Es el nombre del Secret.ENDPOINT: Es el extremo del bucket.FULL_BUCKET_NAME: Es el nombre del bucket completamente calificado.REGION: Es la región del bucket.
Verifica el repositorio de copias de seguridad
Verifica el estado del repositorio para asegurarte de que se haya configurado correctamente.
Imprime la información de tu repositorio de copias de seguridad:
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .statusVerifica que el resultado sea similar al siguiente. Un mensaje
NoErrores la señal de que el repositorio se configuró como se esperaba: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