Configure um repositório de cópia de segurança para contentores de duas zonas

Esta página descreve como configurar repositórios de cópias de segurança para contentores de duas zonas isolados do Google Distributed Cloud (GDC). Isto permite-lhe manter a elevada disponibilidade de dados e aplicações críticos, ao mesmo tempo que minimiza o tempo de inatividade em caso de falha de uma zona. Esta página aborda os passos para criar contentores de duas zonas, copiar segredos de contentores e configurar repositórios de cópia de segurança em várias zonas.

Esta página destina-se a administradores de TI no grupo de administradores da plataforma que são responsáveis pela gestão de recursos na respetiva organização e a programadores de aplicações no grupo de operadores de aplicações que são responsáveis pelo desenvolvimento e manutenção de aplicações num universo da GDC.

Para mais informações, consulte a documentação sobre públicos-alvo para GDC com isolamento de ar.

Antes de começar

Antes de usar os serviços de cópia de segurança e restauro para contentores de zona dupla do GDC, tem de ter o seguinte:

  • Um ambiente aprovisionado com um mínimo de duas zonas.
  • Acesso ao cliente da organização global ou ao cliente raiz global.
    • Se a sua carga de trabalho for aprovisionada num projeto, use o cliente da organização global.
    • Se a sua carga de trabalho for aprovisionada na raiz, use o cliente raiz global.
  • A função global-project-bucket-admin, que é necessária para criar contentores de duas zonas.

Crie um contentor de duas zonas

Para criar um contentor de duas zonas, primeiro tem de criar um recurso de projeto no qual o contentor vai residir. Para criar um projeto, siga estes passos:

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

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

    Substitua o seguinte:

    • PROJECT_NAME: o nome do projeto.
  2. Crie um contentor 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 o seguinte:

    • BUCKET_NAME: o nome do segmento.
    • LOCATION_TYPE: o tipo de replicação. Para a replicação síncrona, o valor é syncz1z2. Para a replicação assíncrona, o valor é asyncz1z2.
    • DESCRIPTION: uma descrição de texto do depósito.
  3. Crie uma conta de serviço e uma associação de função de gestão de identidade e de acesso (IAM) para conceder as autorizações necessárias para o contentor:

    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 estado do contentor apresente ready.

Copie o segredo do contentor para ambas as zonas

Depois de configurar o contentor e as autorizações necessárias, é gerado um segredo num cluster da organização global que pode ser identificado pelas respetivas anotações.

  1. Verifique se foi gerado um segredo com a anotação do contentor:

    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 secreto:

    kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yaml
    
  3. Crie o mesmo segredo no cluster de gestão da organização na zona 1 e na zona 2. Certifique-se de que limpa resourceVersion, uid e creationTimeStamp do ficheiro YAML para evitar erros de criação:

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

Crie repositórios de cópias de segurança

Depois de configurar o contentor e os segredos, crie um repositório de cópias de segurança na zona 1 e na zona 2.

  1. Para obter detalhes do contentor, como o FQDN e os pontos finais, use o seguinte comando num cluster da organização global. Extrai 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/cópia de segurança na zona 1 no cluster de gestão, use o seguinte comando. Certifique-se de que usa o ponto final 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 o seguinte:

    • BACKUP_REPOSITORY_NAME: o nome do repositório de cópias de segurança.
    • ENDPOINT: o ponto final zonal da zona 1.
    • BUCKET_FULL_NAME: o nome do contentor totalmente qualificado.
    • BUCKET_SECRET: o segredo do balde.
  3. Verifique se o repositório de cópias de segurança foi criado com êxito:

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  4. Anotar o repositório de cópias de segurança com anotações de contentores de duas zonas:

    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 só de leitura na zona 2 no cluster de gestão. Use o ponto final 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 cópias de segurança foi criado com êxito:

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  7. Anote o recurso do repositório de cópias de segurança subjacente com as seguintes anotações:

    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
    

Faça uma cópia de segurança das cargas de trabalho nos repositórios de cópias de segurança

Depois de configurar os repositórios de cópias de segurança, siga os passos para fazer uma cópia de segurança e restaurar as suas cargas de trabalho.

Passos seguintes