14장. 백업 및 복원
14.1. VM 스냅샷을 사용하여 백업 및 복원
스냅샷을 사용하여 VM(가상 머신)을 백업하고 복원할 수 있습니다. 스냅샷은 다음 스토리지 공급자가 지원합니다.
- Red Hat OpenShift Data Foundation
- Kubernetes Volume Snapshot API를 지원하는 CSI(Container Storage Interface) 드라이버가 있는 기타 클라우드 스토리지 공급자
온라인 스냅샷의 기본 시간 기한은 5분(5m
)이며 필요한 경우 변경할 수 있습니다.
온라인 스냅샷은 핫플러그 가상 디스크가 있는 가상 머신에서 지원됩니다. 그러나 가상 머신 사양에 없는 핫플러그 디스크는 스냅샷에 포함되지 않습니다.
무결성이 가장 높은 온라인(실행 상태) VM의 스냅샷을 생성하려면 운영 체제에 포함되지 않은 경우 QEMU 게스트 에이전트를 설치합니다. QEMU 게스트 에이전트는 기본 Red Hat 템플릿에 포함되어 있습니다.
QEMU 게스트 에이전트는 시스템 워크로드에 따라 VM 파일 시스템을 가능한 한 많이 정지하여 일관된 스냅샷을 사용합니다. 이렇게 하면 스냅샷을 생성하기 전에 진행 중인 I/O가 디스크에 기록됩니다. 게스트 에이전트가 없으면 정지를 수행할 수 없으며 최상의 스냅샷을 생성합니다. 스냅샷이 수행된 조건은 웹 콘솔 또는 CLI에 표시되는 스냅샷 표시에 반영됩니다.
14.1.1. 스냅샷 정보
스냅샷은 특정 시점의 VM(가상 머신) 상태 및 데이터를 나타냅니다. 스냅샷을 사용하면 백업 및 재해 복구를 위해 기존 VM을 (스냅샷에 표시된) 이전 상태로 복원하거나 이전 개발 버전으로 신속하게 롤백할 수 있습니다.
VM 스냅샷은 전원이 꺼진(중지됨 상태) VM에서 생성되거나 전원이 켜진(실행 중 상태)에서 생성됩니다.
실행 중인 VM의 스냅샷을 생성하는 경우 컨트롤러는 QEMU 게스트 에이전트가 설치되어 실행 중인지 확인합니다. 이 경우 스냅샷을 생성하기 전에 VM 파일 시스템을 중지하고 스냅샷을 만든 후 파일 시스템을 취소합니다.
스냅샷에는 VM에 연결된 각 CSI(Container Storage Interface) 볼륨 복사본과 VM 사양 및 메타데이터 복사본이 저장됩니다. 스냅샷을 생성한 후에는 변경할 수 없습니다.
다음 스냅샷 작업을 수행할 수 있습니다.
- 새 프로젝트 생성
- 스냅샷에서 가상 머신 복사본 생성
- 특정 VM에 연결된 모든 스냅샷 나열
- 스냅샷에서 VM 복원
- 기존 VM 스냅샷 삭제
VM 스냅샷 컨트롤러 및 사용자 정의 리소스
VM 스냅샷 기능에는 스냅샷을 관리하기 위해 사용자 정의 리소스 정의(CRD)로 정의된 세 가지 새 API 오브젝트가 도입되었습니다.
-
VirtualMachineSnapshot
: 스냅샷을 생성하라는 사용자 요청을 나타냅니다. 여기에는 VM의 현재 상태 정보가 포함됩니다. -
VirtualMachineSnapshotContent
: 클러스터의 프로비저닝 리소스를 나타냅니다(스냅샷). VM 스냅샷 컨트롤러에서 생성하며 VM을 복원하는 데 필요한 모든 리소스에 대한 참조를 포함합니다. -
VirtualMachineRestore
: 스냅샷에서 VM을 복원하라는 사용자 요청을 나타냅니다.
VM 스냅샷 컨트롤러는 VirtualMachineSnapshot
오브젝트와 이 오브젝트에 대해 생성된 VirtualMachineSnapshotContent
오브젝트를 일대일 매핑으로 바인딩합니다.
14.1.2. 스냅샷 생성
OpenShift Container Platform 웹 콘솔 또는 명령줄을 사용하여 VM(가상 머신)의 스냅샷을 생성할 수 있습니다.
14.1.2.1. 웹 콘솔을 사용하여 스냅샷 생성
OpenShift Container Platform 웹 콘솔을 사용하여 VM(가상 머신)의 스냅샷을 생성할 수 있습니다.
VM 스냅샷에는 다음 요구 사항을 충족하는 디스크가 포함됩니다.
- 데이터 볼륨 또는 영구 볼륨 클레임 중 하나
- CSI(Container Storage Interface) 볼륨 스냅샷을 지원하는 스토리지 클래스에 속해야 합니다.
프로세스
-
웹 콘솔에서 가상화
VirtualMachines 로 이동합니다. - VM을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- VM이 실행 중인 경우 옵션 메뉴 를 클릭하고 중지 를 선택하여 전원을 끕니다.
- 스냅샷 탭을 클릭한 후 스냅샷 찍기를 클릭합니다.
- 스냅샷 이름을 입력합니다.
- 이 스냅샷에 포함된 디스크를 확장하여 스냅샷에 스토리지 볼륨이 포함되어 있는지 확인합니다.
- VM에 스냅샷에 포함할 수 없는 디스크가 있고 계속 진행하려면 이 경고를 인식하고 계속 진행하시겠습니까.
- 저장을 클릭합니다.
14.1.2.2. 명령줄을 사용하여 스냅샷 생성
VirtualMachineSnapshot
오브젝트를 생성하여 오프라인 또는 온라인 VM에 대한 VM(가상 머신) 스냅샷을 생성할 수 있습니다.
사전 요구 사항
- PVC(영구 볼륨 클레임)이 CSI(Container Storage Interface) 볼륨 스냅샷을 지원하는 스토리지 클래스에 있는지 확인합니다.
-
OpenShift CLI(
oc
)를 설치합니다. - 선택 사항: 스냅샷을 생성할 VM의 전원을 끕니다.
프로세스
다음 예와 같이 새
VirtualMachineSnapshot
의 이름과 소스 VM의 이름을 지정하는VirtualMachineSnapshot
오브젝트를 정의하는 YAML 파일을 생성합니다.apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineSnapshot metadata: name: <snapshot_name> spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: <vm_name>
VirtualMachineSnapshot
오브젝트를 생성합니다.$ oc create -f <snapshot_name>.yaml
스냅샷 컨트롤러는
VirtualMachineSnapshotContent
오브젝트를 생성하여 VirtualMachineSnapshot에 바인딩하고VirtualMachineSnapshot
status
및readyToUse
필드를 업데이트합니다.선택 사항: 온라인 스냅샷을 생성하는 경우
wait
명령을 사용하여 스냅샷 상태를 모니터링할 수 있습니다.다음 명령을 실행합니다.
$ oc wait <vm_name> <snapshot_name> --for condition=Ready
스냅샷 상태를 확인합니다.
-
InProgress
- 온라인 스냅샷 작업이 아직 진행 중입니다. -
Succeeded
- 온라인 스냅샷 작업이 성공적으로 완료되었습니다. Failed
- 온라인 스냅샷 작업이 실패했습니다.참고온라인 스냅샷의 기본 시간 기한은 5분(
5m
)입니다. 5분 내에 스냅샷이 성공적으로 완료되지 않으면 상태가failed
로 설정됩니다. 나중에 파일 시스템이 손상되고 VM이 수정되지 않지만failed
스냅샷 이미지를 삭제할 때까지 상태는 실패로 유지됩니다.기본 시간 기한을 변경하려면 스냅샷 작업이 시간 초과되기 전에 지정할 시간(
m
) 또는 초(s
)를 사용하여 VM 스냅샷 사양에FailureDeadline
속성을 추가합니다.시간 기한을 설정하지 않으려면 0을 지정할 수 있지만
0
은 응답하지 않는 VM이 발생할 수 있으므로 일반적으로 권장되지 않습니다.m
또는s
와 같은 시간 단위를 지정하지 않으면 기본값은 초(s
)입니다.
-
검증
VirtualMachineSnapshot
오브젝트가 생성되고VirtualMachineSnapshotContent
에 바인딩되고readyToUse
플래그가true
로 설정되어 있는지 확인합니다.$ oc describe vmsnapshot <snapshot_name>
출력 예
apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineSnapshot metadata: creationTimestamp: "2020-09-30T14:41:51Z" finalizers: - snapshot.kubevirt.io/vmsnapshot-protection generation: 5 name: mysnap namespace: default resourceVersion: "3897" selfLink: /apis/snapshot.kubevirt.io/v1alpha1/namespaces/default/virtualmachinesnapshots/my-vmsnapshot uid: 28eedf08-5d6a-42c1-969c-2eda58e2a78d spec: source: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm status: conditions: - lastProbeTime: null lastTransitionTime: "2020-09-30T14:42:03Z" reason: Operation complete status: "False" 1 type: Progressing - lastProbeTime: null lastTransitionTime: "2020-09-30T14:42:03Z" reason: Operation complete status: "True" 2 type: Ready creationTime: "2020-09-30T14:42:03Z" readyToUse: true 3 sourceUID: 355897f3-73a0-4ec4-83d3-3c2df9486f4f virtualMachineSnapshotContentName: vmsnapshot-content-28eedf08-5d6a-42c1-969c-2eda58e2a78d 4
-
VirtualMachineSnapshotContent
리소스의spec:volumeBackups
속성을 확인하여 예상 PVC가 스냅샷에 포함되어 있는지 확인합니다.
14.1.3. 스냅샷 표시를 사용하여 온라인 스냅샷 확인
스냅샷 표시는 온라인 VM(가상 시스템) 스냅샷 작업에 대한 컨텍스트 정보입니다. 오프라인 VM(가상 시스템) 스냅샷 작업에는 표시를 사용할 수 없습니다. 표시는 온라인 스냅샷 생성에 대한 세부 정보를 설명하는 데 유용합니다.
사전 요구 사항
- 온라인 VM 스냅샷을 생성하려고 시도해야 합니다.
프로세스
다음 작업 중 하나를 수행하여 스냅샷 표시의 출력을 표시합니다.
-
명령줄을 사용하여
VirtualMachineSnapshot
오브젝트 YAML의상태
스탠자에서 표시기 출력을 확인합니다. -
웹 콘솔에서 스냅샷 세부 정보 화면에서 VirtualMachineSnapshot
Status 를 클릭합니다.
-
명령줄을 사용하여
status.indications
매개변수의 값을 확인하여 온라인 VM 스냅샷의 상태를 확인합니다.-
Online
에서는 온라인 스냅샷 생성 중에 VM이 실행 중임을 나타냅니다. -
GuestAgent
는 온라인 스냅샷 생성 중에 QEMU 게스트 에이전트가 실행 중임을 나타냅니다. -
NoGuestAgent
는 온라인 스냅샷을 생성하는 동안 QEMU 게스트 에이전트가 실행되지 않았음을 나타냅니다. QEMU 게스트 에이전트가 설치되지 않았거나 실행 중이거나 다른 오류로 인해 QEMU 게스트 에이전트를 사용하여 파일 시스템을 중지하고 해석할 수 없습니다.
-
14.1.4. 스냅샷에서 가상 머신 복원
OpenShift Container Platform 웹 콘솔 또는 명령줄을 사용하여 스냅샷에서 VM(가상 머신)을 복원할 수 있습니다.
14.1.4.1. 웹 콘솔을 사용하여 스냅샷에서 VM 복원
VM(가상 머신)을 OpenShift Container Platform 웹 콘솔의 스냅샷에 표시된 이전 구성으로 복원할 수 있습니다.
프로세스
-
웹 콘솔에서 가상화
VirtualMachines 로 이동합니다. - VM을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- VM이 실행 중인 경우 옵션 메뉴 를 클릭하고 중지 를 선택하여 전원을 끕니다.
- 스냅샷 탭을 클릭하여 VM과 연결된 스냅샷 목록을 확인합니다.
- 스냅샷을 선택하여 스냅샷 세부 정보 화면을 엽니다.
- 옵션 메뉴 를 클릭하고 VirtualMachineSnapshot 복원을 선택합니다.
- 복원을 클릭합니다.
14.1.4.2. 명령줄을 사용하여 스냅샷에서 VM 복원
명령줄을 사용하여 기존 VM(가상 머신)을 이전 구성으로 복원할 수 있습니다. 오프라인 VM 스냅샷에서만 복원할 수 있습니다.
사전 요구 사항
- 복원할 VM의 전원을 끕니다.
프로세스
YAML 파일을 생성하여 복원할 VM의 이름과 다음 예와 같이 소스로 사용할 스냅샷 이름을 지정하는
VirtualMachineRestore
오브젝트를 정의합니다.apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineRestore metadata: name: <vm_restore> spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: <vm_name> virtualMachineSnapshotName: <snapshot_name>
VirtualMachineRestore
오브젝트를 생성합니다.$ oc create -f <vm_restore>.yaml
스냅샷 컨트롤러는
VirtualMachineRestore
오브젝트의 상태 필드를 업데이트하고 기존 VM 구성을 스냅샷의 콘텐츠로 교체합니다.
검증
VM이 스냅샷에 표시된 이전 상태로 복원되고
전체
플래그가true
로 설정되어 있는지 확인합니다.$ oc get vmrestore <vm_restore>
출력 예
apiVersion: snapshot.kubevirt.io/v1alpha1 kind: VirtualMachineRestore metadata: creationTimestamp: "2020-09-30T14:46:27Z" generation: 5 name: my-vmrestore namespace: default ownerReferences: - apiVersion: kubevirt.io/v1 blockOwnerDeletion: true controller: true kind: VirtualMachine name: my-vm uid: 355897f3-73a0-4ec4-83d3-3c2df9486f4f resourceVersion: "5512" selfLink: /apis/snapshot.kubevirt.io/v1alpha1/namespaces/default/virtualmachinerestores/my-vmrestore uid: 71c679a8-136e-46b0-b9b5-f57175a6a041 spec: target: apiGroup: kubevirt.io kind: VirtualMachine name: my-vm virtualMachineSnapshotName: my-vmsnapshot status: complete: true 1 conditions: - lastProbeTime: null lastTransitionTime: "2020-09-30T14:46:28Z" reason: Operation complete status: "False" 2 type: Progressing - lastProbeTime: null lastTransitionTime: "2020-09-30T14:46:28Z" reason: Operation complete status: "True" 3 type: Ready deletedDataVolumes: - test-dv1 restoreTime: "2020-09-30T14:46:28Z" restores: - dataVolumeName: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1 persistentVolumeClaim: restore-71c679a8-136e-46b0-b9b5-f57175a6a041-datavolumedisk1 volumeName: datavolumedisk1 volumeSnapshotName: vmsnapshot-28eedf08-5d6a-42c1-969c-2eda58e2a78d-volume-datavolumedisk1
14.1.5. 스냅샷 삭제
OpenShift Container Platform 웹 콘솔 또는 명령줄을 사용하여 VM(가상 머신)의 스냅샷을 삭제할 수 있습니다.
14.1.5.1. 웹 콘솔을 사용하여 스냅샷 삭제
웹 콘솔을 사용하여 기존 VM(가상 머신) 스냅샷을 삭제할 수 있습니다.
프로세스
-
웹 콘솔에서 가상화
VirtualMachines 로 이동합니다. - VM을 선택하여 VirtualMachine 세부 정보 페이지를 엽니다.
- 스냅샷 탭을 클릭하여 VM과 연결된 스냅샷 목록을 확인합니다.
- 스냅샷 옆에 있는 옵션 메뉴 를 클릭하고 VirtualMachineSnapshot 삭제 를 선택합니다.
- 삭제를 클릭합니다.
14.1.5.2. CLI에서 가상 머신 스냅샷 삭제
적절한 VirtualMachineSnapshot
오브젝트를 삭제하여 기존 VM(가상 머신) 스냅샷을 삭제할 수 있습니다.
사전 요구 사항
-
OpenShift CLI(
oc
)를 설치합니다.
프로세스
VirtualMachineSnapshot
오브젝트를 삭제합니다.$ oc delete vmsnapshot <snapshot_name>
스냅샷 컨트롤러는
VirtualMachineSnapshot
을 연결된VirtualMachineSnapshotContent
오브젝트와 함께 삭제합니다.
검증
스냅샷이 삭제되고 더 이상 이 VM에 연결되어 있지 않은지 확인합니다.
$ oc get vmsnapshot