Membuat repositori cadangan untuk Layanan Database

Dokumen ini menjelaskan langkah-langkah untuk mengonfigurasi BackupRepository yang diperlukan untuk Layanan Database (DBS) air-gapped Google Distributed Cloud (GDC). Repositori ini, yang wajib diberi nama dbs-backup-repository, adalah resource kustom dalam Kubernetes yang mengarahkan layanan pencadangan GDC ke bucket penyimpanan objek yang kompatibel dengan S3 untuk menyimpan cadangan database.

Penyiapan yang tepat sangat penting untuk mengaktifkan fungsi pencadangan dan pemulihan untuk instance DBS seperti PostgreSQL, Oracle, dan AlloyDB Omni.

Sebelum memulai

Sebelum memulai, pastikan Anda memenuhi prasyarat berikut:

  • Project: Project untuk menghosting bucket, biasanya bernama database-backups, dengan akses hanya untuk akun layanan.
  • Akses: Izin yang memadai untuk berinteraksi dengan server API pengelolaan.
    • Pengguna harus memiliki peran tingkat Organisasi berikut untuk membuat repositori cadangan:
      • Admin Bucket (bucket-admin)
      • Project Creator (project-creator)
      • Admin Pencadangan Organisasi (organization-backup-admin)
    • Dalam project target:
      • Project IAM Admin (project-iam-admin)
      • Project Bucket Object Viewer (project-bucket-object-viewer)
      • Project Bucket Object Admin (project-bucket-object-admin)
      • Project Bucket Admin (project-bucket-admin)
      • Admin Namespace (namespace-admin)
      • Pembuat Cadangan (backup-creator)
  • Alat:

Membuat bucket penyimpanan objek

Semua langkah selanjutnya dilakukan di server Management API. Tentukan dan buat resource Bucket. Nama yang direkomendasikan dbs-backups untuk bucket penyimpanan ini diasumsikan untuk bagian selanjutnya dalam dokumen ini, yang berada dalam namespace project backups. Pastikan bucket tidak memiliki kebijakan retensi.

Konsol

  1. Login ke konsol GDC untuk organisasi.
  2. Pastikan Anda berada di project backups.
  3. Buka Object Storage > Buckets.
  4. Klik Create Bucket.
  5. Tetapkan nama bucket sebagai dbs-backups.
  6. Tetapkan deskripsi sebagai Bucket for DBS backups.
  7. Konfigurasi kelas penyimpanan sesuai kebutuhan. Misalnya, Standard.
  8. Untuk Keamanan, pastikan Anda tidak menetapkan kebijakan retensi, karena hal ini akan menyebabkan database dan cadangannya disimpan secara keliru.
  9. Klik Create.

API

  • Terapkan manifes berikut ke server Management API:
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

Membuat akun layanan dan menyetel izin

Buat ProjectServiceAccount dan berikan izin untuk mengakses bucket.

Konsol

  1. Di project backups, buka Identity & Access > Service Accounts.
  2. Klik Create Service Account, beri nama dbs-backup-sa.
  3. Memberikan izin:
    1. Buka Object Storage > Buckets > dbs-backups > Permissions.
    2. Klik Add principal.
    3. Pilih Akun Layanan: dbs-backup-sa.
    4. Pilih Peran: Peran yang memberikan akses objek baca dan tulis, seperti Storage Object Admin.
    5. Klik Tambahkan.

API

  • Terapkan manifes ini ke server Management API:
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

Identifikasi secret kredensial akun layanan dan detail bucket

Setelah memberikan akses bucket ke dbs-backup-sa, GDC akan otomatis membuat secret di namespace yang sama, backups, yang berisi kredensial akses S3. Anda perlu menemukan nama secret ini.

Konsol

  1. Temukan nama rahasia:
    1. Buka Kubernetes Engine > Configuration > Secrets di project backups.
    2. Cari rahasia yang dimulai dengan object-storage-key-std-sa- dan periksa anotasi untuk mengonfirmasi bahwa object.gdc.goog/subject adalah dbs-backup-sa.
    3. Catat nama rahasia ini.
  2. Temukan detail bucket:
    1. Buka halaman detail Object Storage > Buckets > dbs-backups.
    2. Temukan dan catat ENDPOINT, REGION, dan FULL_BUCKET_NAME.

API

  1. Menetapkan variabel lingkungan:

    export SA_NAMESPACE="backups"
    export SA_NAME="dbs-backup-sa"
    export KUBECONFIG=MANAGEMENT_API_SERVER
    
  2. Temukan nama rahasia:

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

    Perintah ini memfilter secret di namespace backups untuk menemukan secret yang dianotasi untuk dbs-backup-sa dan cocok dengan konvensi penamaan standar.

  3. Dapatkan detail endpoint dan region 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}"'
    

Buat BackupRepository

Buat resource BackupRepository, dengan mereferensikan secret yang diidentifikasi di bagian sebelumnya, Identifikasi detail bucket dan secret kredensial akun layanan. Langkah ini harus diselesaikan menggunakan kubectl CLI (API).

  • Buat file YAML seperti backup-repo.yaml, dengan mengganti variabel yang ditemukan di bagian sebelumnya:

    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
    

    Ganti kode berikut:

    • BUCKET_CRED_SECRET_NAME: nama secret.
    • ENDPOINT: endpoint bucket.
    • FULL_BUCKET_NAME": nama bucket yang sepenuhnya memenuhi syarat.
    • REGION: region bucket.

Memverifikasi cadangan

Periksa status repositori untuk memastikan repositori disiapkan dengan benar.

  1. Cetak informasi untuk repositori cadangan Anda:

    kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .status
    
  2. Pastikan output Anda terlihat mirip dengan berikut ini. Pesan NoError adalah sinyal bahwa repositori telah disiapkan sesuai yang diharapkan:

    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