Este documento descreve os passos para configurar os pré-requisitos necessários BackupRepository para o serviço de base de dados (DBS) isolado do Google Distributed Cloud (GDC). Este repositório, denominado obrigatoriamente dbs-backup-repository, é um recurso personalizado no Kubernetes que direciona o serviço de cópia de segurança do GDC para um contentor de armazenamento de objetos compatível com o S3 para armazenar cópias de segurança da base de dados.
A configuração adequada é fundamental para ativar as funcionalidades de cópia de segurança e restauro para instâncias de DBS, como PostgreSQL, Oracle e AlloyDB Omni.
Antes de começar
Antes de começar, certifique-se de que tem os seguintes pré-requisitos:
- Projeto: um projeto para alojar o contentor, normalmente denominado
database-backups, com acesso apenas à conta de serviço. - Acesso: autorizações suficientes para interagir com o servidor da API de gestão.
- O utilizador tem de ter as seguintes funções ao nível da organização para criar o repositório de cópias de segurança:
- Administrador do contentor (
bucket-admin) - Criador do projeto (
project-creator) - Administrador da cópia de segurança da organização (
organization-backup-admin)
- Administrador do contentor (
- No projeto de destino:
- Administrador de IAM do projeto (
project-iam-admin) - Project Bucket Object Viewer (
project-bucket-object-viewer) - Administrador de objetos do contentor do projeto (
project-bucket-object-admin) - Administrador do contentor de projetos (
project-bucket-admin) - Administrador do espaço de nomes (
namespace-admin) - Criador da cópia de segurança (
backup-creator)
- Administrador de IAM do projeto (
- O utilizador tem de ter as seguintes funções ao nível da organização para criar o repositório de cópias de segurança:
- Ferramentas:
- A consola do GDC.
- CLI kubectl configurada para aceder ao servidor da API de gestão.
Crie um contentor de armazenamento de objetos
Todos os passos seguintes são realizados no servidor da API de gestão. Defina e crie um recurso Bucket. O nome recomendado dbs-backups para este contentor de armazenamento é assumido para o resto deste documento, localizado no espaço de nomes do projeto backups. Certifique-se de que o contentor não tem nenhuma política de retenção.
Consola
- Inicie sessão na consola do GDC para a organização.
- Certifique-se de que está no projeto
backups. - Navegue para Object Storage > Recipientes.
- Clique em Criar contentor.
- Defina o nome do contentor como
dbs-backups. - Definir a descrição como
Bucket for DBS backups. - Configure a classe de armazenamento conforme necessário. Por exemplo,
Standard. - Para segurança, certifique-se de que não define uma política de retenção, uma vez que isto fará com que as bases de dados e as respetivas cópias de segurança sejam retidas incorretamente.
- Clique em Criar.
API
- Aplique o seguinte manifesto ao servidor da API de gestão:
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
Crie uma conta de serviço e defina autorizações
Crie um ProjectServiceAccount e conceda-lhe autorizações para aceder ao contentor.
Consola
- No projeto
backups, navegue para Identidade e acesso > Contas de serviço. - Clique em Criar conta de serviço e atribua-lhe o nome
dbs-backup-sa. - Conceda autorizações:
- Aceda a Object Storage > Buckets > dbs-backups > Autorizações.
- Clique em Adicionar principal.
- Selecione a conta do serviço:
dbs-backup-sa. - Função selecionada: uma função que concede acesso de leitura e escrita a objetos, como Administrador de objetos de armazenamento.
- Clique em Adicionar.
API
- Aplique estes manifestos ao servidor da API de gestão:
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
Identifique o segredo da credencial e os detalhes do contentor da conta de serviço
Após conceder acesso ao contentor ao dbs-backup-sa, o GDC cria automaticamente um segredo no mesmo espaço de nomes, backups, que contém as credenciais de acesso ao S3. Tem de encontrar o nome deste segredo.
Consola
- Encontre o nome do segredo:
- Navegue para Kubernetes Engine > Configuração > Secrets no projeto
backups. - Procure um segredo que comece por
object-storage-key-std-sa-e verifique as anotações para confirmar que oobject.gdc.goog/subjectédbs-backup-sa. - Tome nota deste nome do segredo.
- Navegue para Kubernetes Engine > Configuração > Secrets no projeto
- Encontre os detalhes do depósito:
- Navegue para Object Storage > Recipientes > página de detalhes dbs-backups.
- Encontre e anote o
ENDPOINT, oREGIONe oFULL_BUCKET_NAME.
API
Defina variáveis de ambiente:
export SA_NAMESPACE="backups" export SA_NAME="dbs-backup-sa" export KUBECONFIG=MANAGEMENT_API_SERVEREncontre o nome do segredo:
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}"Este comando filtra os segredos no espaço de nomes
backupspara encontrar o anotado paradbs-backup-sae que corresponde à convenção de nomenclatura padrão.Obtenha detalhes do ponto final e da região do contentor:
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}"'
Crie o BackupRepository
Crie o recurso BackupRepository, referindo-se ao segredo identificado na secção anterior, Identifique o segredo das credenciais e os detalhes do contentor da conta de serviço. Este passo tem de ser concluído através da CLI kubectl (API).
Crie o ficheiro YAML, como
backup-repo.yaml, substituindo as variáveis encontradas na secção anterior: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 EOFSubstitua o seguinte:
BUCKET_CRED_SECRET_NAME: o nome do segredo.ENDPOINT: o ponto final do contentor.FULL_BUCKET_NAME": o nome do contentor totalmente qualificado.REGION: a região do contentor.
Valide a cópia de segurança
Verifique o estado do repositório para garantir que foi configurado corretamente.
Imprima as informações do repositório de cópias de segurança:
kubectl --kubeconfig MANAGEMENT_API_SERVER get backuprepository dbs-backup-repository -ojson | jq .statusVerifique se a saída é semelhante à seguinte. Uma mensagem
NoErroré o sinal de que o repositório foi configurado conforme esperado: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