Sicherungs-Repository für Database Service erstellen

In diesem Dokument wird beschrieben, wie Sie die erforderlichen BackupRepository für den GDC-DBS (Google Distributed Cloud Database Service) mit Air Gap konfigurieren. Dieses Repository mit dem obligatorischen Namen dbs-backup-repository ist eine benutzerdefinierte Ressource in Kubernetes, die den GDC-Sicherungsdienst auf einen S3-kompatiblen Objektspeicher-Bucket verweist, in dem Datenbanksicherungen gespeichert werden.

Eine korrekte Einrichtung ist entscheidend, um Sicherungs- und Wiederherstellungsfunktionen für DBS-Instanzen wie PostgreSQL, Oracle und AlloyDB Omni zu aktivieren.

Hinweise

Bevor Sie beginnen, sollten Sie prüfen, ob die folgenden Voraussetzungen erfüllt sind:

  • Projekt:Ein Projekt zum Hosten des Buckets, in der Regel mit dem Namen database-backups, mit Zugriff nur über das Dienstkonto.
  • Zugriff:Ausreichende Berechtigungen für die Interaktion mit dem Management-API-Server.
    • Der Nutzer muss die folgenden Rollen auf Organisationsebene haben, um das Sicherungs-Repository zu erstellen:
      • Bucket-Administrator (bucket-admin)
      • Projektersteller (project-creator)
      • Administrator für Organisationssicherungen (organization-backup-admin)
    • Innerhalb des Zielprojekts:
      • Projekt-IAM-Administrator (project-iam-admin)
      • Project Bucket Object Viewer (project-bucket-object-viewer)
      • Administrator für Projekt-Bucket-Objekte (project-bucket-object-admin)
      • Projekt-Bucket-Administrator (project-bucket-admin)
      • Namespace-Administrator (namespace-admin)
      • Ersteller von Sicherungen (backup-creator)
  • Tools:
    • Die GDC-Konsole.
    • Die kubectl-Befehlszeile ist für den Zugriff auf den Management API-Server konfiguriert.

Objektspeicher-Bucket erstellen

Alle nachfolgenden Schritte werden auf dem Management-API-Server ausgeführt. Bucket-Ressource definieren und erstellen Für den Rest dieses Dokuments wird der empfohlene Name dbs-backups für diesen Speicher-Bucket im Projekt-Namespace backups angenommen. Achten Sie darauf, dass für den Bucket keine Aufbewahrungsrichtlinie festgelegt ist.

Console

  1. Melden Sie sich in der GDC-Konsole für die Organisation an.
  2. Achten Sie darauf, dass Sie sich im Projekt backups befinden.
  3. Rufen Sie Object Storage > Buckets auf.
  4. Klicken Sie auf Bucket erstellen.
  5. Legen Sie dbs-backups als Bucket-Namen fest.
  6. Legen Sie die Beschreibung als Bucket for DBS backups fest.
  7. Konfigurieren Sie die Speicherklasse nach Bedarf. Beispiel: Standard.
  8. Für Sicherheit dürfen Sie keine Aufbewahrungsrichtlinie festlegen, da dies dazu führt, dass Datenbanken und ihre Sicherungen fälschlicherweise aufbewahrt werden.
  9. Klicken Sie auf Erstellen.

API

  • Wenden Sie das folgende Manifest auf den Verwaltungs-API-Server an:
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

Dienstkonto erstellen und Berechtigungen festlegen

Erstellen Sie ein ProjectServiceAccount und gewähren Sie ihm Berechtigungen für den Zugriff auf den Bucket.

Console

  1. Rufen Sie im backups-Projekt Identität & Zugriff > Dienstkonten auf.
  2. Klicken Sie auf Dienstkonto erstellen und geben Sie dbs-backup-sa als Namen ein.
  3. Berechtigungen erteilen:
    1. Rufen Sie Object Storage > Buckets > dbs-backups > Permissions auf.
    2. Klicken Sie auf Hauptkonto hinzufügen.
    3. Wählen Sie das Dienstkonto aus: dbs-backup-sa.
    4. Rolle auswählen: Eine Rolle, die Lese- und Schreibzugriff auf Objekte gewährt, z. B. Storage-Objekt-Administrator.
    5. Klicken Sie auf Hinzufügen.

API

  • Wenden Sie diese Manifeste auf den Management API-Server an:
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

Secret für Anmeldedaten und Bucket-Details des Dienstkontos ermitteln

Wenn Sie dem dbs-backup-sa Bucket-Zugriff gewähren, erstellt GDC automatisch ein Secret im gleichen Namespace, backups, das die S3-Zugriffsanmeldedaten enthält. Sie müssen den Namen dieses Secrets herausfinden.

Console

  1. Suchen Sie den Secret-Namen:
    1. Rufen Sie im backups-Projekt Kubernetes Engine > Konfiguration > Secrets auf.
    2. Suchen Sie nach einem Secret, das mit object-storage-key-std-sa- beginnt, und prüfen Sie die Anmerkungen, um zu bestätigen, dass object.gdc.goog/subject dbs-backup-sa ist.
    3. Notieren Sie sich diesen Secret-Namen.
  2. Bucket-Details aufrufen:
    1. Rufen Sie die Detailseite für Object Storage > Buckets > dbs-backups auf.
    2. Suchen Sie nach der ENDPOINT, der REGION und der FULL_BUCKET_NAME und notieren Sie sich diese.

API

  1. Legen Sie Umgebungsvariablen fest:

    export SA_NAMESPACE="backups"
    export SA_NAME="dbs-backup-sa"
    export KUBECONFIG=MANAGEMENT_API_SERVER
    
  2. Suchen Sie den Secret-Namen:

    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}"
    

    Mit diesem Befehl werden Secrets im Namespace backups gefiltert, um das Secret zu finden, das für dbs-backup-sa annotiert ist und der Standardnamenskonvention entspricht.

  3. Bucket-Endpunkt und Regionsdetails abrufen:

    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}"'
    

BackupRepository erstellen

Erstellen Sie die BackupRepository-Ressource und verweisen Sie auf das Secret, das im vorherigen Abschnitt Secret für Anmeldedaten des Dienstkontos und Bucket-Details ermitteln identifiziert wurde. Dieser Schritt muss mit der kubectl-Befehlszeile (API) ausgeführt werden.

  • Erstellen Sie die YAML-Datei, z. B. backup-repo.yaml, und ersetzen Sie die Variablen aus dem vorherigen Abschnitt:

    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
    

    Ersetzen Sie Folgendes:

    • BUCKET_CRED_SECRET_NAME: der Name des Secrets.
    • ENDPOINT: der Endpunkt des Buckets.
    • FULL_BUCKET_NAME": Der vollständig qualifizierte Bucket-Name.
    • REGION: die Region des Buckets.

Sicherung überprüfen

Prüfen Sie den Repository-Status, um sicherzugehen, dass es richtig eingerichtet wurde.

  1. Informationen zu Ihrem Sicherungs-Repository drucken:

    kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .status
    
  2. Prüfen Sie, ob die Ausgabe in etwa so aussieht. Die Meldung NoError ist ein Signal dafür, dass das Repository wie erwartet eingerichtet wurde:

    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