En este documento se describen los pasos para configurar los BackupRepository necesarios para el servicio de base de datos (DBS) aislado de Google Distributed Cloud (GDC). Este repositorio, cuyo nombre es obligatorio (dbs-backup-repository), es un recurso personalizado 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 bases de datos.
Una configuración adecuada es fundamental para habilitar las funciones de copia de seguridad y restauración de instancias de DBS, como PostgreSQL, Oracle y AlloyDB Omni.
Antes de empezar
Antes de empezar, asegúrate de que cumples los siguientes requisitos:
- Proyecto: un proyecto para alojar el segmento, normalmente llamado
database-backups, con acceso solo para cuentas de servicio. - Acceso: permisos suficientes para interactuar con el servidor de la API Management.
- El usuario debe tener los siguientes roles a nivel de organización para crear el repositorio de copias de seguridad:
- Administrador de segmento (
bucket-admin) - Creador del proyecto (
project-creator) - Administrador de copias de seguridad de la organización (
organization-backup-admin)
- Administrador de segmento (
- En el proyecto de destino, haz lo siguiente:
- Administrador de gestión de identidades y accesos de proyectos (
project-iam-admin) - Lector de objetos de los contenedores de proyectos (
project-bucket-object-viewer) - Administrador de objetos de un bucket de un proyecto (
project-bucket-object-admin) - Administrador de cubos de proyecto (
project-bucket-admin) - Administrador de espacios de nombres (
namespace-admin) - Creador de copias de seguridad (
backup-creator)
- Administrador de gestión de identidades y accesos de proyectos (
- El usuario debe tener los siguientes roles a nivel de 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 gestión.
Crear un segmento de almacenamiento de objetos
Todos los pasos siguientes se realizan en el servidor de la API de gestión. Define y crea un Bucket. En el resto de este documento, se da por supuesto el nombre recomendado dbs-backups para este contenedor de almacenamiento, que se encuentra en el espacio de nombres del proyecto backups. Asegúrate de que el segmento no tenga ninguna política de retención.
Consola
- Inicia sesión en la consola de GDC de la organización.
- Asegúrate de que estás en el proyecto
backups. - Vaya a Object Storage > Buckets.
- Haz clic en Crear segmento.
- Asigna el nombre
dbs-backupsal segmento. - Define 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 definir una política de conservación, ya que esto provocará que las bases de datos y sus copias de seguridad se conserven de forma incorrecta.
- Haz clic en Crear.
API
- Aplica el siguiente manifiesto al servidor de la API 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
Crear una cuenta de servicio y definir permisos
Crea un ProjectServiceAccount y concédele permisos para acceder al segmento.
Consola
- En el proyecto
backups, ve a Identidad y acceso > Cuentas de servicio. - Haz clic en Crear cuenta de servicio y asígnale el nombre
dbs-backup-sa. - Concede permisos:
- Ve a Object Storage (Almacenamiento de objetos) > Buckets (Contenedores) > dbs-backups > Permissions (Permisos).
- Haz clic en Añadir principal.
- Selecciona Cuenta de servicio:
dbs-backup-sa. - Selecciona un rol que conceda acceso de lectura y escritura a los objetos, como Administrador de objetos de Storage.
- Haz clic en Añadir.
API
- Aplica estos manifiestos al servidor de la API de gestió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
Identificar el secreto de las credenciales de la cuenta de servicio y los detalles del segmento
Cuando se concede acceso al segmento a dbs-backup-sa, GDC crea automáticamente un secreto en el mismo espacio de nombres, backups, que contiene las credenciales de acceso de S3. Debes encontrar el nombre de este secreto.
Consola
- Busca el nombre del secreto:
- Vaya a Kubernetes Engine > Configuración > Secretos en el proyecto
backups. - Busca un secreto que empiece por
object-storage-key-std-sa-y comprueba las anotaciones para confirmar queobject.gdc.goog/subjectesdbs-backup-sa. - Anota este nombre de secreto.
- Vaya a Kubernetes Engine > Configuración > Secretos en el proyecto
- Busca los detalles del segmento:
- Vaya a Object Storage > Buckets > página de detalles de dbs-backups.
- Busca y anota el
ENDPOINT, elREGIONy elFULL_BUCKET_NAME.
API
Define las variables de entorno:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERBusca el nombre 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 del espacio de nombres
backupspara encontrar el que tiene la anotacióndbs-backup-say coincide con la convención de nomenclatura estándar.Obtener los detalles del endpoint y la región de un segmento:
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 haciendo referencia al secreto identificado en la sección anterior, Identifica el secreto de las credenciales de la cuenta de servicio y los detalles del segmento. Este paso debe completarse con la CLI de kubectl (API).
Crea el archivo YAML, como
backup-repo.yaml, sustituyendo 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 EOFHaz los cambios siguientes:
BUCKET_CRED_SECRET_NAME: el nombre del secreto.ENDPOINT: el endpoint del bucket.FULL_BUCKET_NAME": el nombre de segmento completo.REGION: la región del grupo.
Verificar la copia de seguridad
Comprueba el estado del repositorio para asegurarte de que se ha 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 .statusComprueba que el resultado sea similar al siguiente. Un mensaje
NoErrores la señal de que el repositorio se ha configurado correctamente: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