Configurar um repositório de backup para buckets de duas zonas

Nesta página, descrevemos como configurar repositórios de backup para buckets de duas zonas isolados fisicamente do Google Distributed Cloud (GDC). Isso permite manter a alta disponibilidade de dados e aplicativos críticos, minimizando o tempo de inatividade em caso de falha na zona. Esta página aborda as etapas para criar buckets de duas zonas, copiar segredos de buckets e configurar repositórios de backup em várias zonas.

Esta página é destinada a administradores de TI do grupo de administradores de plataforma responsáveis por gerenciar recursos na organização e a desenvolvedores de aplicativos do grupo de operadores de aplicativos responsáveis por desenvolver e manter aplicativos em um universo do GDC.

Para mais informações, consulte Públicos-alvo da documentação isolada do GDC.

Antes de começar

Antes de usar os serviços de backup e restauração para buckets de dupla zona do GDC, você precisa ter o seguinte:

  • Um ambiente provisionado com no mínimo duas zonas.
  • Acesso ao cliente global da organização ou ao cliente global da raiz.
    • Se a carga de trabalho for provisionada em um projeto, use o cliente global da organização.
    • Se a carga de trabalho for provisionada na raiz, use o cliente raiz global.
  • O papel global-project-bucket-admin, necessário para criar buckets de duas zonas.

Criar um bucket de duas zonas

Para criar um bucket de duas zonas, primeiro crie um recurso de projeto para ele. Para criar um projeto, siga estas etapas:

  1. Crie um recurso de projeto em um cluster global da organização:

    apiVersion: resourcemanager.global.gdc.goog/v1
    kind: Project
    metadata:
      namespace: platform
      name: PROJECT_NAME
      labels:
        object.gdc.goog/tenant-category: user
    

    Substitua:

    • PROJECT_NAME: o nome do projeto.
  2. Crie um bucket de duas zonas:

    apiVersion: object.global.gdc.goog/v1
    kind: Bucket
    metadata:
      name: BUCKET_NAME
      namespace: PROJECT_NAME
    spec:
      location: LOCATION_TYPE
      description: DESCRIPTION
      storageClass: Standard
    

    Substitua:

    • BUCKET_NAME: o nome do bucket
    • LOCATION_TYPE: o tipo de replicação. Para replicação síncrona, o valor é syncz1z2. Para replicação assíncrona, o valor é asyncz1z2.
    • DESCRIPTION: uma descrição de texto do bucket.
  3. Crie uma conta de serviço e uma vinculação de papel do Identity and Access Management (IAM) para conceder as permissões necessárias ao bucket:

    apiVersion: v1
    kind: ServiceAccount
    metadata:
      name: BUCKET_NAME-sa
      namespace: PROJECT_NAME
    ---
    apiVersion: iam.global.gdc.goog/v1
    kind: IAMRoleBinding
    metadata:
      namespace: PROJECT_NAME
      name: BUCKET_NAME-admin-binding
    spec:
      roleRef:
        apiGroup: iam.global.gdc.goog
        kind: IAMRole
        name: project-bucket-object-admin
      subjects:
        - kind: ServiceAccount
          name: BUCKET_NAME-sa
          namespace: PROJECT_NAME
    
  4. Aguarde até que o status do bucket seja ready.

Copie o secret do bucket para as duas zonas

Depois que o bucket e as permissões necessárias são configurados, um secret é gerado em um cluster global da organização, que pode ser identificado pelas anotações.

  1. Verifique se um secret foi gerado com a anotação do bucket:

    export BUCKET_SECRET=$(kubectl get secret -n PROJECT_NAME -o jsonpath="{range .items[*]}{.metadata.name}{':'}{.metadata.annotations['object\.gdc\.goog/subject']}{'\n'}{end}" | grep :BUCKET_NAME | cut -f1 -d :)
    
  2. Recupere o conteúdo do secret:

    kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yaml
    
  3. Crie o mesmo secret no cluster de gerenciamento da organização na zona-1 e na zona-2. Limpe resourceVersion, uid e creationTimeStamp do arquivo YAML para evitar erros de criação:

    # zone-1
    kubectl apply -f bucket_secret.yaml
    
    # zone-2
    kubectl apply -f bucket_secret.yaml
    

Criar repositórios de backup

Depois que o bucket e os secrets forem configurados, crie um repositório de backup na zona 1 e na zona 2.

  1. Para receber detalhes do bucket, como FQDN e endpoints, use o seguinte comando em um cluster global da organização. Extraia fullyQualifiedName e zonalEndpoints da saída:

    kubectl get buckets.object.global.gdc.goog -n PROJECT_NAME BUCKET_NAME -o yaml
    
  2. Para criar um repositório de leitura-gravação-backup na zona 1 do cluster de gerenciamento, use o seguinte comando. Use o endpoint zonal da zona 1:

    apiVersion: backup.gdc.goog/v1
    kind: BackupRepository
    metadata:
      annotations:
        backup.gdc.goog/dz-bucket: "true"
        backup.gdc.goog/dz-bucket-info-namespace: PROJECT_NAME
      finalizers:
      - backup.gdc.goog/sentinel-finalizer
      generation: 1
      name: BACKUP_REPOSITORY_NAME
    spec:
      endpoint: ENDPOINT
      force: false
      importPolicy: ReadWrite
      s3Options:
        bucket: BUCKET_FULL_NAME
        forcePathStyle: true
        region: zone2
      secretReference:
        name: BUCKET_SECRET
        namespace: PROJECT_NAME
      type: S3
    

    Substitua:

    • BACKUP_REPOSITORY_NAME: o nome do repositório de backup.
    • ENDPOINT: o endpoint zonal da zona 1.
    • BUCKET_FULL_NAME: o nome do bucket totalmente qualificado.
    • BUCKET_SECRET: o secret do bucket.
  3. Verifique se o repositório de backup foi criado:

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  4. Adicione anotações de bucket de duas zonas ao repositório de backup:

    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket="true"
    
    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket-info-namespace=PROJECT_NAME
    
  5. Crie um repositório somente leitura na zona 2 do cluster de gerenciamento. Use o endpoint zonal da zona 2 para este comando:

    apiVersion: backup.gdc.goog/v1
    kind: ClusterBackupRepository
    metadata:
      annotations:
        backup.gdc.goog/dz-bucket: "true"
        backup.gdc.goog/dz-bucket-info-namespace: PROJECT_NAME
      finalizers:
      - backup.gdc.goog/sentinel-finalizer
      generation: 1
      name: BACKUP_REPOSITORY_NAME
    spec:
      endpoint: ENDPOINT
      force: false
      importPolicy: ReadOnly
      s3Options:
        bucket: BUCKET_FULL_NAME
        forcePathStyle: true
        region: zone2
      secretReference:
        name: BUCKET_SECRET
        namespace: PROJECT_NAME
      type: S3
    
  6. Verifique se o repositório de backup foi criado:

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  7. Adicione as seguintes anotações ao recurso do repositório de backup:

    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket="true"
    
    kubectl -n PROJECT_NAME annotate --overwrite backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME backup.gdc.goog/dz-bucket-info-namespace=PROJECT_NAME
    

Fazer backup das cargas de trabalho nos repositórios de backup

Depois que os repositórios de backup forem configurados, siga as etapas para fazer backup e restaurar suas cargas de trabalho.

Próximas etapas