本頁說明如何設定及執行 Google Distributed Cloud (GDC) 實體隔離區塊儲存空間磁碟區的非同步複製作業。
非同步複製功能可用於將資料從一個 GDC 區域複製到另一個區域。如果來源區域的資料無法使用,即可在容錯移轉情境中使用這項複製資料。請注意,建立容錯移轉後,原始磁碟區就無法設定為複製到相同目的地磁碟區。而是必須建立新的複製關係。
事前準備
如要使用非同步區塊複製功能,基礎架構營運商 (IO) 必須先在需要複製的兩個區域之間設定儲存空間基礎架構。具體來說,他們首先需要對等互連每個區域的相關儲存空間叢集。接著,他們需要對等互連與佈建區塊儲存空間的機構相關聯的儲存空間虛擬機器。
接著,請確認您具備 volume-replication-admin-global 角色,可管理 VolumeReplicationRelationship 資源。如果無法使用全域 API,則可使用 app-volume-replication-admin 角色直接修改區域 VolumeReplicationRelationshipReplica 資源。
設定複製功能
VolumeReplicationRelationship 自訂資源 (CR) 會提供非同步區塊複製 API。這則罐頭回應存在於全域管理 API 中。如要為特定區塊裝置啟用複寫功能,請在全域管理 API 上建立 VolumeReplicationRelationship CR:
PVC API
必須提供專案繫結。請務必將專案附加至每個參與區域的每個叢集資源。
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: VRR_NAME
namespace: PROJECT
spec:
source:
pvc:
clusterRef: SOURCE_USER_CLUSTER_NAME
pvcRef: PVC_NAME
zoneRef: SOURCE_ZONE_NAME
destination:
pvc:
clusterRef: DESTINATION_USER_CLUSTER_NAME
zoneRef: DESTINATION_ZONE_NAME
EOF
更改下列內容:
MANAGEMENT_API_SERVER:區域 API 伺服器的 kubeconfig 路徑。VRR_NAME:VolumeReplicationRelationship 資源的名稱。PROJECT:專案資源的命名空間。SOURCE_USER_CLUSTER_NAME:要連線的來源使用者叢集資源名稱。PVC_NAME:PersistentVolumeClaim 資源的名稱。SOURCE_ZONE_NAME:來源區域資源的名稱。DESTINATION_USER_CLUSTER_NAME:要連線的目的端使用者叢集資源名稱。DESTINATION_ZONE_NAME:目的地區域資源的名稱。
這個範例假設您在名為 my-org 的機構中建立名為 PROJECT 的專案,且已佈建名為 PVC_NAME 的 PVC。SOURCE_USER_CLUSTER_NAME 是 PVC 所在的來源叢集名稱,DESTINATION_USER_CLUSTER_NAME 則是新 PVC 所在的目標叢集名稱。
規格的 source 和 destination 欄位分別指出資料的複製來源和目的地。在本例中,資料會從 SOURCE_ZONE_NAME 複製到 DESTINATION_ZONE_NAME。
VM 磁碟 API
複製虛擬機器磁碟
VolumeReplicationRelationship 也會為非同步虛擬機器磁碟 (VM 磁碟) 複製 API 提供服務。要複製的來源磁碟稱為主要磁碟。複製作業的目標磁碟稱為次要磁碟。在主要磁碟上啟動非同步複製作業時,系統會自動建立次要磁碟。
要求權限和存取權
如要複製 VM 磁碟,您必須具備專案虛擬機器管理員角色。按照步驟驗證您在 VM 磁碟所在專案的命名空間中,是否具備專案 VirtualMachine 管理員 (project-vm-admin) 角色。
如要使用 gdcloud CLI 執行 VM 作業,請要求專案 IAM 管理員指派專案 VirtualMachine 管理員角色和專案檢視者 (project-viewer) 角色。
啟動非同步複製
使用 kubectl 啟動 VM 磁碟的非同步複製作業。
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: VRR_NAME
namespace: PROJECT
spec:
destination:
volumeOverrideName: VIRTUAL_MACHINE_DESTINATION_DISK_NAME
zoneRef: DESTINATION_ZONE_NAME
source:
virtualMachineDisk:
virtualMachineDiskRef: VIRTUAL_MACHINE_SOURCE_DISK_NAME
zoneRef: SOURCE_ZONE_NAME
EOF
更改下列內容:
MANAGEMENT_API_SERVER:區域 API 伺服器的 kubeconfig 路徑。VRR_NAME:VolumeReplicationRelationship 資源的名稱。PROJECT:專案資源的命名空間。SOURCE_ZONE_NAME:來源區域資源的名稱。DESTINATION_ZONE_NAME:目的地區域資源的名稱。VIRTUAL_MACHINE_SOURCE_DISK_NAME:來源的 VirtualMachineDisk 資源名稱。VIRTUAL_MACHINE_DESTINATION_DISK_NAME:目的地上的 VirtualMachineDisk 資源名稱。
這個範例假設您在名為 my-org 的機構中建立名為 PROJECT 的專案,且已將名為 VIRTUAL_MACHINE_SOURCE_DISK_NAME 的 VirtualMachineDisk 佈建至 VirtualMachine 資源。
規格的 source 和 destination 欄位分別指出資料的複製來源和目的地。在本例中,資料會從 SOURCE_ZONE_NAME 複製到 DESTINATION_ZONE_NAME。
驗證
從全域 API 擷取 VolumeReplicationRelationship CR,即可檢查複寫關係的狀態。請參考以下範例。請注意,為簡化輸出內容,系統已截斷部分內容:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
輸出結果會與下列內容相似:
PVC API
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-pvc-repl
namespace: my-project
spec:
destination:
pvc:
clusterRef: my-pvc-cluster
zoneRef: zone2
source:
pvc:
clusterRef: my-pvc-cluster
pvcRef: my-block-pvc
zoneRef: zone1
status:
zones:
- name: zone1
replicaStatus:
message: SnapMirror relationship has been established. Please check the destination
zone for relationship state
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Established
- name: zone2
replicaStatus:
exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
message: SnapMirror relationship has been successfully established
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Idle
VM 磁碟 API
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-vmdisk-vrr
namespace: my-project
spec:
destination:
zoneRef: zone2
source:
virtualMachineDisk:
virtualMachineDiskRef: my-vmdisk
zoneRef: zone1
status:
zones:
- name: zone1
replicaStatus:
message: SnapMirror relationship has been established. Please check the destination
zone for relationship state
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Established
- name: zone2
replicaStatus:
exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
message: SnapMirror relationship has been successfully established
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Idle
建立容錯移轉
如果來源區域因任何原因無法使用,可以在目標區域的機構管理層建立 VolumeFailover CR。如果是第 2 版機構,這會是管理 API 伺服器。如果是第 1 版機構,這會是機構管理員叢集。舉例來說,如果建立的 VolumeReplicationRelationship 指定 zone2 為目的地區域,且 my-org 機構中存在 PVC 或 VirtualMachineDisk,則 VolumeFailover CR 會在 zone2 的 my-org 管理平面中建立。這會中斷兩個可用區之間的複寫關係,並允許工作負載掛接目的地可用區中的 PVC 或 VirtualMachineDisk:
kubectl --kubeconfig MANAGEMENT_API_SERVER apply -f - <<EOF
apiVersion: storage.gdc.goog/v1
kind: VolumeFailover
metadata:
name: FAILOVER_NAME
namespace: PROJECT
spec:
volumeReplicationRelationshipRef: VRR_NAME
EOF
更改下列內容:
FAILOVER_NAME:VolumeFailover 資源的名稱。MANAGEMENT_API_SERVER:區域 API 伺服器的 kubeconfig 路徑。VRR_NAME:VolumeReplicationRelationship 資源的名稱。PROJECT:專案資源的命名空間。容錯移轉成功後,CR 的狀態會反映這項結果:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \ -n PROJECT -o yaml輸出結果會與下列內容相似:
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: Completed建立容錯移轉後,
my-vrr-replVolumeReplicationRelationship會轉換為Broken Off狀態。現在可以掛接zone2中的 PVC 或 VirtualMachineDisk。此時,
VolumeReplicationRelationship會與下列範例類似。同樣地,為簡化起見,以下只列出部分輸出內容:kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yaml輸出結果會與下列內容相似:
PVC API
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-vrr-repl
namespace: my-project
spec:
destination:
pvc:
clusterRef: my-pvc-cluster
zoneRef: zone2
source:
pvc:
clusterRef: my-pvc-cluster
pvcRef: my-block-pvc
zoneRef: zone1
status:
zones:
- name: zone1
replicaStatus:
message: SnapMirror relationship has been broken off
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Broken Off
- name: zone2
replicaStatus:
exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
message: SnapMirror relationship has been broken off
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Broken Off
VM 磁碟 API
apiVersion: storage.global.gdc.goog/v1
kind: VolumeReplicationRelationship
metadata:
name: my-vmdisk-vrr
namespace: my-project
spec:
destination:
zoneRef: zone2
source:
virtualMachineDisk:
virtualMachineDiskRef: my-vmdisk
zoneRef: zone1
status:
zones:
- name: zone1
replicaStatus:
message: SnapMirror relationship has been broken off
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Broken Off
- name: zone2
replicaStatus:
exportedSnapshotName: snapmirror.c34f8845-e8c0-11ef-ad24-00a0b89f23fb_2150007868.2025-02-21_150000
message: SnapMirror relationship has been broken off
replicationID: a096621e-f062-11ef-ad24-00a0b89f23fb
state: Broken Off
現在可以放心刪除
VolumeReplicationRelationship,因為這是對這個 CR 執行的唯一剩餘動作。kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
調整磁碟區大小
如果來源磁碟區在任何時間點調整大小,系統也會代表使用者建立目的地區域中的對應磁碟區,並調整大小以符合來源磁碟區。VolumeReplicationRelationship
如要調整來源和目標可用區的儲存空間大小,請參閱「擴充 VM 磁碟」說明文件或「擴充磁碟區容量」。