이 페이지에서는 Google Distributed Cloud (GDC) 에어 갭 블록 스토리지 볼륨의 비동기 복제를 설정하고 실행하는 방법을 보여줍니다.
비동기 복제는 한 GDC 영역에서 다른 영역으로 데이터를 복제하는 데 사용됩니다. 이 복제된 데이터는 소스 영역의 데이터를 사용할 수 없는 경우 장애 조치 시나리오에서 사용할 수 있습니다. 장애 조치 생성 후에는 원래 볼륨이 동일한 대상 볼륨으로 복제되도록 설정할 수 없습니다. 대신 새 복제 관계를 만들어야 합니다.
gdcloud CLI를 사용하려는 애플리케이션 운영자는 볼륨 비동기식 복제를 참고하세요.
시작하기 전에
비동기 블록 복제를 사용하려면 인프라 운영자 (IO)가 먼저 비동기 복제를 위한 두 개의 영역을 설정해야 합니다.다음으로 VolumeReplicationRelationship 리소스를 관리할 수 있는 volume-replication-admin-global 역할이 있는지 확인합니다. 글로벌 API를 사용할 수 없는 경우 app-volume-replication-admin 역할을 사용하여 영역 VolumeReplicationRelationshipReplica 리소스를 직접 수정할 수 있습니다.
복제 설정
VolumeReplicationRelationship 커스텀 리소스 (CR)는 비동기 블록 복제 API를 제공합니다. 이 CR은 전역 관리 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 디스크를 복제하려면 프로젝트 VirtualMachine 관리자 역할이 있어야 합니다. 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을 만들 수 있습니다. v2 조직의 경우 관리 API 서버입니다. v1 조직의 경우 조직 관리자 클러스터입니다. 예를 들어 대상 영역으로 zone2을 지정하는 VolumeReplicationRelationship가 생성되고 PVC 또는 VirtualMachineDisk가 my-org 조직에 있는 경우 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
이제 이 CR에서 실행할 수 있는 유일한 작업이므로
VolumeReplicationRelationship를 삭제해도 됩니다.kubectl --kubeconfig MANAGEMENT_API_SERVER delete volumereplicationrelationship VRR_NAME \ -n PROJECT
볼륨 크기 조절
언제든지 소스 볼륨의 크기가 조절되면 VolumeReplicationRelationship가 생성될 때 사용자를 대신하여 생성되는 대상 영역의 해당 볼륨도 일치하도록 크기가 조절되어야 합니다.
소스 및 대상 영역 모두에서 스토리지를 크기 조절하려면 VM 디스크 확장 문서 또는 볼륨 용량 확장을 참고하세요.