Este documento descreve os passos para configurar o BackupRepository necessário 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
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 do 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 do 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.
- A CLI kubectl está 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. - Defina 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 > Identidades de serviço. - Clique em Criar identidade do serviço. É apresentada a página Detalhes da identidade do serviço.
- No campo Nome da identidade do serviço, introduza
dbs-backup-sa. - Clique em Criar.
- Aceda a Identidade e acesso > Acesso.
- Na lista Membro, clique em Adicionar membro. É apresentada a página Utilizadores e funções.
- Selecione Identidade do serviço na lista Tipo de membro.
- Na lista Identidade do serviço, selecione
dbs-backup-sapara atribuir uma associação de funções. - Na lista Função, selecione Administrador de objetos de armazenamento para atribuir à identidade do serviço.
- 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: 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
Identifique o segredo das credenciais 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 Secret:
- 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 grupo:
- Navegue para Armazenamento de objetos > Recipientes > página de detalhes de 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 para odbs-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. Tem de concluir este passo 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 o repositório de cópias 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