本文說明如何為 Google Distributed Cloud (GDC) 實體隔離環境的 Database Service (DBS) 設定必要 BackupRepository。這個存放區 (強制命名為 dbs-backup-repository) 是 Kubernetes 中的自訂資源,可將 GDC 備份服務導向與 S3 相容的物件儲存空間值區,用於儲存資料庫備份。
正確設定是啟用 DBS 執行個體 (例如 PostgreSQL、Oracle 和 AlloyDB Omni) 備份和還原功能的關鍵。
事前準備
開始之前,請先確認下列事項:
- 專案:用於代管值區的專案,通常命名為
database-backups,且僅限服務帳戶存取。 - 存取權:與管理 API 伺服器互動的足夠權限。
- 使用者必須具備下列機構層級角色,才能建立備份存放區:
- Bucket 管理員 (
bucket-admin) - 專案建立者 (
project-creator) - 組織備份管理員 (
organization-backup-admin)
- Bucket 管理員 (
- 在目標專案中:
- 專案 IAM 管理員 (
project-iam-admin) - 專案 Bucket 物件檢視者 (
project-bucket-object-viewer) - 專案 Bucket 物件管理員 (
project-bucket-object-admin) - 專案 Bucket 管理員 (
project-bucket-admin) - 命名空間管理員 (
namespace-admin) - 備份建立者 (
backup-creator)
- 專案 IAM 管理員 (
- 使用者必須具備下列機構層級角色,才能建立備份存放區:
- 工具:
- GDC 控制台。
- kubectl CLI 已設定為存取管理 API 伺服器。
建立物件儲存空間值區
後續所有步驟都會在管理 API 伺服器中執行。定義及建立 Bucket 資源。本文其餘部分會假設這個儲存空間值區的建議名稱為 dbs-backups,位於 backups 專案命名空間中。確認 bucket 沒有任何資料保留政策。
控制台
- 登入機構的 GDC 控制台。
- 確認您位於
backups專案中。 - 依序前往「物件儲存空間」>「值區」。
- 按一下「建立值區」。
- 將 bucket 名稱設為
dbs-backups。 - 將說明設為
Bucket for DBS backups。 - 視需要設定儲存空間級別。例如
Standard。 - 如果是安全性,請不要設定保留政策,否則資料庫及其備份檔會遭到錯誤保留。
- 點選「建立」。
API
- 將下列資訊清單套用至管理 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
建立服務帳戶並設定權限
建立 ProjectServiceAccount,並授予存取 bucket 的權限。
控制台
- 在
backups專案中,依序前往「身分與存取權」>「服務帳戶」。 - 按一下「建立服務帳戶」,並將其命名為
dbs-backup-sa。 - 授予權限:
- 依序前往「Object Storage」>「Buckets」>「dbs-backups」>「Permissions」。
- 按一下「Add principal」(新增主體)。
- 選取服務帳戶:
dbs-backup-sa。 - 選取角色:授予物件讀取和寫入存取權的角色,例如「Storage 物件管理員」。
- 按一下「新增」。
API
- 將這些資訊清單套用至管理 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
找出服務帳戶的憑證密碼和 bucket 詳細資料
將值區存取權授予 dbs-backup-sa 後,GDC 會在相同命名空間 backups 中自動建立密鑰,內含 S3 存取憑證。您需要找出這個密鑰的名稱。
控制台
- 找出密鑰名稱:
- 在
backups專案中,依序前往「Kubernetes Engine」 >「Configuration」 >「Secrets」。 - 找出以
object-storage-key-std-sa-開頭的密碼,並檢查註解,確認object.gdc.goog/subject為dbs-backup-sa。 - 請記下這個密鑰名稱。
- 在
- 找出 bucket 詳細資料:
- 依序前往「物件儲存空間」 >「buckets」 >「dbs-backups」詳細資料頁面。
- 找出並記下
ENDPOINT、REGION和FULL_BUCKET_NAME。
API
設定環境變數:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVER找出密鑰名稱:
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}"這項指令會篩選
backups命名空間中的密鑰,找出已註解dbs-backup-sa且符合標準命名慣例的密鑰。取得 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}"'
建立 BackupRepository
建立 BackupRepository 資源,並參照上一節「找出服務帳戶的憑證密鑰和 bucket 詳細資料」中識別的密鑰。您必須使用 kubectl CLI (API) 完成這個步驟。
建立 YAML 檔案 (例如
backup-repo.yaml),並替換前一節中的變數: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更改下列內容:
BUCKET_CRED_SECRET_NAME:密鑰名稱。ENDPOINT:值區的端點。FULL_BUCKET_NAME":完整 bucket 名稱。REGION:值區的區域。
驗證備份
檢查存放區狀態,確認設定正確無誤。
列印備份存放區的資訊:
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .status確認輸出內容與下列內容相似。
NoError訊息表示存放區已如預期設定完成: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