為雙區域 bucket 設定備份存放區

本頁面說明如何為 Google Distributed Cloud (GDC) 氣隙雙區域值區設定備份存放區。這樣一來,您就能維持重要資料和應用程式的高可用性,並在區域發生故障時盡量縮短停機時間。本頁說明如何建立雙區域 bucket、複製 bucket 密鑰,以及在多個區域中設定備份存放區。

本頁內容適用於平台管理員群組中的 IT 管理員,他們負責管理機構內的資源;以及應用程式運算子群組中的應用程式開發人員,他們負責在 GDC 領域中開發及維護應用程式。

詳情請參閱 GDC air-gapped 的目標對象說明文件

事前準備

如要使用 GDC 雙區域儲存空間的備份和還原服務,必須符合下列條件:

  • 至少佈建兩個區域的環境。
  • 存取全域機構用戶端或全域根用戶端。
    • 如果工作負載是在專案內佈建,請使用全域機構用戶端。
    • 如果工作負載是在根層級佈建,請使用全域根用戶端。
  • 建立雙區域值區時必須具備的 global-project-bucket-admin 角色。

建立雙區域 bucket

如要建立雙區域值區,請先建立值區所在的專案資源。如要建立專案,請按照下列步驟操作:

  1. 在全域機構叢集中建立專案資源:

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

    更改下列內容:

    • PROJECT_NAME:專案名稱。
  2. 建立雙區域 bucket:

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

    更改下列內容:

    • BUCKET_NAME:值區名稱。
    • LOCATION_TYPE:複製類型。如果是同步複製,值為 syncz1z2。如果是非同步複製,值為 asyncz1z2
    • DESCRIPTION:值區的文字說明。
  3. 建立服務帳戶和身分與存取權管理 (IAM) 角色繫結,授予值區的必要權限:

    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. 等待儲存空間狀態顯示 ready

將值區密鑰複製到兩個區域

設定好 bucket 和必要權限後,系統會在全域機構叢集中產生密碼,可透過註解識別。

  1. 確認已使用值區的註解產生密鑰:

    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. 擷取密鑰內容:

    kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yaml
    
  3. 在機構的叢集管理服務中,於 zone-1 和 zone-2 建立相同的密鑰。請務必從 YAML 檔案中清除 resourceVersionuidcreationTimeStamp,以免發生建立錯誤:

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

建立備份存放區

設定好值區和密鑰後,請在可用區 1 和可用區 2 中建立備份存放區。

  1. 如要取得 FQDN 和端點等 bucket 詳細資料,請在全域機構叢集中使用下列指令。從輸出內容擷取 fullyQualifiedNamezonalEndpoints

    kubectl get buckets.object.global.gdc.goog -n PROJECT_NAME BUCKET_NAME -o yaml
    
  2. 如要在管理叢集的 zone-1 中建立讀寫備份存放區,請使用下列指令。請務必使用 zone-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
    

    更改下列內容:

    • BACKUP_REPOSITORY_NAME:備份存放區的名稱。
    • ENDPOINT:可用區 1 的區域端點。
    • BUCKET_FULL_NAME:完整 bucket 名稱。
    • BUCKET_SECRET:值區的密碼。
  3. 檢查備份存放區是否已成功建立:

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  4. 使用雙區域值區註解,為備份存放區加上註解:

    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. 在管理叢集的可用區 2 中建立唯讀存放區。請使用 zone-2 的區域端點執行這項指令:

    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. 檢查備份存放區是否已成功建立:

    kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME
    
  7. 使用下列註解為基礎備份存放區資源加上註解:

    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
    

將工作負載備份至備份存放區

設定備份存放區後,請按照步驟備份及還原工作負載

後續步驟