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)
- Bucket-Administrator (
- 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)
- Projekt-IAM-Administrator (
- Der Nutzer muss die folgenden Rollen auf Organisationsebene haben, um das Sicherungs-Repository zu erstellen:
- 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
- Melden Sie sich in der GDC-Konsole für die Organisation an.
- Achten Sie darauf, dass Sie sich im Projekt
backupsbefinden. - Rufen Sie Object Storage > Buckets auf.
- Klicken Sie auf Bucket erstellen.
- Legen Sie
dbs-backupsals Bucket-Namen fest. - Legen Sie die Beschreibung als
Bucket for DBS backupsfest. - Konfigurieren Sie die Speicherklasse nach Bedarf. Beispiel:
Standard. - Für Sicherheit dürfen Sie keine Aufbewahrungsrichtlinie festlegen, da dies dazu führt, dass Datenbanken und ihre Sicherungen fälschlicherweise aufbewahrt werden.
- 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
- Rufen Sie im
backups-Projekt Identität & Zugriff > Dienstkonten auf. - Klicken Sie auf Dienstkonto erstellen und geben Sie
dbs-backup-saals Namen ein. - Berechtigungen erteilen:
- Rufen Sie Object Storage > Buckets > dbs-backups > Permissions auf.
- Klicken Sie auf Hauptkonto hinzufügen.
- Wählen Sie das Dienstkonto aus:
dbs-backup-sa. - Rolle auswählen: Eine Rolle, die Lese- und Schreibzugriff auf Objekte gewährt, z. B. Storage-Objekt-Administrator.
- 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
- Suchen Sie den Secret-Namen:
- Rufen Sie im
backups-Projekt Kubernetes Engine > Konfiguration > Secrets auf. - Suchen Sie nach einem Secret, das mit
object-storage-key-std-sa-beginnt, und prüfen Sie die Anmerkungen, um zu bestätigen, dassobject.gdc.goog/subjectdbs-backup-saist. - Notieren Sie sich diesen Secret-Namen.
- Rufen Sie im
- Bucket-Details aufrufen:
- Rufen Sie die Detailseite für Object Storage > Buckets > dbs-backups auf.
- Suchen Sie nach der
ENDPOINT, derREGIONund derFULL_BUCKET_NAMEund notieren Sie sich diese.
API
Legen Sie Umgebungsvariablen fest:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERSuchen 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
backupsgefiltert, um das Secret zu finden, das fürdbs-backup-saannotiert ist und der Standardnamenskonvention entspricht.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 EOFErsetzen 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.
Informationen zu Ihrem Sicherungs-Repository drucken:
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .statusPrüfen Sie, ob die Ausgabe in etwa so aussieht. Die Meldung
NoErrorist 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