Questa pagina mostra come configurare ed eseguire la replica asincrona dei volumi di archiviazione a blocchi di Google Distributed Cloud (GDC) con air gap.
La replica asincrona viene utilizzata per replicare i dati da una zona GDC a un'altra. Questi dati replicati possono essere utilizzati in uno scenario di failover nel caso in cui i dati nella zona di origine non siano disponibili. Tieni presente che, una volta creato un failover, il volume originale non può essere configurato per la replica nello stesso volume di destinazione. È invece necessario creare una nuova relazione di replica.
Per gli operatori di applicazioni che preferiscono utilizzare l'interfaccia a riga di comando gdcloud, consulta Replica i volumi in modo asincrono per gli operatori di applicazioni.
Prima di iniziare
Per utilizzare la replica asincrona dei blocchi, l'operatore dell'infrastruttura (IO) deve prima configurare due zone per la replica asincrona.Assicurati di disporre del ruolo volume-replication-admin-global per amministrare la risorsa VolumeReplicationRelationship. Nei casi in cui l'API globale non è disponibile, il ruolo app-volume-replication-admin può essere utilizzato per modificare direttamente la risorsa VolumeReplicationRelationshipReplica a livello di zona.
Configura la replica
La risorsa personalizzata (CR) VolumeReplicationRelationship gestisce l'API di replica asincrona dei blocchi. Questa CR esiste nell'API di gestione globale. Per abilitare la replica per un determinato dispositivo a blocchi, è necessario creare una CR VolumeReplicationRelationship nell'API di gestione globale:
API PVC
L'associazione del progetto è obbligatoria. Assicurati di aver collegato il progetto a ogni risorsa Cluster in ogni zona partecipante.
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
Sostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API di zona.VRR_NAME: il nome della risorsa VolumeReplicationRelationship.PROJECT: lo spazio dei nomi della risorsa Project.SOURCE_USER_CLUSTER_NAME: il nome della risorsa Cluster utente di origine da connettere.PVC_NAME: il nome della risorsa PersistentVolumeClaim.SOURCE_ZONE_NAME: il nome della risorsa di zona di origine.DESTINATION_USER_CLUSTER_NAME: il nome della risorsa del cluster utente di destinazione da connettere.DESTINATION_ZONE_NAME: il nome della risorsa di zona di destinazione.
Questo esempio presuppone che un progetto denominato PROJECT sia stato creato in un'organizzazione denominata my-org e che sia già stato eseguito il provisioning di un PVC denominato PVC_NAME. SOURCE_USER_CLUSTER_NAME è il nome del cluster di origine in cui esiste il PVC e DESTINATION_USER_CLUSTER_NAME è il nome del cluster di destinazione in cui esisterà un nuovo PVC.
I campi source e destination della specifica indicano rispettivamente da dove e verso dove vengono replicati i dati. In questo esempio, i dati vengono replicati da SOURCE_ZONE_NAME a DESTINATION_ZONE_NAME.
API VM Disk
Replica i dischi delle macchine virtuali
VolumeReplicationRelationship gestisce anche l'API di replica asincrona dei dischi delle macchine virtuali (dischi VM).
Il disco di origine replicato è chiamato disco primario. Il disco di destinazione su cui viene eseguita la replica è chiamato disco secondario. L'avvio della replica asincrona su un disco primario creerà automaticamente il disco secondario.
Richiedi autorizzazioni e accesso
Per replicare i dischi delle VM, devi disporre del ruolo Project VirtualMachine Admin. Segui i passaggi per verificare di disporre del ruolo Project VirtualMachine Admin (project-vm-admin) nello spazio dei nomi del progetto in cui si trova il disco della VM.
Per le operazioni sulle VM che utilizzano la CLI gdcloud, chiedi all'amministratore del progetto IAM di assegnarti sia il ruolo Project VirtualMachine Admin sia il ruolo Project Viewer (project-viewer).
Avvia la replica asincrona
Avvia la replica asincrona su un disco VM utilizzando kubectl.
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
Sostituisci quanto segue:
MANAGEMENT_API_SERVER: il percorso kubeconfig del server API di zona.VRR_NAME: il nome della risorsa VolumeReplicationRelationship.PROJECT: lo spazio dei nomi della risorsa Project.SOURCE_ZONE_NAME: il nome della risorsa di zona di origine.DESTINATION_ZONE_NAME: il nome della risorsa di zona di destinazione.VIRTUAL_MACHINE_SOURCE_DISK_NAME: il nome della risorsa VirtualMachineDisk nell'origine.VIRTUAL_MACHINE_DESTINATION_DISK_NAME: il nome della risorsa VirtualMachineDisk nella destinazione.
Questo esempio presuppone che un progetto denominato PROJECT sia stato creato in un'organizzazione denominata my-org e che sia già stato eseguito il provisioning di un VirtualMachineDisk denominato VIRTUAL_MACHINE_SOURCE_DISK_NAME nella risorsa VirtualMachine.
I campi source e destination della specifica indicano rispettivamente da dove e verso dove vengono replicati i dati. In questo esempio, i dati vengono replicati da SOURCE_ZONE_NAME a DESTINATION_ZONE_NAME.
Verifica
Controlla lo stato della relazione di replica recuperando la CR VolumeReplicationRelationship dall'API globale. Fai riferimento all'esempio seguente. Tieni presente che l'output è stato troncato per semplicità:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
L'output è simile al seguente:
API PVC
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
API VM Disk
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
Crea failover
Se la zona di origine non è disponibile per qualsiasi motivo, è possibile creare una CR VolumeFailover nel piano di gestione dell'organizzazione della zona di destinazione. Per un'organizzazione v2, si tratta del server API di gestione. Per un'organizzazione v1, si tratta del cluster di amministrazione dell'organizzazione. Ad esempio, se è stata creata una VolumeReplicationRelationship che specifica zone2 come zona di destinazione ed esiste un PVC o un VirtualMachineDisk nell'organizzazione my-org, la CR VolumeFailover viene creata nel piano di gestione my-org in zone2. In questo modo, la relazione di replica tra le due zone viene interrotta e il PVC o il VirtualMachineDisk nella zona di destinazione può essere montato da un workload:
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
Sostituisci quanto segue:
FAILOVER_NAME: il nome della risorsa VolumeFailover.MANAGEMENT_API_SERVER: il percorso kubeconfig del server API di zona.VRR_NAME: il nome della risorsa VolumeReplicationRelationship.PROJECT: lo spazio dei nomi della risorsa Project.In seguito, un failover riuscito si riflette nello stato della CR:
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \ -n PROJECT -o yamlL'output è simile al seguente:
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: CompletedDopo aver creato il failover,
my-vrr-replVolumeReplicationRelationshippassa allo statoBroken Off. Il PVC o il VirtualMachineDisk inzone2è ora montabile.A questo punto, il
VolumeReplicationRelationshipsarà simile all'esempio seguente. Anche in questo caso, l'output è stato troncato per semplificazione:kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yamlL'output è simile al seguente:
API PVC
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
API VM Disk
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
Ora puoi eliminare
VolumeReplicationRelationship, poiché è l'unica azione rimanente che può essere eseguita su questa CR.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
Ridimensiona i volumi
Se in un qualsiasi momento il volume di origine viene ridimensionato, anche il volume corrispondente nella zona di destinazione, creato per conto dell'utente quando viene creato un VolumeReplicationRelationship, deve essere ridimensionato in modo da corrispondere.
Consulta la documentazione Espandi i dischi delle VM o Espandi la capacità del volume per ridimensionare lo spazio di archiviazione sia nelle zone di origine che in quelle di destinazione.