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)
- Admin Bucket (
- 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)
- Project IAM Admin (
- Pengguna harus memiliki peran tingkat Organisasi berikut untuk membuat repositori cadangan:
- Alat:
- Konsol GDC.
- kubectl CLI dikonfigurasi untuk mengakses server API pengelolaan.
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
- Login ke konsol GDC untuk organisasi.
- Pastikan Anda berada di project
backups. - Buka Object Storage > Buckets.
- Klik Create Bucket.
- Tetapkan nama bucket sebagai
dbs-backups. - Tetapkan deskripsi sebagai
Bucket for DBS backups. - Konfigurasi kelas penyimpanan sesuai kebutuhan. Misalnya,
Standard. - Untuk Keamanan, pastikan Anda tidak menetapkan kebijakan retensi, karena hal ini akan menyebabkan database dan cadangannya disimpan secara keliru.
- 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
- Di project
backups, buka Identity & Access > Service Accounts. - Klik Create Service Account, beri nama
dbs-backup-sa. - Memberikan izin:
- Buka Object Storage > Buckets > dbs-backups > Permissions.
- Klik Add principal.
- Pilih Akun Layanan:
dbs-backup-sa. - Pilih Peran: Peran yang memberikan akses objek baca dan tulis, seperti Storage Object Admin.
- 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
- Temukan nama rahasia:
- Buka Kubernetes Engine > Configuration > Secrets di project
backups. - Cari rahasia yang dimulai dengan
object-storage-key-std-sa-dan periksa anotasi untuk mengonfirmasi bahwaobject.gdc.goog/subjectadalahdbs-backup-sa. - Catat nama rahasia ini.
- Buka Kubernetes Engine > Configuration > Secrets di project
- Temukan detail bucket:
- Buka halaman detail Object Storage > Buckets > dbs-backups.
- Temukan dan catat
ENDPOINT,REGION, danFULL_BUCKET_NAME.
API
Menetapkan variabel lingkungan:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVERTemukan 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
backupsuntuk menemukan secret yang dianotasi untukdbs-backup-sadan cocok dengan konvensi penamaan standar.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 EOFGanti 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.
Cetak informasi untuk repositori cadangan Anda:
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .statusPastikan output Anda terlihat mirip dengan berikut ini. Pesan
NoErroradalah 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