Cette page explique comment configurer et effectuer la réplication asynchrone des volumes de stockage par blocs isolés de Google Distributed Cloud (GDC).
La réplication asynchrone est utilisée pour répliquer les données d'une zone GDC vers une autre. Ces données répliquées peuvent être utilisées en cas de basculement si les données de la zone source ne sont pas disponibles. Notez qu'une fois le basculement créé, le volume d'origine ne peut pas être configuré pour être répliqué sur le même volume de destination. Vous devez plutôt créer une relation de réplication.
Avant de commencer
Pour utiliser la réplication de blocs asynchrone, votre opérateur d'infrastructure (OI) doit d'abord configurer l'infrastructure de stockage entre les deux zones dans lesquelles la réplication est requise. Plus précisément, ils doivent d'abord appairer les clusters de stockage concernés de chaque zone. Ensuite, ils doivent appairer la machine virtuelle de stockage à l'organisation dans laquelle le stockage de blocs est provisionné.
Ensuite, assurez-vous de disposer du rôle volume-replication-admin-global pour administrer la ressource VolumeReplicationRelationship. Si l'API globale n'est pas disponible, le rôle app-volume-replication-admin peut être utilisé pour modifier directement la ressource VolumeReplicationRelationshipReplica zonale.
Configurer la réplication
La ressource personnalisée (CR) VolumeReplicationRelationship gère l'API de réplication de blocs asynchrone. Cette RS existe dans l'API de gestion globale. Pour activer la réplication d'un appareil de stockage en mode bloc donné, vous devez créer un CR VolumeReplicationRelationship sur l'API de gestion globale :
API PVC
Veuillez indiquer une liaison de projet. Assurez-vous d'avoir associé votre projet à chaque ressource de cluster dans chaque zone participante.
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
Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès au fichier kubeconfig du serveur d'API zonal.VRR_NAME: nom de la ressource VolumeReplicationRelationship.PROJECT: espace de noms de la ressource Project.SOURCE_USER_CLUSTER_NAME: nom de la ressource de cluster d'utilisateur source à connecter.PVC_NAME: nom de la ressource PersistentVolumeClaim.SOURCE_ZONE_NAME: nom de la ressource de zone source.DESTINATION_USER_CLUSTER_NAME: nom de la ressource de cluster d'utilisateur de destination à connecter.DESTINATION_ZONE_NAME: nom de la ressource de zone de destination.
Cet exemple suppose qu'un projet nommé PROJECT est créé dans une organisation nommée my-org et qu'un PVC nommé PVC_NAME a déjà été provisionné. SOURCE_USER_CLUSTER_NAME correspond au nom du cluster source sur lequel le PVC existe, et DESTINATION_USER_CLUSTER_NAME correspond au nom du cluster de destination sur lequel un nouveau PVC existera.
Les champs source et destination de la spécification indiquent respectivement l'emplacement d'origine et de destination des données répliquées. Dans cet exemple, les données sont répliquées de SOURCE_ZONE_NAME vers DESTINATION_ZONE_NAME.
API VM Disk
Répliquer des disques de machine virtuelle
VolumeReplicationRelationship gère également l'API de réplication asynchrone des disques de machines virtuelles (disques de VM).
Le disque source répliqué est appelé disque principal. Le disque de destination sur lequel les données sont répliquées est appelé disque secondaire. Le démarrage de la réplication asynchrone sur un disque principal crée automatiquement le disque secondaire.
Demander des autorisations et un accès
Pour répliquer des disques de VM, vous devez disposer du rôle Administrateur VirtualMachine du projet. Suivez les étapes pour vérifier que vous disposez du rôle Administrateur VirtualMachine du projet (project-vm-admin) dans l'espace de noms du projet où réside le disque de la VM.
Pour les opérations sur les VM à l'aide de la gcloud CLI, demandez à votre administrateur IAM de projet de vous attribuer le rôle d'administrateur de machines virtuelles du projet et le rôle de lecteur du projet (project-viewer).
Démarrer la réplication asynchrone
Démarrez la réplication asynchrone sur un disque de VM à l'aide de 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
Remplacez les éléments suivants :
MANAGEMENT_API_SERVER: chemin d'accès au fichier kubeconfig du serveur d'API zonal.VRR_NAME: nom de la ressource VolumeReplicationRelationship.PROJECT: espace de noms de la ressource Project.SOURCE_ZONE_NAME: nom de la ressource de zone source.DESTINATION_ZONE_NAME: nom de la ressource de zone de destination.VIRTUAL_MACHINE_SOURCE_DISK_NAME: nom de la ressource VirtualMachineDisk sur la source.VIRTUAL_MACHINE_DESTINATION_DISK_NAME: nom de la ressource VirtualMachineDisk sur la destination.
Cet exemple suppose qu'un projet nommé PROJECT est créé dans une organisation nommée my-org et qu'un VirtualMachineDisk nommé VIRTUAL_MACHINE_SOURCE_DISK_NAME a déjà été provisionné pour la ressource VirtualMachine.
Les champs source et destination de la spécification indiquent respectivement l'emplacement d'origine et de destination des données répliquées. Dans cet exemple, les données sont répliquées de SOURCE_ZONE_NAME vers DESTINATION_ZONE_NAME.
Validation
Vérifiez l'état de la relation de réplication en récupérant le CR VolumeReplicationRelationship à partir de l'API globale. Reportez-vous à l'exemple suivant. Notez que le résultat a été tronqué pour simplifier :
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \
-n PROJECT -o yaml
Le résultat ressemble à ce qui suit :
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
Créer un basculement
Si la zone source n'est pas disponible pour une raison quelconque, une demande de création de réplique (VolumeFailover) peut être créée dans le plan de gestion de la zone de destination de l'organisation. Pour une organisation v2, il s'agit du serveur de l'API Management. Pour une organisation v1, il s'agit du cluster d'administrateur de l'organisation. Par exemple, si un VolumeReplicationRelationship a été créé et spécifie zone2 comme zone de destination, et qu'un PVC ou un VirtualMachineDisk existe dans l'organisation my-org, la CR VolumeFailover est créée dans le plan de gestion my-org dans zone2. Cela rompt la relation de réplication entre les deux zones et permet à la PVC ou au VirtualMachineDisk de la zone de destination d'être monté par une charge de travail :
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
Remplacez les éléments suivants :
FAILOVER_NAME: nom de la ressource VolumeFailover.MANAGEMENT_API_SERVER: chemin d'accès au fichier kubeconfig du serveur d'API zonal.VRR_NAME: nom de la ressource VolumeReplicationRelationship.PROJECT: espace de noms de la ressource Project.Une fois le basculement réussi, l'état du CR est mis à jour :
kubectl --kubeconfig MANAGEMENT_API_SERVER get volumefailover FAILOVER_NAME \ -n PROJECT -o yamlLe résultat ressemble à ce qui suit :
apiVersion: storage.gdc.goog/v1 kind: VolumeFailover metadata: name: my-failover namespace: my-project spec: volumeReplicationRelationshipRef: my-vrr-repl status: state: CompletedUne fois le basculement créé, l'état
my-vrr-replVolumeReplicationRelationshippasse àBroken Off. Le PVC ou VirtualMachineDisk danszone2peut désormais être monté.À ce stade,
VolumeReplicationRelationshipdevrait ressembler à l'exemple suivant. Encore une fois, ce résultat a été tronqué pour simplifier l'explication :kubectl --kubeconfig MANAGEMENT_API_SERVER get volumereplicationrelationship VRR_NAME \ -n PROJECT -o yamlLe résultat ressemble à ce qui suit :
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
Vous pouvez maintenant supprimer le
VolumeReplicationRelationship, car il s'agit de la seule action restante qui peut être effectuée sur cette CR.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
Redimensionner des volumes
Si le volume source est redimensionné à un moment donné, le volume correspondant dans la zone de destination, qui est créé pour l'utilisateur lorsqu'un VolumeReplicationRelationship est créé, doit également être redimensionné pour correspondre.
Consultez la documentation Développer des disques de VM ou Développer la capacité des volumes pour redimensionner le stockage dans les zones source et de destination.