이 문서에서는 Google Distributed Cloud (GDC) 오프라인 데이터베이스 서비스 (DBS)에 필요한 BackupRepository를 구성하는 단계를 설명합니다. dbs-backup-repository라는 이름이 지정된 이 저장소는 데이터베이스 백업을 저장하기 위해 GDC 백업 서비스를 S3 호환 객체 스토리지 버킷으로 안내하는 Kubernetes 내의 커스텀 리소스입니다.
PostgreSQL, Oracle, AlloyDB Omni와 같은 DBS 인스턴스의 백업 및 복원 기능을 사용 설정하려면 적절한 설정이 중요합니다.
시작하기 전에
시작하기 전에 다음 기본 요건을 충족하는지 확인하세요.
- 프로젝트: 버킷을 호스팅하는 프로젝트입니다. 일반적으로
database-backups라는 이름이 지정되며 서비스 계정 액세스 권한만 있습니다. - 액세스: 관리 API 서버와 상호작용할 수 있는 충분한 권한
- 백업 저장소를 만들려면 사용자에게 다음 조직 수준 역할이 있어야 합니다.
- 버킷 관리자 (
bucket-admin) - 프로젝트 생성자(
project-creator) - 조직 백업 관리자 (
organization-backup-admin)
- 버킷 관리자 (
- 대상 프로젝트 내:
- 프로젝트 IAM 관리자(
project-iam-admin) - 프로젝트 버킷 객체 뷰어 (
project-bucket-object-viewer) - 프로젝트 버킷 객체 관리자 (
project-bucket-object-admin) - 프로젝트 버킷 관리자 (
project-bucket-admin) - 네임스페이스 관리자 (
namespace-admin) - 백업 생성자 (
backup-creator)
- 프로젝트 IAM 관리자(
- 백업 저장소를 만들려면 사용자에게 다음 조직 수준 역할이 있어야 합니다.
- 도구:
- GDC 콘솔
- 관리 API 서버에 액세스하도록 kubectl CLI가 구성되어 있어야 합니다.
객체 스토리지 버킷 만들기
모든 후속 단계는 관리 API 서버에서 실행됩니다. Bucket 리소스를 정의하고 만듭니다. 이 문서의 나머지 부분에서는 이 스토리지 버킷의 권장 이름 dbs-backups이 backups 프로젝트 네임스페이스 내에 있는 것으로 가정합니다. 버킷에 보관 정책이 없는지 확인합니다.
콘솔
- 조직의 GDC 콘솔에 로그인합니다.
backups프로젝트에 있는지 확인합니다.- 객체 스토리지 > 버킷으로 이동합니다.
- 버킷 만들기를 클릭합니다.
- 버킷 이름을
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를 만들고 버킷에 액세스할 권한을 부여합니다.
콘솔
backups프로젝트에서 ID 및 액세스 > 서비스 계정으로 이동합니다.- 서비스 계정 만들기를 클릭하고
dbs-backup-sa로 이름을 지정합니다. - 권한 부여:
- 객체 스토리지 > 버킷 > dbs-backups > 권한으로 이동합니다.
- 주 구성원 추가를 클릭합니다.
- 서비스 계정(
dbs-backup-sa)을 선택합니다. - 역할 선택: 객체 읽기 및 쓰기 액세스 권한을 부여하는 역할(예: 스토리지 객체 관리자)
- 추가를 클릭합니다.
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
서비스 계정의 사용자 인증 정보 보안 비밀 및 버킷 세부정보 확인
dbs-backup-sa에 버킷 액세스 권한을 부여하면 GDC가 S3 액세스 사용자 인증 정보가 포함된 동일한 네임스페이스(backups)에 보안 비밀을 자동으로 만듭니다. 이 보안 비밀의 이름을 찾아야 합니다.
콘솔
- 보안 비밀 이름을 찾습니다.
backups프로젝트에서 Kubernetes Engine > 구성 > 보안 비밀로 이동합니다.object-storage-key-std-sa-로 시작하는 보안 비밀을 찾아 주석을 확인하여object.gdc.goog/subject이dbs-backup-sa인지 확인합니다.- 이 보안 비밀 이름을 기록해 둡니다.
- 버킷 세부정보를 찾습니다.
- 객체 스토리지 > 버킷 > 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에 대해 주석이 지정되고 표준 명명 규칙과 일치하는 보안 비밀을 찾습니다.버킷 엔드포인트 및 리전 세부정보를 가져옵니다.
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 리소스를 만듭니다. 이 단계는 kubectl CLI (API)를 사용하여 완료해야 합니다.
이전 섹션에 나온 변수를 대체하여
backup-repo.yaml과 같은 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": 정규화된 버킷 이름입니다.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