Membuat repositori cadangan untuk Layanan Database

Dokumen ini menjelaskan langkah-langkah untuk mengonfigurasi BackupRepository yang diperlukan untuk Database Service (DBS) Google Distributed Cloud (GDC) dengan air gap. 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 memiliki prasyarat berikut:

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

Membuat bucket penyimpanan objek

Semua langkah selanjutnya dilakukan di server API pengelolaan. Menentukan dan membuat resource Bucket. Nama yang direkomendasikan dbs-backups untuk bucket penyimpanan ini diasumsikan untuk bagian selanjutnya dari dokumen ini, yang terletak 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 Penyimpanan Objek > Bucket.
  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 dipertahankan secara keliru.
  9. Klik Create.

API

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

Buat ProjectServiceAccount dan beri izin untuk mengakses bucket.

Konsol

  1. Di project backups, buka Identity & Access > Service identities.
  2. Klik Create Service Identity. Halaman Service Identity details akan terbuka.
  3. Di kolom Service identity name, masukkan dbs-backup-sa.
  4. Klik Create.
  5. Buka Identitas & Akses > Akses.
  6. Di daftar Anggota, klik Tambahkan anggota. Anda akan melihat halaman Pengguna dan peran.
  7. Pilih Service identity dalam daftar Member type.
  8. Di daftar Service identity, pilih dbs-backup-sa untuk menetapkan binding peran.
  9. Dalam daftar Role, pilih Bucket Object Project Admin untuk ditetapkan ke identitas layanan.
  10. Klik Tambahkan.

API

  • Terapkan manifes ini ke server API pengelolaan:
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: RoleBinding
metadata:
  name: dbs-backups-readwrite-rolebinding
  namespace: backups
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: project-bucket-object-admin
subjects:
- kind: ServiceAccount
  name: dbs-backup-sa
  namespace: backups
EOF

Mengidentifikasi secret kredensial dan detail bucket akun layanan

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 dan detail bucket menggunakan kubectl CLI (API).

  1. Menetapkan variabel lingkungan:

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

    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 akun layanan dbs-backup-sa dan cocok dengan konvensi penamaan standar. Untuk menjalankan perintah ini, Anda harus memiliki peran Secret Viewer (secret-viewer) di project backups, atau meminta Administrator Platform yang membuat akun layanan untuk memberikan nama secret.

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

Membuat BackupRepository

Buat resource BackupRepository, dengan merujuk ke secret yang diidentifikasi di bagian sebelumnya, Mengidentifikasi secret kredensial akun layanan dan detail bucket. 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 repositori cadangan

Periksa status repositori untuk memastikan repositori telah 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 seperti 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