En este documento, se describen los pasos para configurar el BackupRepository requerido para el servicio de base de datos (DBS) aislado de Google Distributed Cloud (GDC). Este repositorio, cuyo nombre debe ser dbs-backup-repository, es un recurso personalizado dentro de Kubernetes que dirige el servicio de copia de seguridad de GDC a un bucket de almacenamiento 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 previos:
- Proyecto: Un proyecto para alojar el bucket, que suele llamarse
database-backupsy solo tiene acceso 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 del proyecto de IAM (
project-iam-admin) - Visualizador de objetos del bucket del proyecto (
project-bucket-object-viewer) - Administrador de objetos del bucket del proyecto (
project-bucket-object-admin) - Administrador de buckets del proyecto (
project-bucket-admin) - Administrador de espacio de nombres (
namespace-admin) - Creador de copias de seguridad (
backup-creator)
- Administrador del proyecto de IAM (
- 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
- CLI de kubectl configurada para acceder al servidor de la API de administración
Crea un bucket de almacenamiento de objetos
Todos los pasos posteriores se realizan en el servidor de la API de administración. Define y crea un recurso Bucket. Para el resto de este documento, se supone que el nombre recomendado dbs-backups para este bucket de almacenamiento se encuentra 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 Object Storage > Buckets.
- Haga 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 el caso de 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 Management:
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 un ProjectServiceAccount y otórgale permisos para acceder al bucket.
Console
- En el proyecto
backups, navega a Identidad y acceso > Cuentas de servicio. - Haz clic en Crear cuenta de servicio y asígnale el nombre
dbs-backup-sa. - Otorga permisos:
- Ve a Object Storage > Buckets > dbs-backups > Permissions.
- Haz clic en Agregar principal.
- Selecciona la cuenta de servicio:
dbs-backup-sa. - Selecciona un rol: Un rol que otorga acceso de lectura y escritura a objetos, como Administrador de objetos de Storage.
- 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: Role
metadata:
name: dbs-backups-readwrite-role
namespace: backups
rules:
- apiGroups: ["object.gdc.goog"]
resources: ["bucket"]
resourceNames: ["dbs-backups"]
verbs: ["read-object", "write-object"]
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: dbs-backups-readwrite-role
subjects:
- kind: ServiceAccount
name: dbs-backup-sa
namespace: backups
EOF
Identifica el secreto de las credenciales y los detalles del bucket de la cuenta de servicio
Cuando se otorga acceso al bucket a dbs-backup-sa, GDC crea automáticamente un secreto en el mismo espacio de nombres, backups, que contiene las credenciales de acceso a S3. Debes encontrar el nombre de este secreto.
Console
- Busca el nombre del Secret:
- Navega a Kubernetes Engine > Configuración > Secrets en el proyecto
backups. - Busca un secreto que comience con
object-storage-key-std-sa-y verifica las anotaciones para confirmar queobject.gdc.goog/subjectesdbs-backup-sa. - Anota este nombre secreto.
- Navega a Kubernetes Engine > Configuración > Secrets en el proyecto
- Busca los detalles del bucket:
- Navega a la página de detalles de Object Storage > Buckets > dbs-backups.
- Busca y anota los valores de
ENDPOINT,REGIONyFULL_BUCKET_NAME.
API
Establece las variables de entorno:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERBusca el nombre del secreto:
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 secretos en el espacio de nombres
backupspara encontrar el que está anotado paradbs-backup-say coincide con la convención de nomenclatura estándar.Obtén detalles del extremo y 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 y los detalles del bucket de la cuenta de servicio. Este paso se debe completar con la CLI de kubectl (API).
Crea el archivo YAML, como
backup-repo.yaml, y reemplaza 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 secreto.ENDPOINT: Es el extremo del bucket.FULL_BUCKET_NAME": Es el nombre del bucket completamente calificado.REGION: Es la región del bucket.
Verifica la copia 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. El mensaje
NoErrores la señal de que el repositorio se configuró según lo previsto: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