本頁面說明如何為 Google Distributed Cloud (GDC) 氣隙雙區域值區設定備份存放區。這樣一來,您就能維持重要資料和應用程式的高可用性,並在區域發生故障時盡量縮短停機時間。本頁說明如何建立雙區域 bucket、複製 bucket 密鑰,以及在多個區域中設定備份存放區。
本頁內容適用於平台管理員群組中的 IT 管理員,他們負責管理機構內的資源;以及應用程式運算子群組中的應用程式開發人員,他們負責在 GDC 領域中開發及維護應用程式。
詳情請參閱 GDC air-gapped 的目標對象說明文件。
事前準備
如要使用 GDC 雙區域儲存空間的備份和還原服務,必須符合下列條件:
- 至少佈建兩個區域的環境。
- 存取全域機構用戶端或全域根用戶端。
- 如果工作負載是在專案內佈建,請使用全域機構用戶端。
- 如果工作負載是在根層級佈建,請使用全域根用戶端。
- 建立雙區域值區時必須具備的
global-project-bucket-admin角色。
建立雙區域 bucket
如要建立雙區域值區,請先建立值區所在的專案資源。如要建立專案,請按照下列步驟操作:
在全域機構叢集中建立專案資源:
apiVersion: resourcemanager.global.gdc.goog/v1 kind: Project metadata: namespace: platform name: PROJECT_NAME labels: object.gdc.goog/tenant-category: user更改下列內容:
PROJECT_NAME:專案名稱。
建立雙區域 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:值區的文字說明。
建立服務帳戶和身分與存取權管理 (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等待儲存空間狀態顯示
ready。
將值區密鑰複製到兩個區域
設定好 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 :)擷取密鑰內容:
kubectl get secret -n PROJECT_NAME BUCKET_SECRET -o yaml > bucket_secret.yaml在機構的叢集管理服務中,於 zone-1 和 zone-2 建立相同的密鑰。請務必從 YAML 檔案中清除
resourceVersion、uid和creationTimeStamp,以免發生建立錯誤:# zone-1 kubectl apply -f bucket_secret.yaml # zone-2 kubectl apply -f bucket_secret.yaml
建立備份存放區
設定好值區和密鑰後,請在可用區 1 和可用區 2 中建立備份存放區。
如要取得 FQDN 和端點等 bucket 詳細資料,請在全域機構叢集中使用下列指令。從輸出內容擷取
fullyQualifiedName和zonalEndpoints:kubectl get buckets.object.global.gdc.goog -n PROJECT_NAME BUCKET_NAME -o yaml如要在管理叢集的 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:值區的密碼。
檢查備份存放區是否已成功建立:
kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME使用雙區域值區註解,為備份存放區加上註解:
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在管理叢集的可用區 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檢查備份存放區是否已成功建立:
kubectl get backuprepositories.backup.gdc.goog BACKUP_REPOSITORY_NAME使用下列註解為基礎備份存放區資源加上註解:
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
將工作負載備份至備份存放區
設定備份存放區後,請按照步驟備份及還原工作負載。