Crea un repositorio de copias de seguridad para el servicio de bases de datos

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-backups y 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)
    • 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)
  • Herramientas:

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

  1. Accede a la consola de GDC de la organización.
  2. Asegúrate de estar en el proyecto backups.
  3. Navega a Object Storage > Buckets.
  4. Haga clic en Crear bucket.
  5. Establece el nombre del bucket como dbs-backups.
  6. Establece la descripción como Bucket for DBS backups.
  7. Configura la clase de almacenamiento según sea necesario. Por ejemplo, Standard.
  8. 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.
  9. 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

  1. En el proyecto backups, navega a Identidad y acceso > Cuentas de servicio.
  2. Haz clic en Crear cuenta de servicio y asígnale el nombre dbs-backup-sa.
  3. Otorga permisos:
    1. Ve a Object Storage > Buckets > dbs-backups > Permissions.
    2. Haz clic en Agregar principal.
    3. Selecciona la cuenta de servicio: dbs-backup-sa.
    4. Selecciona un rol: Un rol que otorga acceso de lectura y escritura a objetos, como Administrador de objetos de Storage.
    5. 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

  1. Busca el nombre del Secret:
    1. Navega a Kubernetes Engine > Configuración > Secrets en el proyecto backups.
    2. Busca un secreto que comience con object-storage-key-std-sa- y verifica las anotaciones para confirmar que object.gdc.goog/subject es dbs-backup-sa.
    3. Anota este nombre secreto.
  2. Busca los detalles del bucket:
    1. Navega a la página de detalles de Object Storage > Buckets > dbs-backups.
    2. Busca y anota los valores de ENDPOINT, REGION y FULL_BUCKET_NAME.

API

  1. Establece las variables de entorno:

    export SA_NAMESPACE="backups"
    export SA_NAME="dbs-backup-sa"
    export KUBECONFIG=MANAGEMENT_API_SERVER
    
  2. Busca 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 backups para encontrar el que está anotado para dbs-backup-sa y coincide con la convención de nomenclatura estándar.

  3. 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
      EOF
    

    Reemplaza 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.

  1. Imprime la información de tu repositorio de copias de seguridad:

    kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .status
    
  2. Verifica que el resultado sea similar al siguiente. El mensaje NoError es 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