本文說明如何為 Google Distributed Cloud (GDC) 實體隔離資料庫服務 (DBS) 設定必要的 BackupRepository。這個存放區必須命名為 dbs-backup-repository,是 Kubernetes 中的自訂資源,可將 GDC 備份服務導向與 S3 相容的物件儲存庫 bucket,用於儲存資料庫備份。
如要為 PostgreSQL、Oracle 和 AlloyDB Omni 等 DBS 執行個體啟用備份與還原功能,正確設定至關重要。
事前準備
開始前,請確認您符合下列必要條件:
- 專案:用於託管 bucket 的專案,通常名為
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) - Secret 檢視者 (
secret-viewer) - 命名空間管理員 (
namespace-admin) - 備份建立者 (
backup-creator)
- IAM 專案管理員 (
- 使用者必須具備下列組織層級角色,才能建立備份存放區:
- 工具:
- GDC 控制台。
- 已設定 kubectl CLI,可存取管理 API 伺服器。
建立物件儲存庫 bucket
所有後續步驟都會在 Management API 伺服器中執行。定義及建立 Bucket 資源。本文件其餘部分假設這個 Storage bucket 的建議名稱為 dbs-backups,位於 backups 專案命名空間中。確認 bucket 沒有任何資料保留政策。
控制台
- 登入機構的 GDC 控制台。
- 確認您位於
backups專案。 - 依序前往「物件儲存庫」 >「bucket」。
- 點選「建立 bucket」。
- 將 bucket 命名為
dbs-backups。 - 將說明設為
Bucket for DBS backups。 - 視需要設定儲存空間級別。例如
Standard。 - 在「安全性」部分,請務必不要設定資料保留政策,否則資料庫和備份會不當保留。
- 點選「建立」。
API
- 將下列資訊清單套用至 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
建立服務帳戶並設定權限
建立 ProjectServiceAccount 並授予 bucket 存取權。
控制台
- 在
backups專案中,依序前往「Identity & Access」>「Service identities」(服務身分)。 - 按一下「Create Service Identity」(建立服務身分)。「Service Identity details」(服務身分詳細資料) 頁面隨即開啟。
- 在「Service identity name」(服務身分名稱) 欄位中輸入
dbs-backup-sa。 - 點選「建立」。
- 依序前往「身分與存取權」>「存取權」。
- 在「Member」(成員) 清單中,按一下「Add member」(新增成員)。「使用者與角色」頁面隨即顯示。
- 在「Member type」(成員類型) 清單中,選取「Service identity」(服務身分)。
- 在「Service identity」(服務身分) 清單中,選取
dbs-backup-sa來指派角色繫結。 - 在「Role」(角色) 清單中,選取要指派給服務身分的「Bucket Object Project Admin」(Bucket 物件專案管理員)。
- 按一下「新增」。
API
- 將這些資訊清單套用至 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: 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
找出服務帳戶的憑證 Secret 和 bucket 詳細資料
將 bucket 存取權授予 dbs-backup-sa 後,GDC 會自動在相同命名空間 backups 中建立密鑰,其中包含 S3 存取憑證。您需要使用 kubectl CLI (API) 找出這個 Secret 的名稱和 bucket 詳細資料。
設定環境變數:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVER找出 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}"這個指令會篩選
backups命名空間中的 Secret,找出已為dbs-backup-sa服務帳戶加上註解,且符合標準命名慣例的 Secret。如要執行這項指令,您必須具備backups專案的 Secret 檢視者 (secret-viewer) 角色,或要求建立服務帳戶的平台管理員提供 Secret 名稱。取得 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 資源,並參照上一節「找出服務帳戶的憑證 Secret 和 bucket 詳細資料」中找到的 Secret。這個步驟必須使用 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:Secret 名稱。ENDPOINT:bucket 的端點。FULL_BUCKET_NAME:完整 bucket 名稱。REGION:bucket 的區域。
驗證備份存放區
檢查存放區狀態,確認設定正確無誤。
列印備份存放區的資訊:
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